如何在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中禁用字幕解码的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 将 hdmv pgs 字幕从 mkv 提取到 srt

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

使用 ffmpeg 禁用默认字幕轨道

如何使用 ffmpeg 在视频中的任意位置显示大量字幕?

如何在ffmpeg转换的flv中添加字幕

如何在 ffmpeg 视频过滤器的字幕中添加字体大小