D3D11経由なので同じメモリ上からエンコードできるNVENC, AMFのエンコーダには処理が速くなる。Windowns向けのDesktop Duplication APIを使う。
- NVENC:ffmpeg に nvenc(cuda)をインストールする
- AMF:AMD VCE 対応の ffmpeg をつくる
- wiki:Capture/Desktop – FFmpeg
- 従来の方法:ffmpeg 単体で画面キャプチャができる gdigrab
基本コマンド
ソフトウェアフィルタは使えるが、ハードウェア支援のフィルタにつなげる方法がわからない。今までは使えてたのに、同じコマンドでも以下のエラーなどが出て使えなくなることがあるも解決方法がわからない。
Requested output format unavailable.
Failed duplicating output
上のエラーはffmpegの入力オプションに-init_hw_device d3d11vaを使えばエラーがなくなりそうだった。
ffplayで再生。
ffplay -f lavfi -i ddagrab=video_size=1280x720,hwdownload,format=bgra
ffmpegで再生。
ffmpeg -init_hw_device d3d11va -f lavfi -i ddagrab=video_size=1280x720,hwdownload,format=bgra -f sdl -
リサイズする。
ffplay -f lavfi -i ddagrab=video_size=1280x720,hwdownload,format=bgra,scale=1024x576
lavfiデバイス経由のh264_nvencでエンコードする。
ffmpeg -f lavfi -i ddagrab -c:v h264_nvenc -cq 18 output.mp4
yuv420p10leで出力するなら-pix_fmt p010leを追加する。
ffmpeg -init_hw_device d3d11va -f lavfi -i ddagrab,hwdownload,format=bgra -c:v hevc_nvenc -cq 18 -pix_fmt p010le output.mp4
フィルタ経由のlibx264でエンコードする。
ffmpeg -filter_complex ddagrab,hwdownload,format=bgra -c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4
yuv420p10leで出力するなら-pix_fmt yuv420p10leに変更する。
ffmpeg -filter_complex ddagrab,hwdownload,format=bgra -c:v libx264 -crf 18 -pix_fmt yuv420p10le output.mp4
nvencのRGB(GBRP)で出力するなら-pix_fmt gbrpを追加する。
ffmpeg -init_hw_device d3d11va -filter_complex ddagrab=framerate=30000/1001,hwdownload,format=bgra -c:v hevc_nvenc -tune lossless -pix_fmt gbrp -color_range pc output.mp4
libx264のRGBで出力するなら-c:v libx264rgbに変更する。
ffmpeg -filter_complex ddagrab=framerate=30000/1001,hwdownload,format=bgra -c:v libx264rgb -crf 0 -preset ultrafast -color_range pc output.mp4
音声も同時に録画するなら以下のコマンドでデバイス名を調べてdshow経由で取り込む。
ffmpeg -list_devices true -f dshow -i dummy
具体例:
千円HDMIキャプチャ、Y&H HDMIキャプチャカード
ffmpeg で同じ種類のウェブカメラを2台同時利用する
座標指定するときは領域を指定するvideo_sizeと、オフセット場所を指定するoffset_x、offset_yを併用する。
ffmpeg -filter_complex ddagrab=video_size=800x600:offset_x=100:offset_y=100,hwdownload,format=bgra -c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4
公式ドキュメント:FFmpeg Filters Documentation : ddagrab
オプション
- output_idx[int]
取り込み出力するインデックス。メインディスプレイが0でサブディスプレイが1以降になる
既定値:0
範囲:0からINT_MAXまで - draw_mouse[boolean]
マウスカーソルを表示するかどうか
既定値:1 - framerate[video_rate]
フレームレートの指定
既定値:30 - video_size[image_size]
取り込む解像度の指定。横x縦形式とテキスト形式が使える。リサイズではない
既定値:全画面 - offset_x[int]
横幅のオフセット値
既定値:0 - offset_yint]
縦幅のオフセット値
既定値:0 - output_fmt[int]
出力フォーマットの指定 - 0, auto:既定値
- 57, 8bit, bgra
- 24, 10bit, x2bgr10
- 10, 16bit, rgbaf16
- allow_fallback[boolean]
8ビットにフォールバックしたときにエラーを出さない
既定値:0 - force_fmt[boolean]
フォーマットリストからBGRAを除外する。実験的な機能でMicrosoftは非推奨
既定値:0