Zoom などのビデオ会議ツールでプレゼンテーションを行う際、プレゼンテーション画面を通常のウィンドウ内に表示できると便利なことがあります。これにより、実際に何が表示されているかを確認しやすくなり、デスクトップ上でウィンドウを整理しやすくなり、意図したコンテンツだけを共有できます。
私は以前、仮想ディスプレイドライバーと raiton を組み合わせてこれを実現していました。仮想ディスプレイを追加モニターとして使用し、そのモニターを raiton でウィンドウ表示する構成です。この方法でも機能していましたが、改めて調べてみたところ、FFmpeg に付属する ffplay の方がより良い選択肢になり得ることが分かりました。
目的
目的は単純です。セカンダリディスプレイまたは仮想ディスプレイをウィンドウ内に表示することです。
これは PowerPoint などでスライドを発表する際に役立ちます。例えば、PowerPoint がプレゼンテーションを第2ディスプレイに表示し、そのディスプレイを ffplay がメインデスクトップ上のウィンドウとして表示します。そのウィンドウを Zoom 上で確認したり共有したりできます。
raiton の代わりに ffplay を使う
以下のコマンドで、第2ディスプレイをウィンドウ内に表示できます。
ffplay -fflags nobuffer -flags low_delay -framedrop -f lavfi "ddagrab=output_idx=1:framerate=60,hwdownload,format=bgra,format=bgr0"
このコマンドは FFmpeg の ddagrab ソースを使用してデスクトップ出力をキャプチャし、ffplay で表示します。
この例では、output_idx=1 が第2ディスプレイをキャプチャすることを意味します。対象となるディスプレイが異なる場合は、この値を変更する必要があります。
また、nobuffer、low_delay、framedrop の各オプションは、プレビューの遅延を抑えるためのものです。ライブプレゼンテーション中にこのウィンドウを利用する場合、低遅延は特に重要です。
パフォーマンス
私の環境では、raiton は仮想ディスプレイをおよそ 15 fps で表示していました。一方、ffplay では 60 fps で表示できました。
そのため、スライドにアニメーションが含まれる場合や、カーソルを動かす場合、その他の画面変化がある場合でも、ffplay の方がはるかに滑らかに感じられます。
仮想ディスプレイドライバー
仮想ディスプレイには ge9/IddSampleDriver を使用しています。
これは Windows 上に追加のディスプレイ出力を提供します。プレゼンテーションソフトウェアはその仮想ディスプレイを実際のモニターと同様に利用でき、ffplay はそのディスプレイを通常のウィンドウとして表示できます。
まとめ
プレゼンテーション用ディスプレイをウィンドウ内でプレビューしたり共有したりしたい場合、ffplay は raiton の実用的な代替手段として利用できます。
必要なのは FFmpeg だけで、仮想ディスプレイドライバーとも相性が良く、この用途では raiton よりも滑らかな表示が期待できます。Zoom などを使ったプレゼンテーションでは、独立したプレゼンテーション画面を扱うためのシンプルかつ効果的な方法です。