当前位置:首页 > 开发 > FFmpeg > 正文内容

在 .mp4 文件中移除软字幕

FFmpeg3天前


要从 .mp4 文件中移除软字幕,核心方法是使用 FFmpeg 的 流映射(Stream Mapping) 功能,在不重新编码视频和音频的前提下,将它们“复制”到新文件,同时排除字幕流。这种方法速度快且无损。

方法一:移除所有字幕流(最常用)

这是最简单直接的命令,会保留所有视频和音频流,同时丢弃所有类型的字幕流。

ffmpeg -i input.mp4 -map 0 -sn -c copy output.mp4

参数解释:

  • -i input.mp4:指定输入文件。

  • -map 0:选择输入文件中的所有流(视频、音频、字幕等)。

  • -sn:禁用字幕流的自动选择,这是移除所有字幕的关键。

  • -c copy:流复制模式,不对视频和音频进行重新编码,保证质量无损且处理速度快。

  • output.mp4:输出文件名。

方法二:使用负映射(Negative Mapping)精确排除

如果你希望更精确地控制,可以使用负映射语法 -map -0:s 来显式排除所有字幕流。

ffmpeg -i input.mp4 -map 0 -map -0:s -c copy output.mp4
  • -map -0:s:前面的 - 表示排除。这条命令的意思是“选择所有流,但排除字幕流”。

方法三:仅移除特定的字幕流

如果文件包含多条字幕(如中、英双语),而你只想移除其中一条,需要先确定其索引。

1. 查看字幕流信息

使用 ffprobe 或 ffmpeg -i 查看文件内的流信息。

ffprobe -v error -show_entries stream=index,codec_type:stream_tags=language -of csv=p=0 input.mp4

输出结果中,codec_type 为 subtitle 的即为字幕流,index 是它的全局索引。

2. 移除指定索引的字幕流

假设你想移除索引为 2 的字幕流,而保留其他所有流,可以使用以下命令:

ffmpeg -i input.mp4 -map 0 -map -0:2 -c copy output.mp4

这里 -0:2 表示排除全局索引为 2 的流。

或者,如果你知道它在字幕流中的相对位置(比如第 2 条字幕,索引从 0 开始算作 s:1),也可以这样写:

ffmpeg -i input.mp4 -map 0 -map -0:s:1 -c copy output.mp4

这条命令会排除第 2 条字幕流(s:1),保留第 1 条(s:0)及其他所有流。

验证结果

处理完成后,可以再次用 ffprobe 检查输出文件,确认字幕流已消失:

ffprobe -v error -select_streams s -show_entries stream=index -of csv=p=0 output.mp4

如果命令没有输出任何内容,说明文件中已不包含字幕流。

重要提示:区分软字幕与硬字幕/闭路字幕

  • 软字幕 (Soft Subtitles):本回答主要针对的就是这种字幕,它们是独立的字幕流,可以自由开关和移除。

  • 硬字幕 (Hard Subtitles):也被称为“内嵌字幕”,是直接“烧录”在视频画面像素上的文字。FFmpeg 无法通过上述命令将其移除,只能通过裁剪画面或添加模糊遮罩的方式来遮盖,但这会导致视频被重新编码。

  • 闭路字幕 (Closed Captions, CC):这类字幕有时以 SEI 消息的形式嵌入在视频流内部,并非独立的字幕流。移除它们需要使用比特流过滤器(bitstream filter),例如:

    ffmpeg -i input.mp4 -c copy -map 0 -bsf:v filter_units=remove_types=6 output.mp4

         此例适用于 H.264 视频。

转载请注明出处。

本文链接:http://pythonopen.com/?id=7965

相关文章

使用FFmpeg混流MP4和MP3

1. 裁剪为最短时长ffmpeg -i input_video.mp4 ...

FFmpeg [mp4 @ 0000013d42a009c0]

[mp4 @ 0000013d42a009c0] Could ...

FFmpeg 分割视频时抛弃音频

FFmpeg分割视频时抛弃音频的方法一、通过流选择参数精准保留视频ffmpeg -i&nb...

FFmpeg 合并视频时抛弃音频

在使用FFmpeg合并视频并抛弃音频时,可根据输入文件的编码一致性选择以下两种方法:方法1:conc...

FFmpeg 图片合成视频,并添加音频

使用FFmpeg将图片合成视频并添加音频你可以使用以下 ffmpeg 命令行将图片序列合成视频并添加...

FFmpeg 图片合成视频

FFmpeg图片合成视频命令(15fps)ffmpeg -framerate 1...