我查看了FFMpeg文档和许多论坛,并找出了从.MP4视频中提取字幕的正确命令行如下所示:
ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt但是,我得到了以下错误,这使我怀疑这是否可行:
打开输出流#0:0编码器时出错--可能是bit_rate、速率、宽度或高度等不正确的参数
使用ffmpeg -codecs,我可以确认ffmpeg应该能够编码字幕。
使用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)编辑
我已经用注释中显示的简化命令行进行了测试,但仍然得到了相同的错误。下面是运行命令的a link to the detailed verbose output。我还试图完全禁用结果输出中的元数据和章节,但这仍然会产生相同的错误。
发布于 2014-01-02 16:52:05
我无意中明白了为什么我没有成功:
如果源视频中的字幕编码为基于文本的表示形式,那么指定的命令行就会非常好。但是,从ffmpeg -i命令行的输出中可以看到,字幕是以"dvd_subtitle“格式编码的。
dvd_subtitle格式存储视频中每个字幕的位图。因此,ffmpeg无法将位图转换为文本。
为了完成这一任务,人们不得不求助于一个基于OCR的软件,该软件可以帮助用户将每个字幕识别为其位图编辑中的文本。
(源视频中有一个以文本为基础的副标题,但我不知道它是从哪里来的,也不知道大多数流行玩家看不到它的来源。就所有意图和目的而言,这个"mov_text“字幕似乎是存根占位符,可能是从原始DVD转换而来的工件)。
发布于 2015-10-15 05:59:19
只是FYI,(由于rep还不能发表评论),但是从MP4中提取SRT将导致格式化为MOV_Text的文件,而不是常规的SRT。它仍然会被添加和工作,但这就像将mp4更改为m4v一样。虽然它通常起作用,但代码中的工作方式并不相同。Mov_text是可怕的手动调整字体/大小等。最好的选择是下载和测试一个SRT从网上!
这将有效,但将导致mov_text编码的srt文件:
ffmpeg -i in.mp4 out.srt发布于 2017-02-04 07:35:19
尝试使用地图选项..。如果输入文件中有太多的流.
语法如下:
-i video.mp4 -map 0:4 out.srt
由于您的视频中有两个字幕流,第一个是0:3,它是dvdsubtitle,因此不能转换为srt,所以我们将在0:4流(即mov_text )上转换第二个字幕,并且是字幕的软拷贝,因此可以很容易地转换.
https://stackoverflow.com/questions/20676906
复制相似问题