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

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

基本コマンド

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

映像の最初をカットして同時に字幕時間もの最初もカットする。参照元
ffmpeg -ss 25:00 -to 26:00 -copyts -i video -vf subtitles=sub.srt -c:a copy -ss 25:00 output.mp4

webm 形式にエンコードするときは-output_ts_offsetをつける。参照元
ffmpeg -ss 25:00 -to 26:00 -copyts -i video -vf subtitles=sub.srt -c:v libvpx-vp9 -crf 30 -b:v 0 -qmin 3 -qmax 40 -c:a copy -output_ts_offset 25:00 output.webm

ffmpeg で指定時間でカットするまとめ

公式ドキュメント: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/bancodesrtASS Tags – Aegisub Manualを参照。

node.js – How to create watermark underlined text using ffmpeg – Stack Overflow
ffmpeg subtitles alignment and position – Stack Overflow

ASS字幕はスタイルがあらかじめ指定してあることが多いのでSRT字幕を使う。KEY=VALUEで指定し、カンマ,でつなげる。Name指定が出来ないので一括書き換えができない。字幕ファイルに書いてある設定を優先する。

スタイルを適用していないSRT字幕で出力するには-c:s textを指定する。
ffmpeg -i input -vn -an -c:s text sub.srt

,\でエスケープするかではさむ。
ffplay -i input -vf subtitles=sub.srt:'force_style=FontName=Arial\,Fontsize=64\,OutlineColour=&H8000ff00\,Outline=3\,Shadow=3'

  • FontName
  • Fontsize
  • PrimaryColour
    文字の色指定。ABGRの順番、H以降の8文字が該当する。0xAABBGGRRの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
    1: 左下, 2: 下中央, 3: 右下, 5: 左上, 6: 上中央, 7: 右上, 9: 中央左, 10: 中央, 11: 中央右
  • MarginL
  • MarginR
  • MarginV
  • Encoding

コメントを残す

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

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