ffmpegを使用してストリームから字幕をハードコードする方法は?

ffmpegを使用してストリームから字幕をハードコードする方法は?

新しい動画に字幕をハードコードしようとしています。元のビデオには、字幕ストリーム、つまりビデオ全体、オーディオ、および字幕(他のストリームのうち)が含まれています。

...
Stream #0:0(eng): Video: h264 (High 10), yuv420p10le(progressive), 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 4534142.86 tbc (default)
Stream #0:1(jpn): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp
Metadata:
  title           : 2.0 AAC
Stream #0:2(eng): Subtitle: ass (default)
Metadata:
  title           : FFF
Stream #0:3: Attachment: ttf
Metadata:
  filename        : DFKanTeiRyu-XB.ttf
  mimetype        : application/x-truetype-font
...

次のコマンドを使用しました。

ffmpeg -i input.mkv -c:v libx264  -c:a libmp3lame -c:s mov_text -map 0:0 -map 0:1 -map 0:2 output.mp4

出力ファイルを生成しますが、字幕はハードコードされません(だから、愚かなテレビはそれを表示/認識できません)。

字幕付きビデオを変換するには?

答え1

「字幕」フィルタを使用して、mkvから直接字幕を書き込むことができます。

ただ追加してください-vf "subtitles='$PATH_TO_MKV':stream_index=$SUBTITLE_ID"

はい

ffmpeg -i input.mkv -c:v libx264 -vf "subtitles=input.mkv:stream_index=0" output.mkv

stream_indexパラメーターはオプションです。 0 から始まるので、stream_index=1コンテナの 2 番目の字幕ストリームが選択されます。

詳細については、ここで「字幕」フィルタのドキュメントを参照してください。http://ffmpeg.org/ffmpeg-filters.html#subtitles

このリンクの一般的なフィルタリングガイドラインhttps://trac.ffmpeg.org/wiki/FilteringGuide

答え2

方法は、まずヒップ字幕を抽出することです。

ffmpeg -i input.mkv -c:s copy subtitle.ass

その後、説明したようにビデオに「焼く」。ここ:

ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi

関連情報