ffmpeg 単体で画面キャプチャができる gdigrab

linux で言うところの x11grab が windows でも使えるようになった。

gdigrab でできること。入力フォーマットはBGRA。
  • 全画面取り込み
  • 取り込み解像度指定とオフセット指定
  • アプリケーション取り込み(制限多い)
  • マウスカーソル非表示、表示
  • フレームレート指定
  • 取り込み位置表示
  • 出力ファイルはMP4でないと30fpsより大きな値で処理落ちする(ffmpeg 4.2 時点)
  • これの回避方法はフレームレートと同じ値をfpsフィルタに指定する
  • 最大フレームレートはMP4出力で62まで(ffmpeg 4.2 時点)
  • これもfpsフィルタ併用でCPU、GPU次第でおそらく上限がない
2014年4月3日以降の ffmpeg を利用すると gdigrab が使える。

ここのバイナリは対応している:Zeranoe FFmpeg - Builds

追記 2014/04/06
別途ライブラリをインストールする必要はなく、今まで通りに configure を設定して make をすれば、gdigrab が使える。

基本コマンド
video_track_timescale で tbn を直接指定している。
ffmpeg -f gdigrab -draw_mouse 1 -show_region 1 -framerate 30 -video_size 640x360 -offset_x 10 -offset_y 20 -i desktop -vf fps=30 -video_track_timescale 30 -pix_fmt yuv420p out.mp4

ffplay で再生する。
ffplay -f gdigrab -framerate 60 -offset_x 10 -offset_y 20 -video_size 1280x720 -i desktop

  • draw_mouse
    マウスカーソルを表示するかどうか。既定値は 1、0 で非表示
  • show_region
    取り込み範囲の表示。既定値は 1、0 で非表示
  • framerate
    フレームレート指定。既定値は ntsc の 30000/1001。30以上を指定するときはfpフィルタで同じ値を指定しないと速度が出ない
  • video_size
    取り込み解像度。既定値は全画面。コーデックによっては奇数の解像度を取り込めない
  • offset_x
    横軸のオフセット値。複数ディスプレイ環境の場合はメインディスプレイの右上からのオフセットとなる。既定値は 0
  • offset_y
    縦軸のオフセット値。複数ディスプレイ環境の場合はメインディスプレイの右上からのオフセットとなる。既定値は 0

単なる画面キャプチャなら取り込み位置を指定すればよいが、アプリケーションを取り込む場合はたいていの場合うまく取り込めない。タスクマネージャーのアプリケーション名を指定すると読み込めるが、日本語や多くの半角英数字のデバイスは読み込めない(と思う)。取り込めたとしても画面サイズが変わると動的にリサイズしない。表示が隠れると上に表示されているものか、黒塗りに変わる。そのほかの注意点は出力解像度はアプリケーションの解像度よりも大きくしないこと。

アプリケーション名(hoge)で取り込むコマンド
ffmpeg -f gdigrab -draw_mouse 1 -show_region 1 -framerate 30 -video_size 640x360 -offset_x 10 -offset_y 20 -i "title=hoge" -vf fps=30 -video_track_timescale 30 -pix_fmt yuv420p out.mp4

これを試すには半角英数字のフォルダを作ってそれの名前を指定するとうまく読み込んでくれる。また一部アプリケーションでオーバーレイを切らないと映像が映らないかもしれない。

この gdigrab と FFTsServer を使えば、ローカルネットワーク内に画面を共有することや、動画や音声を共有することもできる。

関連記事


Add Win32 GDI-based screen grabbing · 08909fb · FFmpeg/FFmpeg · GitHub
FFmpeg documentation : : gdigrab
ローカルネットワーク内で映像や音声を配信できる FFTsServer
関連記事

コメント

非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。