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 |
ランダム | 見るこの答え |
必要に応じてテキストの位置を変更する
テキストの位置を変更するには、送信コマンドそしてズムクフィルター:
- 送信コマンド事前に決められた位置とタイミングがある場合。ffmpeg の SendcmdそしてFFmpeg drawtext フィルター - x、y 座標のライブ データを含む変数を使用することは可能ですか?
- ズムクリアルタイムで即時に測位できます。ユーザー入力を必要とする ffmpeg cli フィルター。
動く/アニメーションする/ループする/スクロールするテキスト
見る:
タイミング
使用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 - 動的な文字とランダムな位置の透かしをビデオに追加しますか?
テキストの変更/更新
textfile
drawtext のオプションとオプションを追加します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 のコマンドで実行できます。 - 字幕作成など、テキスト変更が多い場合は、字幕ファイル(
.ass
Aegisub経由のファイルなど)を作成し、字幕フィルター。
フォントファイルの代わりにフォントファミリー
フォントファミリーを宣言することができます。タイムズニューローマンフォントファイルを指定する代わりに、fontfile オプションを使用せずに FFMPEG コマンドにフォントを含めるにはどうすればよいでしょうか?
要件
drawtextフィルタはffmpeg
でコンパイルする必要があります--enable-libfreetype
。No such filter: 'drawtext'
を取得した場合は がありません--enable-libfreetype
。利用可能な静的ビルドのほとんどはffmpeg
これをサポートしています。FFmpeg ダウンロードリンクのページ。