从 mkv 文件中提取字幕

use*_*495 6 video ffmpeg subtitles

我已经安装MKVToolNixSubtitle edit. 我能够Subtitle edit通过 OCR提取字幕。虽然它可用,但它带来了很多错误。

现在我想到了MKVToolNix用来提取字幕。我可以看到它列在音频和视频轨道中。但我不确定如何将其从程序中删除。

在参考了谷歌和这里的一些指南后,我也尝试了一些 FFMPEG 命令。他们都没有工作。例如

ffmpeg -i Movie.mkv -map 0:s:0:  subs.srt
Run Code Online (Sandbox Code Playgroud)

如果有人能帮我找到解决方案,那就太好了。谢谢。

PS:我使用 Ubuntu 18.04。

Mok*_*bai 8

我为此使用MKVCleaver,因为它为mkvtoolnixWindows提供了一个简单的 GUI 界面。

您可以简单地将 MKV 文件(或多个文件)拖放到其上,单击要提取的曲目的复选框,然后单击“提取曲目”。

默认情况下,您的字幕轨道将使用名称导出FileName_TrackNo.ext。对于 DVD 字幕,它将导出两个文件,字幕时间和位置位置索引和实际图形字幕。

然后,您可以将这些文件导入 SubtitleEdit。我发现它比单独的SubtitleEdit更可靠和准确,出于某种原因,它的 DVD/MKV 提取器并不完全可靠。


对于命令行和替代操作系统(您提到 Ubuntu),您可以使用mkvextract它是您已经安装的 mkvtoolnix 的一部分。

来自CorneliusAskUbuntu 上的mkv提取字幕中的回答:

从终端运行: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

使用mkvinfo以获取有关轨道的信息。

尽管评论建议使用mkvmerge -i <filename>获取更直接可用的mkvextract. 正如你提到ffmpeg -i filename.mkv的也是可用的。

  • 从您最初的问题来看,它们是图形字幕,您可能需要将它们提取为“idx”或“sub”而不是“sup”? (2认同)
  • @backspace问题完全在于,有些程序从0(mkvextract)开始计数,有些程序从1(ffmpeg/mkvmerge)开始计数,作为枚举文件中轨道列表时的第一个元素。这意味着当您从一个程序转到另一个程序时,您需要考虑到这一点,并在引入另一个程序使用的信息时递增或递减 1。它是 [off by one error](http://catb.org/esr/jargon/html/O/off-by-one-error.html) 的一种形式,详细描述请参见 https://en.wikipedia。 org/wiki/Off-by-one_error (2认同)

Tan*_*ki3 7

MKVCleaver是一个很好的选择,具有清晰的 GUI。但由于没有人更正 ffmpeg 命令,您也可以用它来做。你只是在 -map 的末尾多了一个冒号。

这是一个工作命令:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
Run Code Online (Sandbox Code Playgroud)

  • 第一个数字是您选择的输入(0 是我的命令中的第一个也是唯一一个输入),第二个字符是您选择的流类型(s 是字幕,a 是音频,v 是视频),第三个是您选择的流从那些中。像这样: -map input_file_index:stream_type_specifier:stream_index 所以上面的代码采用 Movie.mkv,然后是它的字幕流,然后是第一个字幕流。 (计数从 0 开始,因为它是索引。) (10认同)
  • `map` 中的 `0:s:0` 有什么作用?那两个 0 是什么?那个 s 是做什么用的? (3认同)
  • 以下是有关地图命令的更多信息:https://trac.ffmpeg.org/wiki/Map (2认同)