web-dev-qa-db-ja.com

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:google 
 00:00:20:yahoo 
 00:00:30:msft 
。
。
。
 00:00:60:amzn 
。
。
。
 00:05:30:Java 

Ffmpegにファイルを読み取らせ、指定された時間にテキストを追加する方法はありますか?最終的には、ビデオを放送する前に、ライブのティッカーシンボルをビデオに追加したいと思います。

2
user763410

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

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


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

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

1
Breakthrough