web-dev-qa-db-ja.com

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

しかし、会議は真っ黒です...

16
Matin Lotfaliee

here で言及しています:

デフォルトでは、メインデスクトップモニターの「全画面」をキャプチャします(すべてのウィンドウ、そこから重なり合って、Vista +の場合はエアロ付き、非エアロの場合は透明ウィンドウなし)。

別の方法で構成するには、提供されている「構成セットアップユーティリティ/ショートカット」を実行するか、実行を開始する前にレジストリ設定を調整します(上級ユーザーのみ)。

HKEY_CURRENT_USER\Software\screen-capture-recorder

start_XXXなどのDWORDキーを尊重します…(使用可能なレジストリキー値の完全なリストについては、インクルードファイル{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

例:configuration_setup_utility\incoming.regファイルを参照してください(NBこれらの値は16進数であるため、このファイルの編集は少し面倒です-私は常にregeditまたは付随するスクリプトユーティリティを使用し、手で編集しないでください)。

値を「リセット」するには、そのキーを削除します。

そして here でこれらの登録オプションがあることがわかります:

  • capture_height
  • capture_width
  • start_x
  • start_y
  • default_max_fps
  • ストレッチ幅
  • ストレッチ_高さ
  • 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_includeing_mouse_in_non_aero_if_1_causes_annoying_mouse_flicker
  • hwnd_to_track_with_window_decoration
1
Matin Lotfaliee

この例は私にとってはうまくいきます:

ffmpeg -f gdigrab -framerate 30 -i title="german.avi - VLC media player" -b:v 3M  germ.flv

「タイトル」は、ターゲットウィンドウの実際のタイトルを意味します。

これがお役に立てば幸いです。

7
RdB

ffmpeg -rtbufsize 1500M -f dshow -i audio = "virtual-audio-capturer" -f gdigrab -framerate 30 -draw_mouse 1 -i title = RecordWindow -pix_fmt yuv420p -profile:v baseline -y Huangbaohua.mp4

recordWindowは、指定されたウィンドウのタイトルです。

2
Brian Huang

これを使ってプロンプトを録音しました

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!

追伸:この問題は、幅や高さが均一でない他のウィンドウでも発生します。 Pythonでtkinterを使用してウィンドウを作成しましたが、エラーが発生し、ウィンドウにいくつかのジオメトリ(300x500)を与えましたが、それはうまくいきました...

不思議なことに、マウスは少しずれています...

0
Giovanni G. PY