ビデオ上のテキスト ffmpeg 質問する

ビデオ上のテキスト ffmpeg 質問する

ffmpeg でビデオにテキストオーバーレイを追加するにはどうすればよいですか?

つまり、ビデオ「video1.flv」が与えられた場合、ビデオ全体にわたって、画面の中央に白いテキストと境界線が付いた「StackOverflow」テキストを追加するにはどうすればよいでしょうか。

ベストアンサー1

使用描画テキストフィルター動画上のシンプルなテキスト用です。より複雑なタイミング、フォーマット、またはダイナミックテキストが必要な場合は、字幕フィルターこの回答はdrawtextフィルターに焦点を当てています。

動画の中央にテキストを配置

Stack Overflowビデオの中央に白いテキストを印刷し、背景ボックスには不透明度 50% の黒いボックスを配置します。

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy output.mp4
  • この例では、オーディオはストリームコピーされます (コピーアンドペーストのように)。
  • @0.5背景ボックスの不透明度を制御します。0.5 は 50% です。@0.5透明度が必要ない場合は削除します。
  • を参照してくださいdrawtext フィルターのドキュメントオプションの完全なリストと説明については、こちらをご覧ください。

プレビュー

ffplayファイルのエンコードを待たずにテキストをプレビューするには、次の方法を使用できます。

ffplay -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" input.mp4

代わりmpvに、構文少し異なります:

mpv --vf="lavfi=[drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2]" input.mp4

複数のテキスト

複数の drawtext フィルターを連結することができます。

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2,drawtext=fontfile=/path/to/font.ttf:text='Bottom right text':fontcolor=black:fontsize=14:x=w-tw-10:y=h-th-10" -codec:a copy output.mp4

位置

xテキストの位置をy決定します。

位置 x:y 10ピクセルのパディングあり
左上 x=0:y=0 x=10:y=10
上中央 x=(w-text_w)/2:y=0 x=(w-text_w)/2:y=10
右上 x=w-tw:y=0 x=w-tw-10:y=10
中央揃え x=(w-text_w)/2:y=(h-text_h)/2
左下 x=0:y=h-th x=10:y=h-th-10
下中央 x=(w-text_w)/2:y=h-th x=(w-text_w)/2:y=h-th-10
右下 x=w-tw:y=h-th x=w-tw-10:y=h-th-10
ランダム 見るこの答え

必要に応じてテキストの位置を変更する

テキストの位置を変更するには、送信コマンドそしてズムクフィルター:

動く/アニメーションする/ループする/スクロールするテキスト

見る:

タイミング

使用enableオプションテキストが表示されるタイミングを制御します。

5〜10秒間テキストを表示します。

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2:enable='between(t,5,10)'" -codec:a copy output.mp4

3秒後にテキストを表示します:

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2:enable='gte(t,3)'" -codec:a copy output.mp4

点滅するテキスト。10 秒ごとに 5 秒間テキストを表示します。

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Stack Overflow':fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2:enable='lt(mod(t,10),5)'" -codec:a copy output.mp4

30秒ごとにランダムな位置:

見るffmpeg - 動的な文字とランダムな位置の透かしをビデオに追加しますか?

テキストの変更/更新

textfiledrawtext のオプションとオプションを追加しますreload

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:textfile=text.txt:reload=1:fontcolor=white:fontsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy output.mp4
  • text.txtテキストを変更するたびに更新します。
  • 重要:テキストファイルを更新する必要があります原子的にmv失敗する可能性があります。これはLinux または macOS のコマンドで実行できます。
  • 字幕作成など、テキスト変更が多い場合は、字幕ファイル(.assAegisub経由のファイルなど)を作成し、字幕フィルター

フォントファイルの代わりにフォントファミリー

フォントファミリーを宣言することができます。タイムズニューローマンフォントファイルを指定する代わりに、fontfile オプションを使用せずに FFMPEG コマンドにフォントを含めるにはどうすればよいでしょうか?

要件

drawtextフィルタはffmpegでコンパイルする必要があります--enable-libfreetypeNo such filter: 'drawtext'を取得した場合は がありません--enable-libfreetype。利用可能な静的ビルドのほとんどはffmpegこれをサポートしています。FFmpeg ダウンロードリンクのページ。

おすすめ記事