前回、FFmpegを使って字幕(SRTファイル)を動画に焼き込む方法を紹介しました。
この方法は手軽ですが、字幕のフォントや見た目がデフォルト設定のままになってしまいます。
個人的にYouTubeでよく見かける黒っぽい透過背景の字幕が見やすい気がしたため、今回、その作り方を調べてまとめてみました。
手動で行う方法
FFmpegとメモ帳などのテキストエディタだけ使う方法です。
SRTからASSに変換
まず、SRT形式のままだと基本的に見た目を指定できないため、ASS形式に変換します。
以下のコマンドを実行します。
> ffmpeg -i subtitles.srt subtitles.ass
subtitles.assが出力のASSファイルです。
ASSファイルの編集
次にこのASSファイルを編集します。
メモ帳などのテキストエディタで開いて、次のような記述を探します。
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1
Format行は、「,(カンマ)」で区切られた各カラムの項目名を示しています。
Style行は、各項目に対応する具体的な値を設定します。
上の例だと、Name(スタイル名)は「Default」、Fontname(フォント名)は「Arial」、Fontsize(フォントサイズ)は16ptという意味です。
各項目の説明は以下が分かりやすかったです。
スタイル – ASS(Advanced SubStation Alpha)@wiki – atwiki(アットウィキ)
いろいろ試してみましたが、以下のように変更すると透過背景の設定ができました。
- BorderStyle(縁取りのスタイル)を1(縁取り)から3(枠付き)に変更
- OutlineColour(縁取りの色)を&H0から&H40000000に変更
色の指定は &HXXBBGGRR の形式で、BB,GG,RRはそれぞれ青,緑,赤、XXの部分が透明度です。2桁の16進数で表します。XX=00hが不透明、FFhが完全に透明です。
上の例だと色は黒(BB,GG,RR=all 0)のままで、透明度は40h(=64)なので64÷256=25%です。
なお、以下の値も変更しました。
- Outline(縁取りの太さ)を1から2に変更
- Fontsizeを16→20に変更
変更後は以下のとおりです(赤字が変更箇所)。
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&Hffffff,&Hffffff,&H40000000,&H0,0,0,0,0,100,100,0,0,3,2,0,2,10,10,10,1
動画への焼き込み
ASSファイルの編集が終わったら、前回同様、以下のコマンドで動画に字幕を焼き付けます。
subtitlesにASSファイルを指定します。
> ffmpeg -i input.mp4 -vf subtitles=subtitles.ass output.mp4
結果の例は以下のとおりです。
黒の透過背景を付けることができました!
まとめ
FFmpegとテキストエディタだけ使って、透過背景の字幕を作る方法をまとめてみました。
フォントの種類やサイズ、色などの見た目も同じように変更できます。
もしよかったら試してみてください!