如何在C++中使用FFmpeg删除视频中的音频流
实现方法
你可以通过FFmpeg的流复制模式实现,全程不会触发解码/重编码操作,处理速度和本地文件拷贝速度接近。
基础场景:删除所有音频流,仅保留视频流
直接执行以下命令即可:
ffmpeg -i 输入视频路径 -c copy -an 输出视频路径
参数说明:
-c copy:指定所有流直接拷贝原始编码数据,不做编解码处理-an:移除输出文件中的所有音频流
进阶场景:删除指定编号的特定流
如果视频包含多个视频、音频、字幕流,需要精准删除某几个流时,可以按以下步骤操作:
- 首先查看视频的所有流编号,执行命令:
ffprobe 输入视频路径
输出中所有以Stream #0:数字开头的行对应的就是不同流,数字即为流的编号,同时会标注流的类型(视频/音频/字幕等)。
2. 执行流拷贝,仅保留你需要的流即可,比如你要保留编号为0的视频流,删除其他所有流,命令为:
ffmpeg -i 输入视频路径 -c copy -map 0:0 输出视频路径
如果需要保留多个流,添加多个-map参数即可,比如同时保留0号视频流和2号字幕流:
ffmpeg -i 输入视频路径 -c copy -map 0:0 -map 0:2 输出视频路径
注意事项
输出视频的容器格式需要兼容原视频流的编码格式,比如原视频是H.265编码,可直接输出为mp4、mkv等兼容容器,若选择不兼容的容器会触发报错,更换兼容容器即可无需额外调整编码参数。
内容的提问来源于stack exchange,提问作者user15306406
相关产品推荐
相关产品推荐

