使用FFmpeg添加字幕时部分视频出现重复视频流问题求助
FFmpeg添加字幕时重复视频流问题的解决
问题情况
我有一个video.mkv文件和subtitle.ass字幕文件,计划通过FFmpeg保留原视频自带字幕的同时添加新字幕,但部分视频处理后生成的output.mkv出现了重复视频流的情况,并非所有测试视频都存在该问题。
原使用命令
ffmpeg -i input_video.mkv -i subtitle_path.ass -c:v copy -c:a copy -c:s copy -map 0:v:0 -map 0:m:language:jpn -map 0:s -map 1 -metadata:s:s:3 language=ara -max_interleave_delta 0 -y output_path.mkv
日志关键信息分析
从输出日志的Stream mapping部分可以看到:
Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:0 -> #0:1 (copy) Stream #0:1 -> #0:2 (copy) ...
原视频的视频流(#0:0)被重复映射到了输出的两个视频流中,这就是重复视频流的直接来源。
问题原因
命令中同时使用了-map 0:v:0和-map 0:m:language:jpn:
-map 0:v:0明确指定了原视频的第一条视频流-map 0:m:language:jpn会匹配原视频中所有语言标记为jpn的流,而原视频的视频流恰好也标记了jpn语言,所以这条规则也会选中视频流,导致重复映射
只有当原视频中jpn语言的流仅包含音频时,才不会触发重复问题,这就是为什么部分视频处理正常的原因。
修正后的命令
将语言映射规则限定为仅匹配音频流,避免选中视频流:
ffmpeg -i input_video.mkv -i subtitle_path.ass -c:v copy -c:a copy -c:s copy -map 0:v:0 -map 0:a:m:language:jpn -map 0:s -map 1 -metadata:s:s:3 language=ara -max_interleave_delta 0 -y output_path.mkv
这里把-map 0:m:language:jpn改为-map 0:a:m:language:jpn,明确只筛选jpn语言的音频流,不会再包含视频流。
验证说明
执行修正后的命令后,查看Stream mapping部分,视频流只会被映射一次,输出文件中就不会出现重复的视频流了。
内容的提问来源于stack exchange,提问作者Kirito
相关产品推荐
相关产品推荐

