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

jpo*_*o38 4 video ffmpeg

我有一个嵌入了一些流的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
Run Code Online (Sandbox Code Playgroud)

在我的电脑上播放时,我可以看到字幕.从我的旧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)
Run Code Online (Sandbox Code Playgroud)

所以我尝试过:

ffmpeg -i input.mkv -acodec copy -vcodec copy -scodec "codec" converted.mkv
Run Code Online (Sandbox Code Playgroud)

与各种版本的"编解码器".他们都不会工作(原来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!
Run Code Online (Sandbox Code Playgroud)

ssa或ass报告:

[ssa @ 0x262e000] Only SUBTITLE_ASS type supported.
Subtitle encoding failed
Run Code Online (Sandbox Code Playgroud)

其他报道:

Error while opening encoder for output stream #0:2 - maybe incorrect parameters such as bit_rate, rate, width or height
Run Code Online (Sandbox Code Playgroud)

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

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

注意:如果在Linux(mint)下工作,使用除ffmpeg之外的其他工具的答案是可以接受的.

Gya*_*yan 10

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

然后使用您选择的scodec运行您的ffmpeg命令.


或者,如果要刻录字幕,可以尝试使用其中一种方法

ffmpeg -i input.mkv -vf subtitles=input.mkv -acodec copy -sn converted.mkv
Run Code Online (Sandbox Code Playgroud)

要么

ffmpeg -i input.mkv -filter_complex "[0:v:0][0:2]overlay" -acodec copy -sn converted.mkv
Run Code Online (Sandbox Code Playgroud)

  • Linux 下无法使用字幕编辑。您的第一个 ffmpeg 命令失败,并出现错误“当前仅支持基于文本的字幕”,但第二个命令有效(视频质量下降,文件输出小 3 倍......但字幕有效!!!)。谢谢 (2认同)
  • 您将使用两个命令: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` (2认同)