1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFmpeg 8.0 masterにWindows.Graphics.Captureに対応したウィンドウキャプチャが実装されたよ!

Posted at

FFmpeg 8.0のmasterにWindows.Graphics.Captureに対応したウィンドウキャプチャがキター!!

やったー!!
全俺が歓喜!

FFmpegのキャプチャ機能

あまり知られていないかもしれませんが、FFmpegにはキャプチャ機能が実装されています。

Windows版では、これまでGDI、Desktop Duplication APIが実装されていましたが、この度、Windows.Graphics.Captureに対応したウィンドウキャプチャが実装されました!
最新のFFmpeg Windows masterバイナリで利用可能です!
既に上記のドキュメントやwikiにも使用方法が記載されています(仕事が早すぎる・・・

image.png

使い方

公式wikiの劣化翻訳にはなりますが。

  • DirectXを利用したキャプチャなので、libx264などソフトウェアエンコーダを利用する場合、hwdownloadでCPUメモリにダウンロードしてくる必要があります。nvencやamf、qsvなどのハードウェアエンコーダでは不要とのこと。
  • キャプチャ対象は、window_title='My Application'というようにウィンドウタイトルを指定する方法、monitor_idx=1としてモニターidを指定する方法、window_exe='firefox.exe'と実行ファイル名を指定する方法、hwndでWindowハンドルを直接指定する方法などがあります。
ffmpeg -filter_complex gfxcapture=window_title='(?i)My Application':max_framerate=60,hwdownload,format=bgra,format=yuv420p -c:v libx264 -crf 15 capture.mp4
ffmpeg -filter_complex gfxcapture=monitor_idx=1:width=1920:height=1080:resize_mode=scale_aspect:output_fmt=10bit -c:v hevc_nvenc -cq 15 capture.mp4
ffmpeg -filter_complex gfxcapture=window_exe='^firefox.exe$':display_border=1:scale_mode=point:max_framerate=60,fps=60 -rc qvbr -qvbr_quality_level 15 -c:v hevc_amf capture.mp4

昨日マージされたばかりなのに何で私は気づいたのか?

なぜなら私が要望したから!

どうして要望したの?

自作アプリは、現在はキャプチャした動画を処理する機能しかないのですが、リアルタイムにキャプチャして、処理し、仮想カメラに出力して、OBSから配信、とかできたらいいなー、と妄想してました。
キャプチャと仮想カメラの実装方法を調べていくと、次の記事を見つけました。

Windows.Graphics.Capture を利用すると良さそうだなーと。
今はFFmpegで動画を撮り込んでるけど、FFmpegでキャプチャできないのかなー?できたら簡単なんだけどなー
って検索してみると、できるじゃん!!
と思ったんですが、GDI、Desktop Duplication API しか実装されておらず。
機能追加のissueも見当たらなかったので、ダメ元で要望したのでした。
(あとでもうちょっと検索してみると、実は同じ内容のissueは存在した。)

どうも以前にもWindows.Graphics.Captureでの実装をトライしたようでしたがその時は実現できず、ちょうどmingwの相互運用ヘッダーが実装されたこともあって、以前よりも実現の可能性が上がっていたようです。

感想

  • わたしが、どうやってWindows.Graphics.Captureを実装しようかなー?と考えているうちに、あっという間に実装してしまいました。すげぇ!
  • issueのチケットでやり取りした方々は、ffmpegのwindowsビルドを配信されてる方々だったりして、この名前の人って存在するんだ・・・と感じました。神々との邂逅、みたいな。
  • それに引き換え私のレベルの低さよ・・・
  • FFmpegの神々がキャプチャ部分を作ってくれたので、わたしは仮想カメラ実装をがんばります!
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?