如何使用 ffmpeg 从视频中提取字幕?

如何使用 ffmpeg 从视频中提取字幕?

我正在尝试从视频中提取字幕作为.srt文件,我使用了以下命令:

ffmpeg -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

但是,我收到无法识别选项的错误codec:s:0:1 ,那么,您能告诉我确切的命令以及如何将字幕提取为.srt视频中的文件吗?

答案1

简单的:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -我:输入文件URL/路径。
  • -地图:指定一个或多个输入流作为输出文件的源。
  • 时间:0:选择字幕流。

答案2

ffmpeg -i video.mkv subs.srt

很邪恶吧?

刚刚为我工作过,适用于包含单个 SRT 流的一堆 MKV。显然这是默认行为。我的 ffmpeg 版本是 20170516,来自 ubuntu 16.4

答案3

-codec:s:0:1是不正确的。如果您使用,-codec:s:0则 ffmpeg 将使用指定的编解码器作为传递到输出的第一个字幕流,如果您使用,-codec:s:1则它将使用它作为第二个字幕流,等等。

您还可以使用-codec:s选择全部输出字幕流,或者-codec:2选择第三个输出流,不管它是什么。

您可能会感到困惑,因为该-map选项的行为方式不同 - 在那里,您必须选择所选流来自哪个输入。(因此,-map 0:s:0将从第一个输入中获取第一个字幕流,并将其提供给输出)。但是,-map用于选择要从输入中获取的流;而大多数使用流映射的其他选项都是在选择流后在流上使用(因此无需指定它们来自哪个输入文件),因为它们会传递到输出。

答案4

如果字幕单独混编到 MP4 中,而不是硬编码,我总是使用mkvmerge -o output.mkv theinput.mp4。然后使用mkvextract tracks output.mkv 2:thetrackidof.vob

然后使用vobsub2srt thetrackidof(“thetrackidof”是没有 IDX 或 VOB 文件扩展名的字幕文件的文件名)。每次都有效。

相关内容