用 FFmpeg 设置视频默认字幕的核心是通过 -disposition:s 参数标记目标字幕为「默认」,配合 -map 精准选择字幕流,且能通过 -c copy 实现无损操作(不重新编码,速度极快)。以下是分步实操教程,覆盖所有常见场景:
第一步:先查字幕流信息(必做!)
首先要确定视频中字幕的序号(FFmpeg 中流序号从 0 开始),执行命令:
ffmpeg -i "你的视频文件.mp4" # 替换为实际路径,如 D:\movie.mkv
关键输出示例(重点看 Subtitle 行):
Stream #0:0: Video: h264 (Main)
Stream #0:1: Audio: aac (LC)
Stream #0:2: Subtitle: srt # 字幕1(序号2)
Stream #0:3: Subtitle: ass (default) # 字幕2(序号3,原默认)
记下:
- 要设为默认的字幕序号(比如想把序号2的字幕设为默认);
- 原默认字幕序号(比如序号3)。
第二步:核心命令(无损设置默认字幕)
通用模板(直接替换括号内容)
ffmpeg -i "输入视频.mp4" -map 0 -c copy -disposition:s:[目标序号] default -disposition:s:[原默认序号] 0 -y "输出视频.mp4"
| 参数 | 作用 |
-map 0 | 保留视频中所有流(视频、音频、所有字幕),不丢失内容 |
-c copy | 无损复制流,不重新编码,操作速度极快(几秒完成) |
-disposition:s:N default | 将序号 N 的字幕标记为默认 |
-disposition:s:M 0 | 取消序号 M 的字幕的默认标记(避免多个默认字幕冲突) |
-y | 自动覆盖输出文件,无需手动确认 |
第三步:常见场景示例(直接复制用)
场景1:视频只有1条字幕,设为默认
ffmpeg -i "input.mp4" -map 0 -c copy -disposition:s:0 default -y "output.mp4"
(只有1条字幕时,无需取消其他默认标记)
场景2:视频有2条字幕,把第2条(序号1)设为默认
假设原默认是第1条(序号0),修改为第2条:
ffmpeg -i "movie.mkv" -map 0 -c copy -disposition:s:1 default -disposition:s:0 0 -y "movie_default_sub.mkv"
场景3:只保留视频+目标字幕,且设为默认(精简体积)
比如只保留视频流和第3条字幕(序号2),并设为默认:
ffmpeg -i "input.mp4" -map 0:v -map 0:s:2 -c copy -disposition:s:0 default -y "output_light.mp4"
-map 0:v:仅保留视频流;-map 0:s:2:仅保留序号2的字幕流。
场景4:添加新字幕并设为默认
如果视频原本无字幕,先添加外部字幕(如 srt 格式),再设为默认:
ffmpeg -i "video.mp4" -i "sub.srt" -map 0 -map 1 -c copy -disposition:s:1 default -y "video_with_default_sub.mp4"
第四步:验证设置是否成功
执行以下命令,查看目标字幕行是否标注 (default):
ffmpeg -i "输出视频.mp4"
成功示例:
Stream #0:2: Subtitle: srt (default) # 目标字幕已标记为默认
避坑注意事项
- 仅支持软字幕:默认字幕标记仅对「软字幕」(srt/ass/ssa 等外挂字幕)有效;硬字幕(已嵌入视频画面)无法设置默认(本质是视频画面的一部分)。
- 容器兼容性:MP4、MKV、MOV 等主流容器支持默认字幕标记;老旧格式(如 FLV、AVI)不支持。
- 序号错误排查:若报错「Invalid stream index」,重新执行
ffmpeg -i 视频文件核对字幕序号(序号从 0 开始,不是 1)。 - 多语言字幕优先级:部分播放器(如 PotPlayer)会优先识别
default标记,若需同时设置「强制字幕」,可加-disposition:s:N forced。
非命令行替代工具(可视化操作)
若嫌命令行麻烦,推荐免费工具:
- MKVToolNix(MKV 格式首选):打开视频 → 选中目标字幕 → 勾选「默认轨道」→ 混流即可;

评论列表 (0条):
加载更多评论 Loading...