关键点:抓取时间码
造成这种问题一般是两种情况:一是拍摄设备用的是可变帧率。二是源文件经过剪辑,音频有间隙、重叠、或本来就长度不同。
处理方法有两种:
A方法,先不压制,先把源文件直接混流MKV,然后"C:\MKVToolNix\mkvextract.exe" timecodes_v2 "XXX.mkv" 0:"tc1.txt" 1:"tc2.txt" 抓取视频流和音频流的时间码。然后就可以删除,开始你的正常压制了,完工后混流时,视频流和音频流分别加上那两个时间码。
B方法,原始视频流用FFVideoSource("C:\XXX.XXX",timecodes="1.txt")加载时抓视频时间码,然后C:\ffmpeg\ffmpeg.exe" -i "XXX.XXX" -vn -async 1 "111.wav"用这个先把音频流转成,含间隙或重叠轨的wav文件,再按你的喜好转压。最后混流时,视频流加时间码,音频不加码。