12

我检查了 FFMpeg 文档和许多论坛,并找出了从 .MP4 视频中提取字幕的正确命令行应该如下所示:

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt

但是,我收到以下错误,这让我怀疑这是否可行:

为输出流 #0:0 打开编码器时出错 - 可能是不正确的参数,例如 bit_rate、rate、width 或 height

使用ffmpeg -codecs,我可以确认 ffmpeg 应该能够编码 subrip 字幕。

使用ffmpeg -i video.mp4,我可以看到视频中嵌入了两个字幕轨道:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
...
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:2(fra): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s / 0x7334706D)
Stream #0:4(und): Subtitle: mov_text (text / 0x74786574)

编辑

我已经使用评论中显示的简化命令行进行了测试,但我仍然得到同样的错误。这是运行该命令的详细详细输出的链接。我还尝试在结果输出中完全禁用元数据和章节,但这仍然会产生相同的错误。

4

3 回答 3

23

我最终弄清楚了为什么我没有成功:

如果源视频中的字幕以基于文本的表示形式编码,则指定的命令行会非常好。ffmpeg -i但是,从命令行输出中可以看出,字幕以“dvd_subtitle”格式编码。

dvd_subtitle 格式存储视频中每个字幕的位图。因此,ffmpeg 无法将位图转换为文本。

对于这项任务,必须求助于基于 OCR 的软件,该软件可帮助用户将每个字幕识别为来自其位图表示的文本。

(源视频中有一个基于文本的辅助字幕,但我不知道它来自哪里,并且大多数流行播放器都看不到它。出于所有意图和目的,这个“mov_text”字幕似乎是一个存根占位符, 可能是原始 DVD 转换的产物)

于 2014-01-02T16:52:05.723 回答
4

仅供参考,(由于代表无法发表评论),但从 MP4 中提取 SRT 将导致文件格式为 MOV_Text 而不是常规 SRT。它仍然会被添加并工作,但就像将 mp4 更改为 m4v。虽然它通常可以工作,但代码中的事情并不相同。mov_text 对于手动调整字体/大小等来说太糟糕了。最好的办法是从网上下载和测试 SRT!

这将起作用,但会产生 mov_text 编码的 srt 文件:

ffmpeg -i in.mp4 out.srt
于 2015-10-15T05:59:19.353 回答
2

尝试使用 map 选项...如果输入文件中有太多流...

语法是:

ffmpeg -i video.mp4 -map 0:4 out.srt

由于您的视频中有两个字幕流,第一个是 0:3 的 dvdsubtitle 所以无法转换为 srt,所以我们将转换 0:4 的第二个字幕流,即 mov_text 并且是字幕的软拷贝,因此可以轻松转换。 ...

于 2017-02-04T07:35:19.413 回答