FFmpeg编码命令异常问题咨询:字幕显示、音频编码不符预期及默认轨道设置疑问
FFmpeg编码命令异常问题咨询:字幕显示、音频编码不符预期及默认轨道设置疑问
嗨,我来帮你逐个拆解并解决你遇到的FFmpeg编码问题:
问题1:VLC中dvdsub字幕重叠,其他播放器正常
这个情况大概率是VLC对dvdsub位图字幕的渲染逻辑和其他播放器存在差异,再加上转换过程中字幕时长可能有不规范的地方。你可以试试这两个方案:
- 在FFmpeg命令中添加
-fix_sub_duration参数,它会自动修复源字幕中可能存在的时长不匹配问题,很多时候能解决VLC里的字幕重叠; - 如果不是必须用dvdsub格式,建议保留源字幕的软字幕格式(比如SRT/ASS),换成
-c:s copy直接复制字幕,兼容性会好很多,毕竟dvdsub是硬件解码类的字幕,不同播放器的支持度差异较大。
问题2:第二音轨还是Vorbis而非指定的AAC
这里犯了一个常见的小错误:你混淆了源轨道索引和输出轨道索引。
看你的命令:
-map 0:a:0对应输出的第一个音频轨道(索引a:0),你用-c:a:0 aac是对的;-map 0:a:2是输出的第二个音频轨道(索引a:1),但你写的是-c:a:2 aac——这个索引是源轨道的索引,不是输出的!FFmpeg找不到输出的a:2轨道,所以就默认直接复制了源轨道的Vorbis编码。
修正方法:把第二个音频的编码参数改成 -c:a:1 aac,对应输出的第二个音频轨道,这样就能强制转成AAC了。
问题3:如何设置默认轨道
使用FFmpeg的 -disposition 参数来指定默认轨道,格式是 -disposition:[类型]:[索引] [属性],常用属性有 default(默认)和 none(非默认)。
比如你的需求:
- 让德语音频(输出的
a:0)成为默认音频:添加-disposition:a:0 default; - 让英语音频(输出的
a:1)非默认:添加-disposition:a:1 none; - 如果要设置默认字幕,比如第一个字幕轨道:添加
-disposition:s:0 default,其他字幕轨道设为none即可。
修正后的完整命令示例
ffmpeg -i 1.mkv -threads 12 -aspect 16:9 -c:v libx265 -tune grain -x265-params crf=23 -filter:v "crop=in_w-0-0:in_h-20-19:0:20" -fix_sub_duration \ -map 0:v -metadata:s:v:0 language="ger" -metadata:s:v:0 title="xy" -disposition:v:0 default \ -map 0:a:0 -c:a:0 aac -b:a:0 225k -ac:a:0 6 -metadata:s:a:0 language="ger" -metadata:s:a:0 title="Surround 5.1" -disposition:a:0 default \ -map 0:a:2 -c:a:1 aac -b:a:1 225k -ac:a:1 6 -metadata:s:a:1 language="eng" -metadata:s:a:1 title="Surround 5.1" -disposition:a:1 none \ -map 0:s -c:s dvdsub -disposition:s:0 default \ 2.mkv
(注:这里根据常规需求设置了视频、德语音频、第一个字幕为默认,你可以根据自己的实际需求调整-disposition的参数)
备注:内容来源于stack exchange,提问作者user1785937
相关产品推荐
相关产品推荐

