воскресенье, 8 апреля 2012 г.

Создание скринкастов с помощью ffmpeg


Для создания высококачественных скринкастов, видеороликов отражающих
совершаемые на экране действия, удобно использовать пакет FFmpeg. Для работы
функции по созданию скринкастов пакет ffmpeg должен быть создан с опцией
"--enable-x11grab" (уже используется по умолчанию в Ubuntu и многих
дистрибутивах).

На первом шаге создаем запись действий на экране, кодеком без потери качества
(libx264), чтобы потом можно было подготовить несколько версий ролика в
разных форматах (например, можно отдельно создать вариант для YouTube и версии
с разным качеством кодирования):

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x768 -i :0.0 \
-acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast \ 
-threads 0 output_ll.mkv

где,
"-f alsa -ac 2 -i pulse -acodec pcm_s16le" - записываем стереозвук кодеком
pcm_s16le (без потери качества) с использованием звукового сервера PulseAudio
(для Linux-систем без PulseAudio можно попробовать "-f alsa -ac 2 -i /dev/dsp"
или "-f oss -ac 2 -i /dev/dsp");
"-f x11grab" - драйвер для записи с экрана;
"-r 30" - число кадров в секунду (FPS);
"-s 1024x768 -i :0.0" - размер видео и смещение позиции на экране, напирмер,
указав "-s 800x600 -i :0.0+200,100" можно организовать запись блока 800x600 со
смещением 200x100 относительно верхнего левого угла экрана;
"-vcodec libx264 -vpre lossless_ultrafast" - выбираем кодек libx264 без
потери качества.

На втором шаге перекодируем созданный ролик в более компактное представление и
отрезав лишние хвосты:
MP4/h.264:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libfaac\
-ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 video.mp4

Через опции "-ss 00:00:15 -t 00:05:01" организован пропуск первых 10 секунд
записи и вырезано несколько секунд перед концом (записывается ровно 5 минут и 1
секунда).
OGG/Theora:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libvorbis \
-ab 128k -ac 2 -vcodec libtheora -b 1000k video.ogg

Matroska/h.264:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libvorbis \
-ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 video.mkv

AVI/xvid:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libmp3lame -ab 128k
-ac 2 \
-vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4
-trellis 1 \
-threads 0 our-final-product.avi

Если необходимо в процессе записи ролика отвлечься и прервать запись, разные
куски можно записать в отдельные файлы, а затем объединить их командой mkvmerge:

mkvmerge -o complete.mkv part1.mkv +part2.mkv +part3.mkv +part4.mkv


Материал заимствован из http://www.opennet.ru/tips/2534_screencast_video_ffmpeg.shtml