文字を直接コマンドに記述したり、ファイルを読み込んで描写するdrawtextフィルタの使い方。現在のところ絵文字には対応していない。文字を動かしたり、表示非表示の切り替えや、内容を変更したり、色を変えたり出来る。ただし映像の途中に拡大縮小は出来ないのでass, subtitlesフィルタを使って字幕ファイルを編集して動かす方法をとる。拡大縮小は2017年4月のコミットからできたがドキュメントが修正されてなかった

外部ライブラリフィルタなので別途インストールが必要である。基本となるlibfreetypefont設定に必要なfontconfigtext_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"

メタデータを描写する。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})'

YUV のデータを数値で表示する signalstats

公式ドキュメント: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"

  • 行間隔を指定して2行以上を読みやすく

    "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]
    描写内容の背景をテキスト幅で囲む
    既定値:0
  • boxborderw[int]
    boxのサイズ指定。上下左右同じように広がる
    既定値:0
    範囲:INT_MIN から INT_MAX まで
  • line_spacing[int]
    行間隔の指定
    既定値:0
    範囲:INT_MIN から INT_MAX まで
  • fontsize[string]
    フォントサイズの指定。以下の書式が使える
  • x[string]
    描写内容の横座標の指定。以下の書式が使える
    既定値:0
  • y[string]
    描写内容の縦座標の指定。以下の書式が使える
    既定値:0
  • 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:廃止予定
  • 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[boolean]
    textfileをリロードして内容が書き換わったらフレーム毎に書き換える
    既定値:0
  • 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_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を呼び出して描写する。利用例
  • 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}
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 expansionfontsize、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 OverflowFFmpegの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)

タイムコード

映画などの編集作業でよくみる時間経過を表示するタイムコードを描写。
"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

動画時間

ffplay で時間とフレーム数を表示する

中央と隅

映像の上に映像をのせる overlay | 応用例より。

場所 x y
中央 (w-tw)/2 (h-th)/2
左上隅 0 0
右上隅 w-tw 0
左下隅 0 h-th
右下隅 w-tw h-th

ループ

表示方法は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)

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)