如何使用 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参数是可选的。它从零开始,因此stream_index=1将选择容器中的第二个字幕流。

有关更多信息,请参阅此处的“字幕”过滤器文档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

相关内容