ffmpeg запись видео с экрана

Чтобы произвести запись видео с экрана нужен один файл, всего лишь один файл!!! Но прежде чем раскрывать этот lifehack, будет предыстория 🙂

Занадобилось мне записать видюшку о сравнении скорости работы GIMP и Photoshop, казалось бы, что может быть проще. Открываем Google, вбиваем «запись с экрана бесплатно». Вываливаются тонны софта. Но половина из них триалки с watermark’ами, половина пишут меньше 5 минут. Может среди всего этого и есть та заветная программка в дебрях gihub’а или sourceforhg’а, но времени искать ее не было и решил обратиться к старому-доброму FFmpeg. Когда-то слышал, что помимо видеокодирования FFmpeg может еще и экран записывать.

Как я уже говорил FFmpeg распространяется в виде одного файла и все, что вам нужно сделать это скачать этот файл. Устанавливать ничего не надо, просто файлик копируем из сети.

Ну а дальше все просто. Открываем командную строку. Вводим следующую команду и после нажатия Enter начнется запись с экрана. Чтобы остановить запись нажмите Ctrl+C в окне с запущенным FFmpeg.

Как всегда есть небольшие нюансы при записи в Linux и в Windows. Рассмотрим их детальнее.

Windows

Чтобы записать экран под Windows с помощью ffmpeg откройте Command Prompt и запустите следующую команду:

ffmpeg.exe -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p screen.mp4

 

Сразу же после запуска начнется запись с экрана в файл screen.mp4:

Для остановки записи нажмите несколько раз Ctrl+C в окне, где запущен ffmpeg (чаще всего хватает одного раза).

Разберем подробнее параметры запуска ffmpeg.

-y — если в текущей директории есть файл screen.mp4, то ffmpeg перезапишет его не задавая вопросов;

-rtbufsize 100M — буфер под видео. Запись с экрана должна идти бысто и гладко, чтобы не было дропов (пропусков) кадров. Поэтому лучше сначала записывать видео в память (так  быстрее чем на диск), а затем ffmpeg сам перенесет из памяти на диск.

-f gdigrab — опция необходима если вы пишите экран в Windows;

-framerate 30 — частота кадров результирующего видео;

-probesize 10M — количество кадров необходимое ffmpeg для идентификации потока. Вроде со значением 10M работает нормально;

-draw_mouse 1 — рисовать мышку;

-i desktop — говорим ffmpeg записывать весь экран;

-c:v libx264 — сжимать будем в формат MP4 кодеком x264;

-r 30 — кодек запишет видео с частотой 30 кадров в секунду;

-preset ultrafast — говорим кодеку, чтобы долго не раздумывал и кодировал видеопоток, как можно быстрее (при записи экрана это актуально);

-tune zerolatency — опция кодека x264 для ускорения кодирования;

-crf 25 — качество записываемого видео (большее значение — хуже видео, меньшее — лучше);

-pix_fmt yuv420p — цветорвой формат результирующего видео.

Как видите большинство опций представляют стандартный набор для ffmpeg, за исключением rtbufsize, preset ultrafast, tune zerolatency, которые отвечают за скорость кодирования.

Linux

В Linux все тоже самое за исключением того, что надо определить значение переменной $DISPLAY.

$ echo $DISPLAY
:0

и полученное значение подставляем ключику «-i»:

ffmpeg -f x11grab  -y -rtbufsize 100M -s 1366x768 -framerate 30 -probesize 10M -draw_mouse 1 -i :0.0 -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p  screen.mp4

Почитать еще