Как записать конкретное окно с помощью 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), и это сработало...

Странно, мышь немного смещена...