字幕ファイルを動画に焼き付ける(ハードサブ) subtitles フィルタの使い方。字幕ファイルのスタイルを書き換えて字幕ファイルを出力するフィルタではない。似たフィルタに ass フィルタがあるが、subtitles フィルタはass フィルタよりも複雑な設定ができる。このフィルタを使うには –enable-libasslibavcodec, libavformat が必要である。

ass の字幕ファイルを動画に焼き付ける ass

基本コマンド

input.ass ファイルを表示する
ffmpeg -i input -vf subtitles=input.ass output
ffplay -i input -vf subtitles=input.ass


公式ドキュメント:FFmpeg Filters Documentation : subtitles

オプション

  • filename, f[string]
    字幕ファイルの指定。必須項目
  • original_size[image_size]
    ASS 字幕が作成された動画の解像度を指定する。基本は無指定でよいが、アスペクト比が間違えて字幕ファイルに解像度が書き込まれたときに設定を書き換える
  • fontsdir[string]
    フォントディレクトリの指定
  • alpha[boolean]
    背景を透過して文字だけ表示させる
    既定値:0
  • charenc[string]
    文字コードをエンコードする。UTF-8 以外のときに有用
  • stream_index, si[int]
    複数の字幕ファイルが含まれる場合に何番目を読み込むかを指定
    既定値:-1(0 が1入力)
    範囲:-1 から INT_MAX まで
  • force_style[string]
    Styles の内容を強制する

alpha の使い方

alpha を使えば字幕以外がすべて透過するのでは無くて、予め映像自体を透過させておかないと字幕以外が透過しない。color ソースでのサンプル。開始6秒の時点で字幕が表示されていれば背景が透過して字幕が普通に表示される。
ffmpeg -ss 6 -f lavfi -i "color=color=white@0.0:size=800x600,format=rgba,subtitles=input.ass:alpha=1" -frames:v 1 output.png
普通の動画で映像を透過させるには映像をアルファチャンネル付きで読み込む必要があり、さらにアルファチャンネルの値を lutrgb フィルタで小さくするほど透過する。
ffmpeg -ss 6 -f lavfi -i "movie=input.mp4:sp=6,format=rgba,lutrgb=val:val:val:0,subtitles=input.ass:alpha=1" -frames:v 1 output.png

stream_index の使い方

複数の字幕が含まれるファイルを subtitles フィルタで読み込んだときにどれを表示するかを指定する。sub.mkv に含まれる1番目の字幕を表示する。2番目の字幕なら 1 を指定する。
ffmpeg -i input -vf "subtitles=sub.mkv:stream_index=0" output

force_style の使い方

具体的な指定の意味は ASS 仕組みと書き方 : geocities.co.jp/bancodesrt を参照。
指定例。KEY=VALUE で指定し、,(カンマ) でつなげる。Name 指定が出来ないので一括書き換えができない。
ffplay -i input -vf "subtitles=input.ass:'force_style=FontName=Arial,Fontsize=64,OutlineColour=&H8000ff00,Outline=3,Shadow=3'"
文字の周りを縁取り、全体を縁取るには2度フィルタを適用する。
ffplay -i input -vf "subtitles=input.ass:'force_style=FontName=メイリオ ボールド,Fontsize=64,OutlineColour=&H8000ffff,Outline=3,Shadow=3,MarginV=30'","subtitles=input.ass:'force_style=FontName=メイリオ ボールド,OutlineColour=&Haa000000,Fontsize=64,BorderStyle=3,Outline=16,Shadow=0,MarginV=30"

  • FontName
  • Fontsize
  • PrimaryColour
    文字の色指定、ABGR の順番、H以降の8文字が該当する
    &HAABBGGRR の 00 から ff までが指定できる
    AA は 00 が不透明で、ff が完全に透明になる。半透明は 80
  • SecondaryColour
  • OutlineColour
  • BackColour
  • Bold
  • Italic
  • Underline
    下線
  • StrikeOut
    打ち消し線
  • ScaleX
  • ScaleY
  • Spacing
  • Angle
    文字の角度指定。90で縦書きになるが、縦書きフォントを使わないと単に縦表示になる
  • BorderStyle
    1:文字に沿って縁取る
    3:文字の周りを四角く縁取る
  • Outline
    BorderStyle の縁取りの太さの指定
  • Shadow
    文字の右下に表示する影の太さの指定
  • Alignment
  • MarginL
  • MarginR
  • MarginV
  • Encoding

コメントを残す

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

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