Запись скринкастов (видео с рабочего стола)
Чтобы записать скринкаст с рабочего стола, есть много графических программ для этого. Но часто нет возможности их использовать по тем или иным причинам. В этой статье разберем, как можно записать скринкаст из консоли.
Для этого будетм использовать ffmpeg.
FFmpeg - это кодировщик и конвертер аудио/видео с интерфейсом командной строки и поддержкой большого количества входных и выходных форматов. Список его возможностей и количество опций довольно велико, поэтому попробуем разобраться в некоторых из них.
Содержание
Запись скринкаста без звука
Для записи скринкаста будем использовать формат mov. Использование формата mov (QuickTime) без сжатия позволит сэкономить ресурсы процессора во время записи, но сильно скажется на размере конечного файла. В отличии от кодирования "на лету", которое создает файлы гораздо меньшего размера, но сильно нагружает процессор.
Пример записи скринкаста:
ffmpeg -r 50 -g 500 -s 1366x768 -f x11grab -i :0.0 -vcodec qtrle screencast.mov
где:
-f x11grab - источник сигнала, в данном случае вывод Х-сервера.
-s 1366x768 - размер захватываемой области, в данном случае соответствует разрешению монитора.
-r 50 - количество кадров в секунду.
-g 500 - каждый 500тый кадр будет ключевой.
-i :0.0 - экран X-сервера / номер монитора. Дополнительно можно указать смещение захватываемой области (положение верхнего левого угла) по X и Y следующим образом -i :0.0+10,20
-vcodec qtrle - видеокодек QuickTime.
screencast.mov - название файла в который будет записан скринкаст.
Размер захватываемой области вы определяете сами, в зависимости от вашего разрешения монитора.
Количество кадров в секунду, надо определять опытным путем. У кого-то на компьютере процессор тянет такое количество, а у кого-то притормаживает. Стандартно (и по умолчанию тоже) количество кадров в секунду - 25.
С ключевыми кадрами тоже надо экспериментировать. Если вы хотите выложить видео с каким-то багом, и не собираетесь в дальнейшем его как-то править в видео редакторах, то достаточно того что в примере. Если есть необходимость в дальнейшей правке видео, то лучше поставить ключевой кадр либо 80, либо 90, либо 100, либо 110. Тоже надо подбирать опытным путем. Но в таком случае размер записываемого файла будет больше.
Запись скринкаста со звуком
Для записи скринкаста со звуком, надо сначала посмотреть список доступных для записи устройств ALSA.
Это можно сделать, набрав команду в консоли:
arecord -l
У вас должно получиться что-то типа этого:
**** List of CAPTURE Hardware Devices **** card 0: SB [HDA ATI SB], device 0: ALC887-VD Analog [ALC887-VD Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: SB [HDA ATI SB], device 2: ALC887-VD Analog [ALC887-VD Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: VX2000 [Microsoft® LifeCam VX-2000], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
В данном примере есть web-камера Microsoft VX-2000 в которой встроен микрофон. И написано: card 2: далее device 0:. Запоминаем эти цифры. И пишем следующую команду для записи скринкаста с видео:
ffmpeg -f alsa -ac 1 -i hw:2,0 -acodec pcm_s16le -f x11grab -s 1366x768 -r 50 -g 500 -i :0.0 -vcodec qtrle screencast.mov
где:
-f alsa - источник сигнала, в данном случае вывод c через аудио сервер.
-ac 1 - сколько каналов будем записывать.
-acodec pcm_s16le - запись с помощью кодека pcm_s16le без сжатия.
-i hw:2,0 - устройство с которого пойдет запись звука. В данном случае с card 2 и device 0 - это web-камера.(запятая между ними обязательна)
screencast.mov - название файла в который будет записан скринкаст.
Стоит отметить один момент. Если вы хотите записать стерео звук, то в опции -ac 1 надо поменять цифру 1 на цифру 2, что указывает на 2 канала (стерео)
Перекодирование скринкаста
Так как мы использовали в примерах видео и аудио без сжатия, то некоторым понадобится все же сжать наш большой файл.
Кодирование видео без настроек
ffmpeg -i screencast.mov screencast2.avi
На выходе получим перекодированный файл screencast2.avi. Но учтите, что качество перекодированного видео может быть не совсем приемлемым. Т.к. мы использовали все опции по умолчанию.
Кодирование видео с помощью кодека libx264 в формат MKV
ffmpeg -i screencast.mov -vcodec libx264 -vpre slow -crf 22 -threads 0 -acodec libmp3lame -ar 44100 -ab 128k screencast2.mkv
Чем меньше значение -crf, тем лучше качество и больше размер файла. Наиболее приемлемые примерные пределы от 18 до 28.
Кодирование видео с помощью кодека Xvid
ffmpeg -i screencast.mov -vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0 -acodec libmp3lame -ab 128k -ac 2 screencast2.avi
Опция -qscale отражается на качестве итогового видео. Чем меньше значение, тем выше качество, больше размер видео и дольше кодирование. Значения лежат в пределах от 1 (лучшее качество) до 31 (худшее).