文字を直接コマンドに記述したり、ファイルを読み込んで描写するdrawtext
フィルタの使い方。現在のところ絵文字には対応していない。文字を動かしたり、表示非表示の切り替えや、内容を変更したり、色を変えたり出来る。ただし映像の途中に拡大縮小は出来ないのでass, subtitles
フィルタを使って字幕ファイルを編集して動かす方法をとる。拡大縮小は2017年4月のコミットからできたがドキュメントが修正されてなかった。
外部ライブラリフィルタなので別途インストールが必要である。基本となるlibfreetypeと、libharfbuzz。font設定に必要なfontconfig。text_shaping設定に必要なlibfribidi。日本語は日本語に対応したフォントでないと描写できない。
ass の字幕ファイルを動画に焼き付ける ass
字幕ファイルを動画に焼き付ける subtitles
テキスト描写にはフォント描写の知識がないとオプションの意味が分かりにくい。
目次
基本コマンド
colorソースにaiueoを左上に描写。
ffplay -f lavfi -i color=white -vf "drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo'"
msgothicフォントを指定し、「あいうえお」を左から右へ1フレーム毎に1ピクセル移動させる。
"drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='あいうえお':x=n"
「hello world」を映像の中心に描写。
"drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
1秒ごとに「あいうえお」のフォントサイズを大きくする。
"drawtext=fontsize=t:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='あいうえお'"
5秒毎にランダムな場所に描写。
"drawtext=fontsize=30:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='hello world':x=if(eq(mod(t\,5)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,5)\,0)\,rand(0\,(h-text_h))\,y)"
横に中央からフォント半分ほど左に、縦に半分からベースラインから上の部分だけ上げたところに描写。
"drawtext=fontsize=60:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
タイムライン編集を使って3秒毎に1秒描写。
"drawtext=fontfile=C\\//WINDOWS/Fonts/msgothic.ttc.ttf:fontcolor=white:x=100:y=x/dar:text='blink':enable=lt(mod(t\,3)\,1)"
スタイルにセミボールドを指定する。
"drawtext=fontfile='Linux Libertine O-40':style=Semibold:text=FFmpeg"
現在の時間(PCの内部時間)を描写。
"drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{localtime}'"
動画の再生時間を秒単位で描写。
"drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{pts\:flt}'"
動画の再生時間を H:M:S 形式で描写。
"drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{pts\:hms}'"
0秒開始しない場合はsetpts
フィルタで開始時間をずらす。
ffplay で時間とフレーム数を表示する
映像と音声の pts を扱う setpts, asetpts
動画のフレーム数を描写。
"drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{n}'"
strftime関数を使って、英語での曜日、英語での月、日付、年を描写。
"drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{localtime\:%a %b %d %Y}'"
テキストファイルを読み込んでテキストを描写する。Windows だとこの方法で改行できる。
"drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:textfile='1234.txt': fontcolor=white:fontsize=100"
改行の後にもう一つ不必要な改行が含まれるときはline_spacing=-10のように負の値を指定するか、Unix (LF)に変更するなどの方法がある。
ffmpeg extra lines between lines in drawtext textfile – Super User
-filter_scriptを使って改行することもできる。
ffmpeg -i input -filter_script:v scriptv.txt output
scriptv.txtの内容。
drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'
フィルタ内容をテキストで読み込む filter_script、filter_complex_script
ffmpeg create blank screen with text video – Stack Overflow
メタデータを描写する。signalstats
フィルタでY平均(輝度平均)を描写。
signalstats,drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"YAVG ("%{metadata\:lavfi.signalstats.YAVG})'
between()で0から5秒の間にテキストがあり、lerp()で3秒から透過が始まり2秒かけて消える。
alpha=min(between(t\,0\,5)\,lerp(0\,1\,(1+((3-t)/2))))
lerp()で3秒からテキストが見え始め2秒かけて透過しなくなる。
alpha=lerp(1\,0\,(1+((3-t)/2)))
FFmpeg Drawtext Fade Out Performance – Stack Overflow
Text on video ffmpeg – Stack Overflow
公式ドキュメント:FFmpeg Filters Documentation : drawtext
描写を読みやすくする
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':fontcolor=yellow:x=40:y=40"
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':fontcolor=yellow:fontsize=64:x=40:y=40"
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':box=1:boxcolor=yellow:boxborderw=10:x=40:y=40"
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':bordercolor=yellow:borderw=3:x=40:y=40"
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':fontsize=64:fontcolor=white:shadowcolor=gray:shadowx=2:shadowy=2:x=40:y=40"
-
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:textfile='test.txt':fontsize=64:fontcolor=white:shadowcolor=gray:shadowx=2:shadowy=2:x=40:y=40:line_spacing=10"
文字の周りの背景色はdrawbox
フィルタでもつけられる。
映像に枠をつける drawbox
オプション
オプション数が膨大なのでオプション名は省略しないほうがわかりやすい。
- fontfile[string]
フォントファイルのパスを指定。日本語の場合は日本語フォントを指定しないと正しく描写されない。Windows だと、C:WindowsFonts を開いて、プロパティからファイル名を取得する。または ffmpeg と同じ場所にコピーしてファイルを指定することもできる
例:fontfile='C\://WINDOWS/Fonts/arial.ttf'
、fontfile=C\\://WINDOWS/Fonts/arial.ttf
- text[string]
描写するテキストの指定。文字コードは UTF-8 でなければならない。またフレーム数や時間などの評価式も使える。スペースで間を開ける場合は シングルクオート‘またはダブルクオート“で挟むかエスケープする。特殊文字はエスケープするのを忘れない。Text expansion の項を参照 - textfile[string]
描写するテキストファイルのパスを指定。textと併用できない。文字コードは UTF-8 でなければならない。改行する場合はこちらの方が手軽 - fontcolor[color]
描写内容の色指定。詳しくは FFmpeg Utilities Documentation : Colorを参照。指定した色の後ろに@0.5とすることで透過指定も可能
既定値:”black” - fontcolor_expr[string]
描写内容の色指定の拡張版。“random”でランダムになる。Text expansion が使え、フレーム数や時間で色を変えられる。0xRRGGBB[AA] の順番で指定する。後ろに@0.5とすることで透過指定も可能。fontcolorで透過しbordercolorを透過せずに指定すると文字が透過しない不具合がある。詳細は以下を参照
例:fontcolor_expr='0x%{eif\:print(mod(n\,256))\:x\:2}%{eif\:print(mod(n\,256))\:x\:2}%{eif\:print(mod(n\,256))\:x\:2}'@0.5、fontcolor_expr=0x%{eif\\:mod(n\,256)\\:x\\:2}%{eif\\:mod(n\,256)\\:x\\:2}%{eif\\:mod(n\,256)\\:x\\:2}@0.5
- boxcolor[color]
boxの背景色を指定。“random”でランダムになる。詳しくは FFmpeg Utilities Documentation : Colorを参照。指定した色の後ろに@0.5とすることで透過指定も可能
既定値:”white” - bordercolor[color]
borderwの色を指定
既定値:”black” - shadowcolor[color]
text, textfileの影の色指定。詳しくは FFmpeg Utilities Documentation : Colorを参照。指定した色の後ろに@0.5とすることで透過指定も可能
既定値:”black” - box[boolean]
描写内容の背景をテキスト幅で囲む。任意の幅でboxを配置するにはdrawbox
フィルタを使う。Stack Exchange。ffmpeg 6.1からはboxborderwで任意の幅を指定できる。avfilter/vf_drawtext: extend boxborderw option · FFmpeg/FFmpeg@79e3997 · GitHub
既定値:0 - boxborderw[int]
boxのサイズ指定。ffmpeg 6.1からは|を使用して任意の場所に幅を指定できる
既定値:0
範囲:INT_MIN から INT_MAX まで
例: - boxborderw=104隅すべての幅が10
- boxborderw=10|20上下幅が10、左右幅が20
- boxborderw=10|20|30上の幅が10、左右幅が20、下の幅が30
- boxborderw=10|20|30|40上の幅が10、右幅が20、下の幅が30、左幅が40
- line_spacing[int]
行間隔の指定
既定値:0
範囲:INT_MIN から INT_MAX まで - fontsize[string]
フォントサイズの指定。以下の書式が使える - text_align[flags]
box=1にしてboxw、boxh内のテキスト配置を決める。flagなので+をつなげて複数指定できる。配置例はyethie/FFmpegを参照 - left, L
- right, R
- center, C
- top, T
- bottom, B
- middle, M
- x[string]
描写内容の横座標の指定。以下の書式が使える
既定値:0 - y[string]
描写内容の縦座標の指定。以下の書式が使える
既定値:0 - boxw[int]
boxの横幅の指定。boxborderwより優先される
既定値:0
範囲:INT_MIN から INT_MAX まで - boxh[int]
boxの縦幅の指定。boxborderwより優先される
既定値:0
範囲:INT_MIN から INT_MAX まで - shadowx[int]
描写内容に影を横軸の方向に表示
既定値:0
範囲:INT_MIN から INT_MAX まで - shadowy[int]
描写内容に影を縦軸の方向に表示
既定値:0
範囲:INT_MIN から INT_MAX まで - borderw[int]
描写内容の縁取りのサイズの指定
既定値:0
範囲:INT_MIN から INT_MAX まで - tabsize[int]
タブ1つがスペースいくつかの指定
既定値:4
範囲:0 から INT_MAX まで - basetime[int64]
廃止予定。Set a start time for the count. Value is in microseconds. Only applied in the deprecated strftime expansion mode. - font[string]
描写に使うフォントファミリーの名前
既定値:”Sans” - expansion[int]
textの拡張指定 - 0, none:無効
- 1, normal:有効。既定値
- 2, strftime:廃止予定
- y_align[int]
2つ以上のdrawtext
フィルタを使ってテキストを並べたときに高さを揃える設定。配置例はyethie/FFmpegを参照 - 0, text:既定値
- 1, baseline
- 2, font
- timecode[string]
text, textfileを使わずにタイムコードを描写する。書式は “hh:mm:ss[:;.]ff” 形式。時間指定でオフセットの指定になる
例:timecode='00\:00\:00\:00'
、timecode=00\\:00\\:00\\:00
- tc24hmax[boolean]
24時間経過したら0時に戻る
既定値:0 - timecode_rate, r, rate[rational]
timecodeを使うときのフレームレートの指定で必須項目。分数や少数は一番近い整数になる。Text expansion と併用できない
既定値:0/1
範囲:1 から INT_MAX まで - reload[int]
textfileを指定フレーム毎にリロードして書き換える
既定値:0
範囲:0 から INT_MAX まで - alpha[string]
描写内容を透過させる。fontcolorの透過指定の方を優先する
既定値:1(透過しない)
範囲:0 から 1 まで - fix_bounds[boolean]
check and fix text coords to avoid clipping
既定値:0 - start_number[int]
start frame number for n/frame_num variable
既定値:0
範囲:1 から INT_MAX まで - text_source[string]
dnn_detect
フィルタのside_data_detection_bboxesを書き込む。詳細未確認。libavfilter: vf_drawtext filter support draw text with detection boun… · FFmpeg/FFmpeg@7a879cc - text_shaping[boolean]
attempt to shape text before drawing
既定値:1 - ft_load_flags[flags]
フラグの指定。+を先頭につける。複数指定する場合はその都度+をでつなげる。詳しくは公式サイトの FT_LOAD_以下を参照 - default
- no_scale
- no_hinting
- render
- no_bitmap
- vertical_layout
縦書きだが、文字が重なりうまく描写できない - force_autohint
- crop_bitmap
- pedantic
- ignore_global_advance_width
- no_recurse
- ignore_transform
- monochrome
- linear_design
- no_autohint
Text expansion
- expr, e
fontsize、x、yで使った評価式が使える。引数は1つだけ
例:text='%{e\:pkt_pos}'
、text=%{e\\:pkt_pos}
- expr_int_format, eif
x, yで使った書式が使え、第2引数で表示形式、第3引数で桁数が指定できる
例:text='%{eif\:t\:d\:3}'
、text=%{eif\\:t\\:d\\:3}
- x:符号なし整数を16進数表示、アルファベットは小文字
- X:符号なし整数を16進数表示、アルファベットは大文字
- d:符号あり整数を10進数表示
- u:符号なし整数を10進数表示
- gmtime
UTC を使って時間を表示する。以下の strftime関数が使える
例:text='%{gmtime\:%a %b %d %Y}'
- localtime
ローカルタイムゾーンを使って時間を表示する。以下の strftime関数が使える
例:text='%{localtime\:%a %b %d %Y}'
- metadata
metadataを呼び出して描写する。利用例
直接呼び出すときはメタデータがなければならない。参照
例:text='%{metadata\:timecode}'
例:text='%{metadata\:DateTimeDigitized}'
- n, frame_num
0開始のフレーム番号
例:text=%{n}
- pict_type
I, P, Bフレームの表示
例:text=%{pict_type}
- pts
- flt:マイクロ秒表示。第2引数でオフセットが使える
例:text='%{pts\:flt\:100}'
、text=%{pts\\:flt\\:100}
- hms:
時間分秒表示。H:M:S 形式。第2引数でオフセットが使え、第3引数で24HHを使うと 00-23 の範囲になり日が更新される
例:text='%{pts:hms:400000:24HH}'
、text=%{pts:hms:400000:24HH}
- gmtime:
UTC 時間で1970-01-01 00:00:00 から始まる。第2引数でオフセットが使える
例:text='%{pts\:gmtime\:1565708400}'
、text=%{pts\\:gmtime\\:1565708400}
- localtime:
ローカルタイムゾーンで日本なら 1970-01-01 09:00:00 から始まる。第2引数でオフセットが使え、第3引数で strftime関数が使える
例:text='%{pts\:localtime\:400000:%Y-%m-%d}'
、text=%{pts\\:localtime\\:400000:%Y-%m-%d}
- flt:マイクロ秒表示。第2引数でオフセットが使える
strftime
gmtime、localtimeの時間表示に使えるstrftime関数。
フォーマット | 説明 | 返り値の例 |
%A | 曜日の名前 | Wednesday |
%a | 短縮された曜日の名前 | Wed |
%B | 月の名前 | January |
%b | 省略された月の名前 | Jan |
%c | 日付と時刻(%m/%d/%y %H:%M:%S) | 12/20/19 11:12:51 |
%d | 2桁の日付 | 08 |
%H | 24時間制の時(00-23) | 20 |
%I | 12時間制の時(01-12) | 11 |
%j | 年中の通算日(001-366) | 008 |
%M | 分(00-59) | 53 |
%m | 月を表す数字(01-12) | 01 |
%p | 午前または午後(AM,PM) | AM |
%S | 秒(00-60) (60はうるう秒) | 06 |
%U | 週を表す数。最初の日曜日が第1週の始まり(00-53) | 01 |
%W | 週を表す数。最初の月曜日が第1週の始まり(00-53) | 01 |
%w | 曜日を表す数(0-6) 日曜日が0 | 3 |
%X | 時刻(%H:%M:%S) | 11:53:06 |
%x | 日付(%m/%d/%y) | 12/20/19 |
%Y | 西暦を表す数 | 2014 |
%y | 西暦の下2桁(00-99) | 14 |
%Z | タイムゾーンの略称 | (W) |
%z | タイムゾーンの略称 | (W) |
fontcolor_expr
任意の時間やフレーム数、ファイルサイズのときに色や透過具合を自由に変えられる。色は 0xRRGGBB[AA] の順番なのですべての値に16進数を割り当てる方法と、それぞれの色に16進数を割り当てる方法がある。数値指定は10進数で16進数に変換している。
x:6で6桁を指定すると 0xRRGGBB それぞれの色をまとめて扱う。
fontcolor_expr=0x%{eif\\:0\\:x\\:6}
x:2で2桁の値を3つ並べれば、RGB 別々に扱う。
fontcolor_expr=0x%{eif\\:0\\:x\\:2}%{eif\\:0\\:x\\:2}%{eif\\:0\\:x\\:2}
x:8で8桁を指定すると 0xRRGGBBAA それぞれの色をまとめて扱う。
fontcolor_expr=0x%{eif\\:0\\:x\\:8}
x:2で2桁の値を4つ並べれば、RGBA 別々に扱う。
fontcolor_expr=0x%{eif\\:0\\:x\\:2}%{eif\\:0\\:x\\:2}%{eif\\:0\\:x\\:2}%{eif\\:255\\:x\\:2}
数値指定には、Text expansion、fontsize、x、yの評価式が使える。
指定した色(255.215.104)に1秒ごとにフェードインする。
fontcolor_expr=0x%{eif\\:255\\:x\\:2}%{eif\\:215\\:x\\:2}%{eif\\:104\\:x\\:2}%{eif\\:mod(256*t\,256)\\:x\\:2}
RGB にpkt_posを指定する。
fontcolor_expr=0x%{eif\\:pkt_pos\\:x\\:6}
FFmpeg fontcolor_expr to dynamically change fontcolor over time – Stack Overflow、FFmpegのdrawtextでカウントダウンタイマーをつける – Askthewind’s diaryを参照。
fontsize、x、yの評価式
ffmpeg で使える評価式を併用することもできる。
- sar
サンプルアスペクト比 - dar
(w/h)*sar - hsub
横のクロマサブサンプリング数。yuv420p ならば 2、yuv422p ならば 2 - vsub
縦のクロマサブサンプリング数。yuv420p ならば 2、yuv422p ならば 1 - line_h, lh
描写内容の高さ。fontsizeで変化するが同じになるとは限らない - main_h, h, H
入力した映像の縦解像度 - main_w, w, W
入力した映像の横解像度 - max_glyph_a, ascent
ベースラインからすべての描写内容の上の高さ - max_glyph_d, descent
ベースラインからすべての描写内容の下の高さ。ベースラインから下に描写されなければ 0 になるが、”g” のような文字だとマイナスになる - max_glyph_h
ascent – descentで、lhと同じようになる - max_glyph_w
すべての描写内容からフォント1文字分の最大幅 - n
0 から始まるフレーム番号 - rand(min, max)
最小値と最大値の値をランダムで返す - t
0 から始まるタイムスタンプ秒。1フレーム目の経過時間が最初の値になる - text_h, th
描写内容の高さ。fontsize, text, textfileなどで動的に変わる - text_w, tw
描写内容の横幅。fontsize, text, textfileなどで動的に変わる - x
テキストが描画されるx座標のオフセット。xは自己参照になるので指定できない - y
テキストが描画されるy座標のオフセット。yは自己参照になるので指定できない - pict_type
1:I フレーム
2:B フレーム
3:P フレーム - pkt_pos
現在のバケットのバイト位置。-1 ならば利用できない - pkt_duration
1パケットあたりの時間 - pkt_size
現在のパケットのバイトサイズ
応用例
test.txt を書き換えて描写内容を動的に変更する。
"drawtext=fontsize=32:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:textfile='test.txt':reload=1"
"drawtext=fontsize=32:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:textfile='test.txt':reload=1"
時間指定で描写する
タイムライン編集でオプションの最後にenableでフィルタを有効にする時間帯を指定する。
"drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='aiueo':fontcolor=yellow:x=40:y=40:enable='gte(t,3)'"
カウント
カウントアップとカウントダウンがあるが、カウントダウンはそのままだとマイナスになるのでタイムライン編集で一定時間後に消す。dで桁数の指定ができる。
説明 | text |
通常のカウントアップ | %{eif\\:t\\:d} |
0で埋める桁数を決める | %{eif\\:t\\:d\\:3} |
マイクロ秒のカウントアップ | %{pts\\:flt\\:0} |
下一桁以下の桁数を決める | %{eif\\:t\\:d}.%{eif\\:1M*t-1K*trunc(t*1K)\\:d\\:3} |
5秒からカウントダウン | %{eif\\:5-t\\:d} |
5秒後にカウントを消す。
ffplay -f lavfi -i color -vf drawtext=fontsize=64:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text=%{eif\\:5-t\\:d}:x=(w-tw)/2:y=(h-th)/2:enable=between(t\,0\,5)
clip(x,min,max) で数値を固定してカウント0を5秒維持する。
ffplay -f lavfi -i color -vf drawtext=fontsize=64:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text=%{eif\\:5-clip(t\,0\,5)\\:d}:x=(w-tw)/2:y=(h-th)/2:enable=between(t\,0\,10)
ffmpeg: Create a video countdown · GitHub
タイムコード
映画などの編集作業でよくみる時間経過を表示するタイムコードを描写。
"drawtext=fontsize=32:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/arial.ttf:timecode='00\:00\:00\:00':r=24:fontcolor=0xccFFFF"
"drawtext=fontsize=32:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/arial.ttf:timecode=00\\:00\\:00\\:00:r=24:fontcolor=0xccFFFF"
ffmpegならこちらへ 3 [無断転載禁止]©2ch.net より
639名無しさん@お腹いっぱい。2018/05/27(日) 19:51:33.96ID:zoTvVaWy0
>フレームレートを大きくする前の動画の時間に対してタイムコードが付く
つまり倍速再生にして、時間経過も倍速表示にしたいと25fps の動画の場合、倍速分の入力フレームレートを指定し、最初に倍速分の pts を掛けて、元に戻す
ffmpeg -r 50 -i input -vf “setpts=PTS*2,drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/arial.ttf:text=’%{eif:t:d}’,setpts=PTS/2” output.mp4
より。
ffplay -f lavfi -i color=white -vf "setpts=PTS*2,drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='%{eif\:t\:d}',setpts=PTS/2"
ffplay -f lavfi -i color=white -vf "setpts=PTS*2,drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile=C\\://WINDOWS/Fonts/arial.ttf:text=%{eif\\:t\\:d},setpts=PTS/2"
時計時刻
時間分秒(H:M:S形式)形式。
ffplay -f lavfi -i color=c=white -vf "drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text=%{localtime\\:%X}:fontsize=24"
ミリ秒を含めた現在の時刻。
ffplay -f lavfi -i color=c=white -vf "settb=AVTB,setpts='trunc(PTS/1K)*1K+st(1,trunc(RTCTIME/1K))-1K*trunc(ld(1)/1K)',drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='%{localtime}.%{eif\:1M*t-1K*trunc(t*1K)\:d\:3}':fontsize=24"
ffplay -f lavfi -i color=c=white -vf "settb=AVTB,setpts=trunc(PTS/1K)*1K+st(1\,trunc(RTCTIME/1K))-1K*trunc(ld(1)/1K),drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text=%{localtime}.%{eif\\:1M*t-1K*trunc(t*1K)\\:d\\:3}:fontsize=24"
日付と時刻(%m/%d/%y %H:%M:%S)形式。
ffplay -f lavfi -i color=c=white -vf "drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text=%{localtime\\:%c}:fontsize=24"
FFMPEG: embed current time in milliseconds into video – Stack Overflow
動画時間
中央と隅
場所 | x | y |
中央 | (w-tw)/2 | (h-th)/2 |
左上隅 | 0 | 0 |
上中央 | (w-tw)/2 | 10 |
右上隅 | w-tw | 0 |
左下隅 | 0 | h-th-10 |
下中央 | (w-tw)/2 | h-th-10 |
右下隅 | w-tw | h-th-10 |
ループ
表示方法は2通りあり、端に見切れ初めてすべて見切れたときに再び表示される場合と、見切れたら同時に再び表示する場合がある。後者は同時に2つの文字が描写されているので2度drawtext
フィルタを当てる。
右上から左上にループ。
ffplay -f lavfi -i color=c=white:r=60 -vf "drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:text='test':x=w-mod(n\,w+tw)"
1表示ループ | x | y |
左から右 | w-mod(n\,w+tw) | |
右から左 | mod(n\,w+tw)-tw | |
下から上 | h-mod(n\,h+th) | |
上から下 | mod(n\,h+th)-th |
右上から見切れずに左上にループ。
ffplay -f lavfi -i color=c=white:r=60 -vf "drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:text='test':x=w-mod(n\,2*w),drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:text='test':x=w-mod('if(between(n,0,w),0,n-w)'\,2*w)"
2表示ループ | x(1回目のフィルタ) | x(2回目のフィルタ) |
左から右 | -tw+mod(n\,2*w) | -tw+mod(‘if(between(n\,0\,w)\,0\,n-w)’,2*w) |
右から左 | w-mod(n\,2*w) | w-mod(‘if(between(n\,0\,w)\,0\,n-w)’,2*w) |
2表示ループ | y(1回目のフィルタ) | y(2回目のフィルタ) |
下から上 | h-mod(n\,2*h) | h-mod(‘if(between(n\,0\,h)\,0\,n-h)’,2*h) |
上から下 | -th+mod(n\,2*h) | -th+mod(‘if(between(n\,0\,h)\,0\,n-h)’,2*h) |
video – ffmpeg scroll text without gap – Super User
対角線
左上から右下。
ffplay -f lavfi -i color=c=white:r=60 -vf "drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:text='test':x=w-((w+tw)/(h+th))*n:y=-th+n"
対角線 | x | y |
左上から右下 | -tw+((w+tw)/(h+th))*n | -th+n |
右上から左下 | w-((w+tw)/(h+th))*n | -th+n |
左下から右上 | -tw+((w+tw)/(h+th))*n | h-n |
右下から左上 | w-((w+tw)/(h+th))*n | h-n |
時計回り、反時計回り
適宜+-60の部分とsin(), cos() を入れ換えれば開始位置と回転方法を変えられる。回転速度は *n を変更する。
中央右60ピクセルから時計回りに回る。
ffplay -f lavfi -i color=c=white:r=60 -vf "drawtext=fontfile=C\\:/Windows/Fonts/msgothic.ttc:text='test':x=(w-tw)/2+60*cos((PI*n)/180):y=(h-th)/2+60*sin((PI*n)/180)"
円 | x | y |
中央 | (w-tw)/2 | (h-th)/2 |
時計回り、右 | (w-tw)/2+60*cos((PI*n)/180) | (h-th)/2+60*sin((PI*n)/180) |
反時計回り、右 | (w-tw)/2+60*cos((PI*n)/180) | (h-th)/2-60*sin((PI*n)/180) |
反時計回り、左 | (w-tw)/2-60*cos((PI*n)/180) | (h-th)/2+60*sin((PI*n)/180) |
時計回り、左 | (w-tw)/2-60*cos((PI*n)/180) | (h-th)/2-60*sin((PI*n)/180) |
時計回り、上 | (w-tw)/2+60*sin((PI*n)/180) | (h-th)/2-60*cos((PI*n)/180) |
反時計回り、上 | (w-tw)/2-60*sin((PI*n)/180) | (h-th)/2-60*cos((PI*n)/180) |
時計回り、下 | (w-tw)/2-60*sin((PI*n)/180) | (h-th)/2+60*cos((PI*n)/180) |
反時計回り、下 | (w-tw)/2+60*sin((PI*n)/180) | (h-th)/2+60*cos((PI*n)/180) |