この記事でわかること
drawtextフィルタで動画にテキストを描画するコマンド- フォント・サイズ・色・位置の指定方法
- タイムコードや動的テキストの表示方法
- スクロールテロップの作り方
テスト済みバージョン: FFmpeg 6.1(ubuntu-latest / CI検証済み)
対象 OS: Windows / macOS / Linux
基本コマンド
左上にテキストを表示する
ffmpeg -i input.mp4 -vf "drawtext=text='Hello World':x=10:y=10:fontsize=36:fontcolor=white" output.mp4
中央に表示する
ffmpeg -i input.mp4 \
-vf "drawtext=text='CENTER':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=48:fontcolor=white" \
output.mp4
w・h は映像の幅・高さ、text_w・text_h はテキストの幅・高さです。
主要パラメータ一覧
| パラメータ | 説明 | 例 |
|---|---|---|
text | 表示するテキスト | text='Hello' |
fontfile | フォントファイルのパス | fontfile=/path/to/font.ttf |
fontsize | フォントサイズ(ピクセル) | fontsize=36 |
fontcolor | テキスト色(名前またはHEX) | fontcolor=white / fontcolor=0xFFFFFF |
x / y | 表示位置 | x=10:y=10 |
shadowcolor | 影の色 | shadowcolor=black@0.5 |
shadowx / shadowy | 影のオフセット | shadowx=2:shadowy=2 |
box | 背景ボックス | box=1 |
boxcolor | 背景ボックスの色 | boxcolor=black@0.5 |
boxborderw | 背景ボックスのパディング | boxborderw=5 |
フォントの指定
ffmpeg -i input.mp4 \
-vf "drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='FFmpeg':fontsize=40:fontcolor=yellow" \
output.mp4
日本語テキストを表示する場合は日本語対応フォントを指定してください。
ffmpeg -i input.mp4 \
-vf "drawtext=fontfile=/path/to/NotoSansCJKjp-Regular.otf:text='日本語テキスト':fontsize=36:fontcolor=white" \
output.mp4
影付きテキスト
ffmpeg -i input.mp4 \
-vf "drawtext=text='Shadow Text':x=50:y=50:fontsize=40:fontcolor=white:shadowcolor=black:shadowx=3:shadowy=3" \
output.mp4
背景ボックス付きテキスト
ffmpeg -i input.mp4 \
-vf "drawtext=text='BOX TEXT':x=20:y=20:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.6:boxborderw=8" \
output.mp4
boxcolor=black@0.6 は 60% 透明度の黒背景です。
タイムコードを表示する
ffmpeg -i input.mp4 \
-vf "drawtext=text='%{pts\\:hms}':x=w-text_w-10:y=h-text_h-10:fontsize=24:fontcolor=white:box=1:boxcolor=black@0.5" \
output.mp4
%{pts\\:hms} は HH:MM:SS.mmm 形式のタイムコードを表示します。シェルでのエスケープに注意してください(\\: が必要)。
フレーム番号を表示する
ffmpeg -i input.mp4 \
-vf "drawtext=text='Frame %{n}':x=10:y=10:fontsize=24:fontcolor=yellow" \
output.mp4
スクロールテロップ(右から左へ流れるテキスト)
ffmpeg -i input.mp4 \
-vf "drawtext=text='スクロールテキストのサンプルです':x=w-200*t:y=h-60:fontsize=32:fontcolor=white" \
output.mp4
x=w-200*t で時間 t とともに左方向に移動します。速度は係数(200)で調整します。
複数テキストを重ねる
ffmpeg -i input.mp4 \
-vf "drawtext=text='Title':x=(w-text_w)/2:y=30:fontsize=48:fontcolor=white, \
drawtext=text='Subtitle':x=(w-text_w)/2:y=90:fontsize=28:fontcolor=yellow" \
output.mp4
カンマで複数の drawtext を連結できます。
テキストファイルから読み込む
ffmpeg -i input.mp4 \
-vf "drawtext=textfile=caption.txt:x=10:y=10:fontsize=28:fontcolor=white" \
output.mp4
text= の代わりに textfile= でテキストファイルを指定できます。
位置指定の便利な変数
| 変数 | 意味 |
|---|---|
w | 映像の幅 |
h | 映像の高さ |
text_w | 描画テキストの幅 |
text_h | 描画テキストの高さ |
t | 現在の時刻(秒) |
n | フレーム番号 |
注意点
drawtextは libfreetype が必要です。通常の FFmpeg ビルドには含まれています。- 日本語・中国語などの多バイト文字は UTF-8 でエンコードされたフォントファイルが必要です。
- テキストが映像外にはみ出しても自動的にクリップされます(エラーにはなりません)。
- シェルでの特殊文字のエスケープに注意してください(
:は\\:、'は'\''など)。
関連フィルタ
関連リソース
よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。