是否可以使用ffmpeg从MP4视频中提取子RIP(SRT)字幕?

是否可以使用ffmpeg从MP4视频中提取子RIP(SRT)字幕?,ffmpeg,extract,subtitle,srt,Ffmpeg,Extract,Subtitle,Srt,我查阅了FFMpeg文档和许多论坛,找到了从.MP4视频中提取字幕的正确命令行,如下所示: ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt 然而,我得到了以下错误,这让我怀疑这是否可行: 打开输出流#0:0的编码器时出错-可能参数不正确 例如比特率、速率、宽度或高度 使用ffmpeg-codecs,我可以确认ffmpeg应该能够对subrip字幕进行编码 使用ffmpeg-i video.mp4,我可以看到视频中嵌入了两个字幕曲目: Inp

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

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt
然而,我得到了以下错误,这让我怀疑这是否可行:

打开输出流#0:0的编码器时出错-可能参数不正确 例如比特率、速率、宽度或高度

使用
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)
编辑


我已经用注释中显示的简化命令行进行了测试,但仍然得到相同的错误。下面是运行该命令的步骤。我还尝试在结果输出中完全禁用元数据和章节,但仍然会产生相同的错误。

我最终找到了失败的原因:

如果源视频中的字幕是以基于文本的表示形式编码的,那么指定的命令行就非常好了。但是,从
ffmpeg-i
命令行的输出中可以看出,字幕是以“dvd\u subtitle”格式编码的

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

对于这项任务,我们必须求助于基于OCR的软件,该软件可以帮助用户从位图表示中将每个字幕识别为文本

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

仅供参考,(由于rep尚未发表评论),但是从MP4中提取SRT将导致一个格式化为MOV_文本的文件,而不是常规的SRT。它仍然会得到增加和工作,但它就像改变mp4到m4v。虽然它通常是有效的,但代码中的情况并不相同。Mov_文本对于手动调整字体/大小等非常糟糕。最好的办法是从web下载并测试SRT

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

ffmpeg -i in.mp4 out.srt
尝试使用映射选项。。。 如果输入文件中的流太多

语法将是:

ffmpeg-i video.mp4-map0:4out.srt


由于您的视频中有两个字幕流,第一个是0:3,是DVD字幕,因此无法转换为srt,因此我们将转换第二个字幕,第二个是0:4流,是mov_文本,是字幕的软拷贝,因此可以轻松转换……

Simple
ffmpeg-i in.mp4 out。srt
适用于我。(ffmpeg 2.0.1)尝试
ffmpeg-日志级调试…
为了获得有关错误的更多信息,我尝试了这两种建议,但我无法识别明显的错误。这可能是由于ffmpeg试图在生成的srt文件中输出章节标记造成的?我已经包含了详细的调试输出。也看不到任何明显的内容,但可以尝试使用更新的版本,并使用
ffmpeg-I video.mp4-map 0:s:0 output.srt
仅为输出使用第一个字幕流。(顺便说一句,ffmpeg CLI问题对于SO来说是离题的,所以我投票将其移至。)很抱歉我的帖子离题了。我一定会用SU问这些问题。我将尝试更新的ffmpeg版本。干杯。我认为文本跟踪是章节标记,但不确定。您可以通过如下方式指定
-c:s text
:ffmpeg-I in.mp4-map 0:4-c:s text out.4.srt