如何在ffmpeg中禁用字幕解码

v_2*_*_2e 24 video ffmpeg stream video-encoding subtitle

我正在尝试使用FFMpeg将包含视频,音频字幕流的视频文件转换为另一种格式.但是,ffmpeg抱怨字幕格式 - 它无法解码流.由于我不需要这个字幕流,我想知道如何在转换过程中禁用字幕流解码?

v_2*_*_2e 54

我终于找到了答案.

存在这样的选项,-sn其禁用来自输入流的字幕解码.此外,还有类似的音频和视频解码选项:-an-vn.

事实证明,还有另一种方法可以实现这一目标.可以使用该-map选项来选择要解码的流.因此,在-map选项中省略字幕流可以完成工作.

例如,如果有一个包含3个流的电影文件:

  • 流0:视频
  • 流1:音频
  • 第2流:字幕

FFmpeg的转换命令可能如下所示:

ffmpeg -i <input file> -sn -vcodec <video codec> -acodec <audio codec>  <output file>
Run Code Online (Sandbox Code Playgroud)

要么

ffmpeg -i <input file> -vcodec <video codec> -acodec <audio codec> -map 0:0 -map 0:1  <output file>
Run Code Online (Sandbox Code Playgroud)

前一个命令行取消选择字幕流(可能是所有字幕流,如果有几个),而后者只选择必要的流来解码.

  • 效果很好!如果你需要简单地从视频文件中删除子文件而不重新编码它,那么这种方法非常快:`ffmpeg -i video.mkv -vcodec copy -acodec copy -sn video-no-subs.mkv` (6认同)

llo*_*gan 10

使用负映射省略字幕并保留其他所有内容:

ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mkv
Run Code Online (Sandbox Code Playgroud)
  • -map 0选择所有流。建议这样做,因为默认流选择行为仅为每种流类型选择 1 个流。
  • -map -0:s是取消选择所有字幕流的负映射。
  • -c copy启用流复制模式,该模式仅重新复用并避免重新编码。


小智 7

要在不重新编码视频和音频的情况下删除字幕流,最短命令是:

ffmpeg -i input.mkv -sn -c copy output.mkv