FFmpeg编码视频添加字幕时-map参数失效问题求助
解决FFmpeg添加外部字幕失败的问题
我来帮你搞定这个字幕添加的问题——你的命令其实只差了关键一步:没有把引入的外部字幕文件(第二个输入源)映射到输出里。
问题根源分析
当你使用-map参数时,FFmpeg会严格遵循你指定的流来生成输出,不会自动包含未被-map指定的任何输入流。你的原命令里只映射了第一个输入(原视频文件)的视频、音频、字幕流,但完全没处理第二个输入(subtitle.ass)的字幕流,所以外部字幕根本没被加入最终的MKV文件。
而当你移除-map参数时,FFmpeg会默认选择所有输入的有效流(原视频的音视频+外部字幕),这就是为什么此时字幕能成功添加。
修改后的命令
只需要在原命令里添加一行-map 1:s?,把外部字幕文件的流映射进去就行。如果需要指定特定音频流(比如你提到的0:a:1),直接替换对应的-map参数即可:
ffmpeg -y -i "C:\Users\Matt\video.mp4" -i "C:\Users\Matt\subtitle.ass" -c:v libx264 -preset medium -crf 37 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -map 0:v? -map_chapters 0 -c:s ass -map 0:s? -map 1:s? -c:a ac3 -b:a 320k -map 0:a:1 -map_metadata 0 "C:\Users\Matt\video.mkv"
关键参数解释
-map 1:s?:这里的1代表第二个输入源(也就是你的字幕文件),s?表示如果该输入有字幕流就映射,没有也不会报错(适合通用场景);如果你确定字幕文件有效,也可以直接写-map 1:s。- 如果你需要指定特定音频流,比如
0:a:1,直接把原命令里的-map 0:a?替换成-map 0:a:1即可,其他参数保持不变。
内容的提问来源于stack exchange,提问作者Matt McManis
相关产品推荐
相关产品推荐

