FFmpeg 6.1から使える予定のデコーダ。今まであったlibaribb24からDRCSに対応してきれいにレンダリングできるlibaribcaption。現時点ではgyan.dev、BtbNのFFmpegが対応している。
- ARIB字幕をdemuxする libaribb24
- FFmpeg Codecs Documentation : libaribcaption
- GitHub – xqq/libaribcaption: Portable ARIB STD-B24 Caption Decoder/Renderer
- Builds – CODEX FFMPEG @ gyan.dev
- Releases · BtbN/FFmpeg-Builds
基本コマンド
字幕をつけて再生する。
ffplay -sub_type bitmap input.ts
ffplay のショートカットキー
ffplay の基本起動オプション
解像度1440×1080で表示が1920×1080になる映像には-canvas_size 1920×1080をつける。
ffplay -sub_type bitmap -canvas_size 1920x1080 input.ts
字幕を映像に焼き付ける。
ffmpeg -sub_type bitmap -canvas_size 1920x1080 input.ts -filter_complex "[0:v][0:s]overlay" -c:v libx264 -crf 20 -c:a copy output.mp4
字幕データはbgraなので透過のまま映像に変換して字幕とは別ストリームのmkvに入れる。
ffmpeg -sub_type bitmap -canvas_size 1920x1080 -i input.ts -filter_complex "[0:s]fifo[a]" -map 0:v -map [a] -map 0:a -map 0:s -c:v:0 libx264 -crf:0 20 -c:v:1 libvpx-vp9 -cpu-used 8 -quality realtime -crf:1 32 -b:v:1 0 -r:v:1 30000/1001 -c:a:0 copy -c:s copy output.mkv
ffplayは1入力で映像と字幕のPTSを同時に変更できないので倍速再生できない。
映像と音声の pts を扱う setpts, asetpts
こちらを参考に-replace_fullwidth_ascii 0にしたら見栄えが良くなりました
感謝🙏 https://t.co/3kPxaeggPc pic.twitter.com/5bXgmRohDt
— ベアー🐻 (@BEAR10591) April 15, 2023
「-canvas_size 何ぞと思ったのでワンセグのTSをffmpegに通してみた。
ワンセグの入力解像度は320×180しかないので字幕も荒い描画になるのは想定通りで、canvas_sizeつけるとひょっとして解像度上がるのかなぁと思ったらクソデカ字幕になるんですな」 pic.twitter.com/ZdiGnP2U38— fueruwakame (@wakame_2012) February 15, 2023
オプション
- -sub_type[int]
字幕のレンダリングタイプ - 0, none:何も行わない
- 1, bitmap:ビットマップのレンダリング
- 2, text:プレーンテキスト
- 3, ass:フォーマットされたテキスト。既定値
- -caption_encoding[int]
字幕テキストのエンコーディング方式 - 0, auto:エンコーディング方式を自動検出。既定値
- 1, jis:8ビット文字のJISエンコーディング(日本のISDB字幕)
- 2, utf8:UTF-8エンコーディング(フィリピンのISDB-T字幕)
- 3, latin:ラテン文字(南米で使用されるSBTVD / ISDB-Tb字幕)
- -ass_single_rect[boolean]
複数の矩形を処理できないプレーヤーのためのASS字幕の回避策
既定値:0 - -font[string]
カンマ区切りのフォントファミリーの指定。-sub_typeがass, bitmapで使える - -replace_fullwidth_ascii[boolean]
MSZ全角英数字を半角英数字に置換するかどうか。-sub_typeがass, bitmapで使える
既定値:1 - -force_outline_text[boolean]
常に文字をアウトラインでレンダリングするかどうか。-sub_typeがass, bitmapで使える
既定値:0 - -ignore_background[boolean]
キャプションの背景を無視するかどうか。-sub_typeがass, bitmapで使える
既定値:0 - -ignore_ruby[boolean]
ルビのような文字を無視するかどうか。-sub_typeがass, bitmapで使える
既定値:0 - -outline_width[float]
テキストのアウトラインの幅。-sub_typeがass, bitmapで使える
既定値:1.5
範囲:0から3まで - -replace_drcs[boolean]
既知のDRCSを置換するかどうか。-sub_type bitmapで使える
既定値:1 - -canvas_size[image_size]
入力ビデオの横x縦のサイズを設定する。-sub_type bitmapで使える