如何用FFmpeg移除除第一条英语字幕外的所有字幕轨道?
如何用FFmpeg移除除第一条英语字幕外的所有字幕轨道?
我太懂这种对着FFmpeg命令折腾几小时还摸不着头脑的感觉了!别着急,我来帮你搞定这个需求——保留所有视频、只留第一条英语软字幕,删掉其他所有字幕轨道。
首先先明确你的核心需求:
- 保留所有视频轨道
- 移除所有非英语字幕
- 只保留第一条英语字幕(软字幕,不转硬字幕)
正确的FFmpeg命令
直接用这条命令就能实现:
ffmpeg -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:a -map 0:s:m:language:eng:0? -c copy "copy Episode 01 - Yaha-kui zaShunina.mkv"
命令拆解(帮你理解为啥这么写)
-map 0:v:完整保留输入文件(标记为0)的所有视频轨道,完全符合你要保留视频的要求-map 0:a:保留所有音频轨道(你没说要修改音频,所以默认全保留)-map 0:s:m:language:eng:0?:这是关键!s代表字幕轨道,m:language:eng筛选出英语字幕,后面的:0指定只取筛选结果里的第一条,最后的?是容错机制——如果文件里根本没有英语字幕,命令也不会报错终止-c copy:所有轨道直接复制编码,既保证字幕是软字幕(不会被烧进视频里),又能让处理速度飞快
为啥你之前的命令没生效?
你之前的命令里-map 0:s会把所有字幕轨道都带上,再加上-map 0:m:language:eng等于重复添加英语字幕,而且没有指定只保留第一条,所以结果不符合预期。
额外小建议
- 如果你想先确认文件里的轨道情况,可以先跑这条命令:
输出里会列出所有轨道信息,比如ffmpeg -i "Episode 01 - Yaha-kui zaShunina.mkv"Stream #0:2(eng): Subtitle: subrip这样的行,能清楚看到英语字幕的位置,心里更有数。 - 处理前记得备份原文件!毕竟FFmpeg操作是直接生成新文件,但多一份备份总没坏处
- 确保你的FFmpeg是较新版本,旧版本可能不支持
m:language这种筛选语法
备注:内容来源于stack exchange,提问作者Novum Gain
相关产品推荐
相关产品推荐

