ffmpeg でテキストを動的に表示する

基本的なことは ニコ生のTSから一定時間毎に画像を出力する と、ffmpeg で使える計算書式 を参照。

テキストを動かすには座標を動かす必要があり、1フレーム毎に1ピクセル移動する n と、タイムスタンプ秒(1秒)毎に1ピクセル移動する t がある。どちらを使っても良いがフレーム毎に移動する n のほうが使いやすい。速度調整はそれぞれの値に倍数を掛ける。配信用途だと配信フレーム数*n で 60~70 程度になるくらいがちょうど良い。

テキストを動的に表示する方法は2種類あり、一度だけ表示するエンドロールみたいなのと繰り返し表示するのとがある。

ffmpeg でエンコードする場合には、ffplay を ffmpeg に変えて、-f lavfi -i color=c=white:r=60 の部分を入力ファイルで指定し、エンコード形式を決めて出力する。

公式ドキュメント
ffmpeg Documentation :: drawtext

1度だけ表示する


  • 右上から左上:x=w-n
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-n"
  • 右下から左下:x=w-n:y=h-th
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-n:y=h-th"
  • 左上から右上:x=n-tw
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=n-tw"
  • 左下から右下:x=n-tw:y=h-th
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=n-tw:y=h-th"

  • 右下から右上:x=w-tw:y=h-n
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-tw:y=h-n"
  • 左下から左上:y=h-n
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':y=h-n"
  • 右上から右下:x=w-tw:y=n
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-tw:y=n"
  • 左上から左下:y=n
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':y=n"


繰り返し表示する


  • 右上から左上:x=w-mod(n\,w+tw)
    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)"
  • 右下から左下:x=w-mod(n\,w+tw):y=h-th
    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):y=h-th"
  • 左上から右上:x=mod(n\,w+tw)-tw
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=mod(n\,w+tw)-tw"
  • 左下から右下:x=mod(n\,w+tw)-tw:y=h-th
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=mod(n\,w+tw)-tw:y=h-th"

  • 右下から右上:x=w-tw:y=h-mod(n\,h+th)
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-tw:y=h-mod(n\,h+th)"
  • 左下から左上:y=h-mod(n\,h+th)
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':y=h-mod(n\,h+th)"
  • 右上から右下:x=w-tw:y=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-tw:y=mod(n\,h+th)-th"
  • 左上から左下:y=mod(n\,h+th)-th
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':y=mod(n\,h+th)-th"


座標指定の基本書式


  • h : 入力ソース(-i)の高さ
  • w : 入力ソース(-i)の幅
  • n : 入力ソースのフレーム数 0 から
    n にプラスしたフレーム数分表示が遅れる
  • t : 入力ソースのタイムスタンプ(秒)
  • th : テキスト高
  • tw : テキスト幅
  • x : x の値を返す
  • y : y の値を返す
  • sar : アスペクト比を返す
  • dar : (w / h) * sar
  • rand(x\,y) : x から y までの値をランダムで返す


その他の配置方法


  • テキストを中央に配置する : x=(w-tw)/2:y=(h-th)/2
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=(w-tw)/2:y=(h-th)/2"
  • 時計回りに回転 : x=a*cos(b*n):y=a*sin(b*n) : a が半径で、b が回転速度
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=(w-tw)/2+10*cos(1/6*n):y=(h-th)/2+10*sin(1/6*n)"
  • 楕円に時計回りに回転 : x y の比率を変える
    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(1/6*n):y=(h-th)/2+30*sin(1/6*n)"
  • 反時計回りに回転 : sin cos を入れ替える
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=(w-tw)/2+10*sin(1/6*n):y=(h-th)/2+10*cos(1/6*n)"
  • 8の字
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=(w-tw)/2+50*cos(1/6*n):y=(h-th)/2+50*sin(1/3*n)"
    ffplay -f lavfi -i color=c=white:r=60 -vf drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=(w-tw)/2+50*sin(1/6*n):y=(h-th)/2+50*sin(1/3*n)"


発展的な使い方


テキストを複数読み込むことができるので単色からフルカラーまでCAで表現することができる。しかしフォントによっては表示できなかったり、縦横の比がおかしかったり、フォントサイズでずれたりするのでうまく表示するのは難しい。

ffplay -f lavfi -i color=c=black:r=1 -vf drawtext="fontfile='C\:/Windows/Fonts/msgothic.ttc':textfile='test.txt':x=0:y=th: fontcolor=green,drawtext="fontfile='C\:/Windows/Fonts/msgothic.ttc': text='かきくけこ':x=0:y=2*th:fontcolor=yellow:fontsize=24, drawtext="fontfile='C\:/Windows/Fonts/msgothic.ttc':text='さしすせそ': x=0:y=3*th:fontcolor=red:fontsize=30"

ffmpeg_drawtext_three0.png


Steins;Gateコメント動画制作後記(最終回):HDAのブロマガ - ブロマガ より、CAをお借りしました。

Mayuri_Shiina.png
Makise_Kuris.png

FFMPEG Launcher でのテロップの表示方法


高度な設定 < 共通設定 < 映像 < フィルタを有効にする
繰り返し表示するから表示したい方向のフィルタを記入する

右から左のコマンド例
drawtext=fontfile="'C\:/Windows/Fonts/msgothic.ttc':text='test':x=w-mod(n\,w+tw)"
ffml_telop.png

追記 2013/12/02
コマンドのミスを修正し、上下左右の逆パターンのコマンドを追加した。
関連記事

この記事へのコメント

管理人のみ通知 :

トラックバック


ニコニコチャンネル始めました
ニコラボチャンネル
スポンサード リンク
THE IDOLM@STER THE@TER ACTIVITIES 03
THE IDOLM@STER THE@TER ACTIVITIES 03

Fate/EXTELLA REGALIA BOX for PlayStation (R) 4 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4
Fate/EXTELLA REGALIA BOX for PlayStation (R) 4 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4

妖怪ウォッチ くったりぬいぐるみだニャン ジバニャン
妖怪ウォッチ くったりぬいぐるみだニャン ジバニャン

Fate/EXTELLA VELBER BOX 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4
Fate/EXTELLA VELBER BOX 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS4

Fate/EXTELLA REGALIA BOX for PlayStation (R) Vita 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS Vita
Fate/EXTELLA REGALIA BOX for PlayStation (R) Vita 【初回限定特典】ネロ・クラウディウス、アルトリア・ペンドラゴン衣装「純真のナイトドレス」プロダクトコード付+【Amazon.co.jp限定特典】アルテラ衣装「スイートデビル」プロダクトコード配信 - PS Vita

【早期購入特典あり】初音ミクシンフォニー~Miku Symphony 2016~オーケストラ ライブ CD(初音ミクシンフォニー描き下ろしクリアファイル付き(ランダム配布))
【早期購入特典あり】初音ミクシンフォニー~Miku Symphony 2016~オーケストラ ライブ CD(初音ミクシンフォニー描き下ろしクリアファイル付き(ランダム配布))

「うたわれるもの 偽りの仮面&二人の白皇」歌集(初回限定盤)
「うたわれるもの 偽りの仮面&二人の白皇」歌集(初回限定盤)

TVアニメ『ラブライブ!サンシャイン!!』挿入歌シングル「想いよひとつになれ/MIRAI TICKET」
TVアニメ『ラブライブ!サンシャイン!!』挿入歌シングル「想いよひとつになれ/MIRAI TICKET」

『刀剣乱舞-花丸-』 歌詠集 其の三 特装盤
『刀剣乱舞-花丸-』 歌詠集 其の三 特装盤

本好きの下剋上~司書になるためには手段を選んでいられません~第一部 「本がないなら作ればいい3」
本好きの下剋上~司書になるためには手段を選んでいられません~第一部 「本がないなら作ればいい3」

新着記事と追記・編集記事
スポンサード リンク
ブログ内検索
プロフィール

Author:ロベルト
お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab
ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

カテゴリ
アクセスの多い記事
記事アーカイブ

最新コメント
リンク
ニコニコ静画
アニメカテゴリ毎時ランキング
免責事項
当ブログはリンクフリーです。記事によりトラブルが生じた場合でも、当ブログ管理人は一切の責任を負いません。 当ブログに記載されている情報の正誤や利用は、ご自身の判断でお願いします。 紹介したアプリケーションに関する問い合わせは作者に問い合わせてください。ニコニコ動画に関する質問はまずは公式掲示板、2ch、各Q&Aサイトを参照ください。
ブログの読者になる(RSS)
アクセス数