无法使用 ffmpeg 更改视频字幕编解码器

Posted

技术标签:

【中文标题】无法使用 ffmpeg 更改视频字幕编解码器【英文标题】:Can't change video subtitles codec using ffmpeg 【发布时间】:2016-03-31 07:26:03 【问题描述】:

我有一个嵌入了一些流的 mkv 文件:

Stream #0:0: Video: h264 (High), yuv420p(tv, smpte170m/smpte170m/bt709), 720x300, SAR 1:1 DAR 12:5, 25 fps, 25 tbr, 48003.07 tbn, 50 tbc (default)
Stream #0:1(tr): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
Stream #0:2(fr): Subtitle: dvd_subtitle, 720x300

在我的电脑上播放时,我可以看到字幕。从我的旧 DVD/DIVX 播放器播放时,我看不到字幕(其他 mkv/avi 工作正常)。

所以我想更改字幕编码,看看是否有另一个可以与我的 DVD 播放器配合使用。

ffmpeg -encoders 报告:

 S..... ssa                  ASS (Advanced SubStation Alpha) subtitle (codec ass)
 S..... ass                  ASS (Advanced SubStation Alpha) subtitle
 S..... dvbsub               DVB subtitles (codec dvb_subtitle)
 S..... dvdsub               DVD subtitles (codec dvd_subtitle)
 S..... mov_text             3GPP Timed Text subtitle
 S..... srt                  SubRip subtitle (codec subrip)
 S..... subrip               SubRip subtitle
 S..... text                 Raw text subtitle
 S..... webvtt               WebVTT subtitle
 S..... xsub                 DivX subtitles (XSUB)

所以我尝试了:

ffmpeg -i input.mkv -acodec copy -vcodec copy -scodec "codec" converted.mkv

使用各种版本的“编解码器”。它们都不起作用(除了原来的dvdsub...):

xsub 报告:

[matroska @ 0x24558c0] Subtitle codec 94211 is not supported.
av_interleaved_write_frame(): Function not implemented
[matroska @ 0x24558c0] Subtitle codec 94211 is not supported.
Error writing trailer of mustang_converted.mkv: Function not implementedframe=  244 fps=0.0 q=-1.0 Lsize=       1kB time=00:00:10.01 bitrate=   1.0kbits/s speed=1.23e+03x    
video:321kB audio:235kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Conversion failed!

ssa 或 ass 报告:

[ssa @ 0x262e000] Only SUBTITLE_ASS type supported.
Subtitle encoding failed

其他报告:

Error while opening encoder for output stream #0:2 - maybe incorrect parameters such as bit_rate, rate, width or height

我做错了什么?某些字幕编解码器是否与当前的视频或音频编解码器不兼容?我应该更改这些而不是复制吗?

或者,是否有一个选项可以永久合并视频图像流中的字幕(然后只有两个输出流:音频和视频,但保留字幕显示)?

注意:如果在 Linux (mint) 下工作,则可以使用 ffmpeg 以外的其他工具回答。

【问题讨论】:

此问题的新读者请注意:这不是 Stack Overflow 上的主题。请参阅the help pages,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。 【参考方案1】:

您的字幕是基于图像的,需要转换为基于文本的格式,例如 SRT。使用Subtitle Edit 或类似工具从 MKV 导入潜艇。这将对潜艇进行 OCR 处理。完成后,保存为 SRT 或任何常见的基于文本的字幕格式。

然后使用您选择的编解码器运行您的 ffmpeg 命令。


或者,如果您想在字幕中刻录,您可以尝试以下方法之一

ffmpeg -i input.mkv -vf subtitles=input.mkv -acodec copy -sn converted.mkv

ffmpeg -i input.mkv -filter_complex "[0:v:0][0:2]overlay" -acodec copy -sn converted.mkv

【讨论】:

无法在 Linux 下使用字幕编辑。您的第一个 ffmpeg 命令失败,错误为 Only text based subtitles are currently supported,但第二个有效(视频质量下降,文件输出小 3 倍......但字幕工作!!!)。谢谢 您可以插入-crf 20 以提高视频质量。 会尝试的。再次感谢您的帮助。 顺便说一下,你能在你的帖子中解释一下这个神奇的“filter_complex”参数是什么意思吗? 您将使用两个命令:a) ffmpeg -i in.mkv -map 0:s sub.mp4 b) 检查 sub.mp4 是否存在且大小非零(或者,检查 cmd a 的退出代码是否成功)。如果没有,ffmpeg -i in.mkv -c copy -sn out.mp4。如果是,ffmpeg -i in.mkv -c:v copy -c:a copy out.mp4

以上是关于无法使用 ffmpeg 更改视频字幕编解码器的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg视频编解码库,无法解析的外部信号

FFmpeg视频编解码库,无法解析的外部信号

FFmpeg视频编解码库,无法解析的外部符号找不到inttypes.h文件的问题

海康威视 NVR 视频转换 ffmpeg

使用 ffmpeg sameq 和编解码器副本更改纵横比

如何在ffmpeg中禁用字幕解码