FFmpeg を使用してライブ ビデオにティッカー/さまざまなテキストを追加するにはどうすればよいですか?

FFmpeg を使用してライブ ビデオにティッカー/さまざまなテキストを追加するにはどうすればよいですか?

コマンドを使用すると、放送する前にハードディスク上のビデオにテキストを追加できます。

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

さて、さまざまな時間に異なるテキストを追加したいと思います。これは、次の形式のファイルから読み取る必要があります。たとえば、

00:00:10 : グーグル
00:00:20 : ヤフー
00:00:30 : msft
00:00:60 : アマゾン
00:05:30 : ジャワ

ffmpeg にファイルを読み込ませ、指定した時間にテキストを追加さ​​せる方法はありますか? 最終的には、ビデオをブロードキャストする前にライブ ティッカー シンボルを追加したいと考えています。

答え1

からdrawtextフィルターのソースコード(ソース ツリー内から) には、描画する文字列を含むファイルへのパスを指定できるパラメーターlibavfilter/vf_drawtext.cがあるようです(例のようにパラメーターを設定するのではなく)。 としてファイル パスを渡し、ビデオ出力を表示しながらファイルを更新してみるとよいでしょう。textfiletexttextfile

また、ファイル(表示される現在のテキストのみを含む)を更新するには、並行して実行される別のプログラム/デーモンも必要になりますが、システム クロックと同期できると仮定すると、このプログラムは非常に簡単です。


あるいは、フィルター自体を変更しdrawtextて、現在のタイムコード(FFmpeg フィルターで使用できるようになります)。この場合、フィルターのソース コードを変更して最初から再コンパイルする必要がありますが、並列で実行される別のプログラム/デーモンの使用も回避できます (FFmpeg が文字列を描画しようとするたびに独自のコードが呼び出されるため)。

ただし、textfileパラメータが機能すると仮定すると (つまり、フレームごとに更新されると仮定すると)、テキスト ファイルを更新する単純なデーモンを Python などのスクリプト言語で記述できるため、おそらくこれがより良い方法になります。

関連情報