Чтобы записать скринкаст с рабочего стола, есть много графических программ для этого. Но часто нет возможности их использовать по тем или иным причинам. В этой статье разберем, как можно записать скринкаст из консоли.
Для этого будетм использовать 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. Но учтите, что качество перекодированного видео может быть не совсем приемлемым. Т.к. мы использовали все опции по умолчанию.
ffmpeg -i screencast.mov -vcodec libx264 -vpre slow -crf 22 -threads 0 -acodec libmp3lame -ar 44100 -ab 128k screencast2.mkv
Чем меньше значение -crf, тем лучше качество и больше размер файла. Наиболее приемлемые примерные пределы от 18 до 28.
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 (худшее).