如何在ffmpeg中禁用字幕解码
Posted
技术标签:
【中文标题】如何在ffmpeg中禁用字幕解码【英文标题】:How to disable subtitles decoding in ffmpeg 【发布时间】:2012-08-21 08:08:52 【问题描述】:我正在尝试使用 FFMpeg强>。但是,ffmpeg 抱怨 subtitles 格式 - 它无法解码流。由于我不需要这个字幕流,我想知道如何在转换过程中禁用字幕流解码?
【问题讨论】:
删除字幕也有助于避免多路复用破折号投诉。虽然 VLC 将一些元数据显示为字幕,但要使用 ffmpeg 删除它,您需要-map_metadata -1
【参考方案1】:
使用负映射来省略字幕并保留其他所有内容:
ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mkv
-map 0
选择所有流。建议这样做,因为默认的 stream selection 行为只为每种流类型选择 1 个流。
-map -0:s
是取消选择所有字幕流的负映射。
-c copy
启用 stream copy 模式,该模式仅重新复用并避免重新编码。
【讨论】:
【参考方案2】:要在不重新编码视频和音频的情况下删除字幕流,最短的命令是:
ffmpeg -i input.mkv -sn -c copy output.mkv
【讨论】:
【参考方案3】:我终于找到答案了。
有-sn
这样的选项可以禁用从输入流中解码字幕。音频和视频解码也有类似的选项:分别为-an
和-vn
。
事实证明,还有另一种方法可以实现这一目标。可以使用-map
选项来选择要解码的流。因此,在 -map
选项中省略字幕流就可以了。
例如,如果一个电影文件包含 3 个流:
流 0:视频 流 1:音频 流 2:字幕FFmpeg 的转换命令可能如下所示:
ffmpeg -i <input file> -sn -vcodec <video codec> -acodec <audio codec> <output file>
或
ffmpeg -i <input file> -vcodec <video codec> -acodec <audio codec> -map 0:0 -map 0:1 <output file>
前一个命令行取消选择字幕流(可能是全部,如果有的话),而后一个选择只需要解码的流。 p>
【讨论】:
+1 第一种方法(-sn 选项)完全有效,谢谢。 (在 mkv 文件上尝试过。) 效果很好!如果您需要简单地从视频文件中删除 subs 而不重新编码,那么这工作非常快:ffmpeg -i video.mkv -vcodec copy -acodec copy -sn video-no-subs.mkv
以上是关于如何在ffmpeg中禁用字幕解码的主要内容,如果未能解决你的问题,请参考以下文章