Video 如何在ffmpeg中禁用字幕解码
我正在尝试使用FFMpeg将一些包含视频、音频和字幕流的视频文件转换为另一种格式。然而,ffmpeg抱怨字幕格式——它无法解码流。由于我不需要这个字幕流,我想知道如何在转换期间禁用字幕流解码?我终于找到了答案 有这样一个选项,如Video 如何在ffmpeg中禁用字幕解码,video,stream,ffmpeg,video-encoding,subtitle,Video,Stream,Ffmpeg,Video Encoding,Subtitle,我正在尝试使用FFMpeg将一些包含视频、音频和字幕流的视频文件转换为另一种格式。然而,ffmpeg抱怨字幕格式——它无法解码流。由于我不需要这个字幕流,我想知道如何在转换期间禁用字幕流解码?我终于找到了答案 有这样一个选项,如-sn,它禁止从输入流中解码字幕。还有类似的音频和视频解码选项:-an和-vn 事实证明,还有另一种方法可以实现这一点。可以使用-map选项选择要解码的流。因此,省略-map选项中的字幕流就可以了 例如,如果有一个包含3个流的电影文件: 流0:视频 流1:音频 流2:字
-sn
,它禁止从输入流中解码字幕。还有类似的音频和视频解码选项:-an
和-vn
事实证明,还有另一种方法可以实现这一点。可以使用-map
选项选择要解码的流。因此,省略-map
选项中的字幕流就可以了
例如,如果有一个包含3个流的电影文件:
- 流0:视频
- 流1:音频
- 流2:字幕
ffmpeg -i <input file> -sn -vcodec <video codec> -acodec <audio codec> <output file>
ffmpeg-i-sn-vcodec-acodec
或
ffmpeg-i-vcodec-acodec-map 0:0-map 0:1
前一个命令行取消选择字幕流(如果有多个,则可能全部取消选择),而后一个命令行仅选择需要解码的流。要删除字幕流而不重新编码视频和音频,最短的命令是:
ffmpeg-i input.mkv-sn-c copy output.mkv
使用负映射忽略字幕并保留所有其他内容:
ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mkv
选择所有流。建议这样做,因为默认行为仅为每个流类型选择1个流-map 0
是一个负映射,它取消选择所有字幕流-map-0:s
启用仅重新多路复用并避免重新编码的模式-c copy
ffmpeg-i video.mkv-vcodec copy-acodec copy-sn video no subs.mkv
删除字幕也有助于避免多路复用。尽管VLC将一些元数据显示为字幕,但要使用ffmpeg删除这些元数据,您需要-map\u metadata-1
ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mkv