Захват экрана Windows с помощью ffmpeg

Ffmpeg - это кроссплатформенное и очень мощное программное обеспечение для обработки видео / аудио или потоковой передачи. В Linux ffmpeg может захватить экран X11 с помощью команды ниже:

ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpeg

Но возможно ли получить рабочий стол Windows с помощью ffmpeg?

8 ответов

Используйте встроенный экранный граббер GDI (установка не требуется) следующим образом:

ffmpeg -f gdigrab -framerate 10 -i desktop [output]

Это захватит ВСЕ ваши дисплеи как один большой непрерывный дисплей.

Если вы хотите ограничить область и показать захваченную область:

ffmpeg -f gdigrab -framerate ntsc -offset_x 10 -offset_y 20 -video_size 640x480 \
-show_region 1 -i desktop [output]

Чтобы получить содержимое окна с именем "Калькулятор":

ffmpeg -f gdigrab -framerate 25 -i title=Calculator [output]

Я обнаружил, что частота кадров 10 хорошо подходит для захвата экрана (вы можете изменить его).

Я закодировал оба файла и потоковые выходы, и это работает довольно хорошо.

Это поможет для захвата рабочего экрана на окнах:

ffmpeg -y -rtbufsize 100M -f gdigrab -t 00:00:30 -framerate 30 -probesize 10M -draw_mouse 1 -i рабочий стол -c:v libx264 -r 30 -представить сверхбыструю настройку zerolatency -crf 25 -pix_fmt yuv420p c:/video_comapre2.mp4

* этот код успешно опробован в Windows XP Sp3 и ffmpeg (последняя версия 28/12/2012 для windows) -ffmpeg.exe должен быть скопирован в каталог c:\windows\system32 для доступа из любого места с вашего компьютера) ScreenCapture может быть скачать бесплатно (гугл). Установите его (файл MSI). Его регистрируется автоматически из файла (ScreenCapture.ax). Он также отправляется с файлом IscrenCapture.h.

-capture на экране видео и аудио (настройте аудио устройства, которое у вас есть - у меня RealTek AC97 Audio) Я не могу установить параметры UscreenCapture в реестре (пробовал даже в файле IscrenCapture.h). Он всегда обеспечивает только полный захват экрана. Ошибка в расположении реестра, в типах параметров (слова задаются автором, но установлен reg_binary)... затем я использовал функцию ffmpeg crop() для захвата любого региона на экране. Командная строка:

xwidth, xheight ширина и высота области, которую хотите захватить.xleft, xtop координата верхней левой точки захвата прямоугольника.

ffmpeg -f dshow -i video="UScreenCapture":audio="Realtek AC97 Audio" -vf crop=xwidth:xheight:xleft:xtop c:\output.flv

для захвата видео можно использовать только

ffmpeg -f dshow -i video="UScreenCapture" -vf  crop=xwidth:xheight:xleft:xtop c:\output.flv

NB: x11grab не работает на Windows (это специально для Linux/X11) может использовать wscript.shell для кодирования командной строки без вывода сообщений. Я использовал формат вывода видео как FLV, потому что у меня лучший рендеринг и небольшая емкость. Я не добился успеха с mp4.

вы можете узнать ваши медиа устройства с помощью ffmpeg:

ffmpeg -list_devices true -f dshow -i dummy

-вы можете записать любой звук с вашего компьютера с помощью этой командной строки (адаптировать устройство, которое у вас есть):

ffmpeg -f dshow -i audio="Realtek AC97 Audio" -acodec libmp3lame "c:\out.mp3"

Ffmpeg windows static version 4.2.2, запись экрана со звуком

проверить свой микрофон

ffmpeg -list_devices true -f dshow -i dummy

затем скопируйте ваш audio="ВАШ МИКРОФОН ИЛИ СТЕРЕО МИКС", мой - "Микрофон (Realtek High Definition Audio)".

ffmpeg -rtbufsize 1500M -f dshow -i audio="Microphone (Realtek High Definition Audio)" -f -y -rtbufsize 100M -f gdigrab -t 00:00:30 -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "d:\ffmpeg_testing.mp4"

Патч для реализации этого был отправлен в список рассылки ffmpeg некоторое время назад. Это бы осуществило gdigrab работать так же, как x11grab,

Кроме того, на странице кодека ffmpeg говорится, что поддерживается захват видео "VfW" (Video for Windows или DirectShow?).

http://nerdlogger.com/2011/11/03/stream-your-windows-desktop-using-ffmpeg/

объясняет, как это сделать.

в основном, установите фильтр uscreencapture dshow, затем ffmpeg -f dshow -i video="UScreenCapture" out.mp4

Это можно сделать без использования x11grab/xcbgrab/gdigrab с помощью следующих команд в linux.

Чтобы записать видео,

 ffmpeg -f x11grab  -s 1366x768 -i :0.0 -r 25 -vcodec libx264  output.mkv

Чтобы записать кадр,

./ffmpeg -f fbdev -framerate 1 -i /dev/fb1 -frames:v 1 screenshot3.jpeg

Я хотел бы добавить команду, которую я использую для захвата экрана:

      ffmpeg.exe -y ^
-vsync vfr ^
-f gdigrab ^
-indexmem 300M ^
-rtbufsize 1G ^
-probesize 7M ^
-max_probe_packets 50k ^
-draw_mouse 0 ^
-video_size 1280x720 ^
-offset_y 152 ^
-framerate 24 ^
-c:v bmp ^
-strict strict ^
-thread_queue_size 50k ^
-r 24 ^
-i desktop ^
-f dshow ^
-channel_layout stereo ^
-thread_queue_size 50k ^
-strict strict ^
-i "audio=Stereo-mix (Realtek High Definition Audio)" ^
-map 0:v ^
-max_muxing_queue_size 50k ^
-f mp4 ^
-movflags +faststart ^
-max_interleave_delta 0 ^
-c:v libx264 ^
-r 24 ^
-preset fast ^
-tune film ^
-strict strict ^
-crf 25 ^
-pix_fmt yuv422p ^
-map 1:a ^
-max_muxing_queue_size 50k ^
-max_interleave_delta 0 ^
-c:a aac ^
-strict strict ^
-ac 2 ^
screencapture.mp4

Значение probesize оказывает большое влияние на синхронизацию аудио/видео. Увеличение значения на несколько мегабайт может привести к рассинхронизации аудио/видео. Изменение на 1M или 500k, например, до 7500k за раз. Если вы не укажете параметр probesize, ffmpeg по умолчанию установит для параметра probesize значение 5M.

Параметр max_interleave_delta предотвращает принудительный вывод ffmpeg. Если ffmpeg принудительно выводит, в вашем журнале появится сообщение, например:[mp4 @ 00000199f7512040] Задержка между первым и последним пакетом в очереди мультиплексирования составляет 10007271 > 10000000: принудительный вывод

Если ffmpeg требует много процессорного времени, попробуйте изменить параметр -preset (сверхбыстрый, сверхбыстрый, очень быстрый, быстрее, быстрый, средний (по умолчанию), медленный, медленнее, очень медленный), больше -crf (коэффициент постоянной скорости), например, 32 или ниже частота кадров (параметры -framerate и -r в нескольких местах команды).

Другие вопросы по тегам