Как записать конкретное окно с помощью ffmpeg?
Я использую ffmpeg для записи окна с помощью этого кода:
ffmpeg.exe
-f dshow
-y
-i video="screen-capture-recorder":audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-framerate 15
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
-vf crop=Width:Height:Left:Top
output.flv
Но проблема в том, что я могу переместить окно, это приведет к записи области без окна, которое я хочу.
Как я могу захватить определенное окно, которое я могу переместить?
Изменить: Я также использовал gdigrab
для захвата моего окна (например, Skype
) вместо dshow
:
ffmpeg.exe
-y
-f dshow
-i audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-f gdigrab
-draw_mouse 0
-i title="Skype"
-framerate 30
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
output.flv
Но конференция черная...
Ответы
Ответ 1
Он упомянул в здесь:
По умолчанию он фиксирует "полный экран" основного монитора рабочего стола (все окна, перекрывающиеся, оттуда, с aero, если vista +, без прозрачные окна, если не aero).
Чтобы настроить его по-другому, запустите предоставленную "настройку конфигурации" утилиты/ярлыки "или настроить параметры реестра перед запуском запуска (только для продвинутых пользователей):
HKEY_CURRENT_USER\Software\экран захвата-рекордер
с ключами DWORD, соответствующими стандарту start_XXX и т.д. (см. прилагаемый файл {INSTALLDIR}\configuration_setup_utility\setup_screen_tracker_params.rb для получения полного списка доступных значений ключа реестра или https://github.com/rdp/screen-capture-recorder-to-video-windows-free/blob/master/configuration_setup_utility/setup_screen_tracker_params.rb#L9)
ex: см. файл configuration_setup_utility\incoming.reg(хотя NB, что эти значения находятся в шестнадцатеричном виде, поэтому редактирование этого файла немного утомительно - я всегда используйте regedit или сопутствующие утилиты script и dont отредактируйте его вручную).
К "reset" значение удаляет его ключ.
И вы можете увидеть в здесь, что есть следующие параметры регистрации:
- capture_height
- capture_width
- start_x
- start_y
- default_max_fps
- stretch_to_width
- stretch_to_height
- stretch_mode_high_quality_if_1
- hwnd_to_track
- disable_aero_for_vista_plus_if_1
- track_new_x_y_coords_each_frame_if_1
- capture_mouse_default_1
- capture_foreground_window_if_1
- dedup_if_1
- millis_to_sleep_between_poll_for_dedupe_changes
- capture_transparent_windows_including_mouse_in_non_aero_if_1_causes_annoying_mouse_flicker
- hwnd_to_track_with_window_decoration
Ответ 2
Этот пример работает для меня:
ffmpeg -f gdigrab -framerate 30 -i title="german.avi - VLC media player" -b:v 3M germ.flv
где "title" означает фактическое название целевого окна.
Надеюсь, это поможет.
Ответ 3
ffmpeg -rtbufsize 1500M -f dshow -i audio = "virtual-audio-capturer" -f gdigrab -фрагментировать 30 -draw_mouse 1 -i title= RecordWindow -pix_fmt yuv420p -profile: v baseline -y Huangbaohua.mp4
RecordWindow - это заголовок указанного окна.
Ответ 4
Я использовал это для записи подсказки
ffmpeg -rtbufsize 1500M -f dshow -i audio="Microfono (8- Logitech USB Headset)" -f gdigrab -framerate 30 -draw_mouse 1 -i title="Prompt dei comandi" -pix_fmt yuv420p -profile:v baseline -y output\output3_xp.mp4
pause
Но он работает только с разрешением 100x20 (colxrow) для подсказки или другим делимым размером экрана, в противном случае выдает ошибку:
[libx264 @ 0000027c7ed66200] width not divisible by 2 (269x432)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
П.С.: У меня эта проблема также с другими окнами, у которых нет даже ширины или высоты. Я создал окно с tkinter в Python, и я получаю сообщение об ошибке, затем я дал окно некоторую геометрию (300x500), и это сработало...
Странно, мышь немного смещена...