Я использую такие вещи:
avconv -f x11grab -s 1024x768 -r 24 -i 0:0 -deadline realtime -b 5000000 -minrate 200000 -maxrate 40000000 recording-filename-000.webm
Где:
-f x11grab
- вводит в действие «формат» захвата экрана.
-s 1024x768
разрешение входного файла (или область захвата). Например, соответствует разрешению рабочего стола. Если меньше, то область записи будет слева и сверху. В этом примере я использовал область записи 1024x768.
-r 24
- частота кадров. В основном, от 23 до 30 кадров в секунду, которые используются в реальных фильмах для плавной записи изображения. Однако для скринкаста было бы неплохо уменьшить это, чтобы получить лучшую картинку на низких битрейтах. Я использовал 24, чтобы сделать захват экрана игры.
-i 0:0
является подсказкой для использования отображения 0: 0 в качестве источника (устройство находится в нотации xorg). Если у вас только 1 монитор и настройка Xorg по умолчанию, 0: 0 будет в большинстве случаев нормально.
-deadline realtime
- это подсказка к libvpx. Мы хотим живой захват. Мы хотим производительность в реальном времени. Так что libvpx сделает все возможное, чтобы кодировать VP8 в режиме реального времени. Для этого он немного меняет качество на скорость. При заданном битрейте качество будет немного хуже, чем не в режиме реального времени. Но скорость кодирования взлетела бы до небес. Так что на моем оборудовании он может обрабатывать 1024x768 при 24 кадрах в секунду, яркие сцены без потери кадров (хотя рекомендуется мощный процессор). В этом примере я хотел получить живое изображение достойного качества при хорошем FPS и довольно большой области захвата. Таким образом, использование процессора кодеком может быть проблемой. Вот почему этот намек действительно нужен для хороших результатов.
-b 5000000
- целевой битрейт в битах / секунду. Я использовал 5 Мбит, чтобы получить более или менее хорошую картину довольно интенсивных сцен. Кодек будет стараться поддерживать среднюю скорость передачи битов видео вблизи этого значения. Чем ниже это значение, тем хуже качество и меньше файл. Вы можете немного поэкспериментировать, чтобы понять, какой битрейт хорош для определенных целей. Сервисы обмена видео будут конвертировать видео, если вы не выполните настройку. Если вы собираетесь использовать собственный сервер, вам решать заботу о трафике. Если вы недолетите, качество изображения будет плохим. Не стесняйтесь менять значение, чтобы понять, что лучше для вас. 5Mbits были предназначены для более или менее приятного для глаз живого захвата интенсивных сцен в играх, где вы не можете легко увидеть, что изображение слишком сжато. Для захвата неподвижных приложений вам понадобится гораздо меньше.
-minrate
200000 - минимально допустимый битрейт для кодека. В зависимости от характера вещи, которую вы хотите запечатлеть, иногда вам может потребоваться установить минимальный битрейт, чтобы сохранить разумно выглядящую картинку в любом случае. Иногда эвристика кодека может снизить битрейт намного ниже желаемого значения, что в некоторых случаях дает плохую картинку. Эта опция позволяет заставить кодек поддерживать минимальную скорость передачи битов, даже если кодек считает, что сцена простая, и скорость передачи битов может быть отброшена. Высокое значение этого параметра может увеличить размер файла, не позволяя кодеку использовать более низкие битрейты.
-maxrate 40000000
- Это значение контролирует максимальный битрейт при интенсивной съемке. Я использовал действительно высокое значение, чтобы позволить кодеку идти намного выше, чем желаемое среднее значение, если он считает, что более высокая скорость обязательна для поддержания достойного качества в некоторой сцене. Чтобы получить красивую картинку в любых условиях, желательно установить это достаточно высоко (40 Мбит - это скорость, похожая на BlueRay, и сработает). С другой стороны, если вы собираетесь транслировать его с помощью своего собственного сервера, вы должны уменьшить это значение за счет некоторого качества изображения в насыщенных сценах. Иначе сервер может не справиться с желаемой скоростью передачи битов, будучи не в состоянии доставить его пользователям в режиме реального времени. Тогда игрок столкнется с опустошением буфера (что раздражает). Сервисы обмена видео позаботятся сами о себе и, как правило, преобразуют видео в более низкие параметры за счет качества изображения.
recording-filename-000.webm
- это имя файла вывода. Если вы используете расширение .webm, ffmpeg / avconv достаточно умны, чтобы понять, что вам нужен WEBM. Это так просто - avconv угадывает желаемый формат по имени файла. Так что .WEBM файлы - это WEBM внутри.
Вот и все - эта команда выполняет прямую запись экрана в файл webm. Никаких дополнительных преобразований не требуется, и libvpx
намекнут на то, чтобы быть как можно быстрее. Нет звука, так как нет спецификации для ввода звука. Это может или не может быть то, что вы хотите. Для звука вы также должны указать источник входного сигнала для звукового потока.
PS это может показаться немного сложным, но в конце дня вы можете понять, что один размер не может соответствовать всем. Таким образом, чтобы получить красивую картинку в любых ситуациях, вам, возможно, захочется использовать некоторые ручки для кодека и настроить их. Ffmpeg дает вам все ручки, которые вам могут понадобиться, и гораздо больше. Это тяжелое оружие конвертации и кодирования видео. Так что этот пример - хорошая отправная точка для тех, кто хочет делать более или менее сложные кодировки и готов немного поэкспериментировать, чтобы получить действительно приличные результаты.