这个的确是bug,ffmpeg现在还不支持以VFW形式存储在mkv里的视频流
需要解释一下,视频流在mkv里有两种存储方式(当初的设计者真蛋疼)
第一种是原生的流方式,ID是像V_MPEG4/ISO/AVC这样的。每一帧的时间戳是它的PTS。
第二种是VFW的方式,ID是V_MS/VFW/FOURCC,后面再跟上avi里所用的fourcc。每一帧的时间戳是DTS,或者说是其在avi中的位置。
AVC和ASP用两种方式存储都可以,如果在MediaInfo里看,codec id是V_MPEG4/ISO/ASP就是第一种,XVID/DX50/DIVX这类的就是第二种。AVC一般都是第一种,mmg会自动把第二种变成第一种。但ASP一般都是第二种,因为大部分都是从avi来的,mmg不会自动变,必须加上--engage native_mpeg4才会变成第一种。
ffmpeg的vcodec copy无法根据dts来生成pts,因为这个需要解析码流。而mp4需要dts和pts都存在,所以会出错或者生成错误的文件。同样,ffmpeg也无法在两种形式间转换,所以只要有b帧存在,以下的格式转换不支持:
raw bitstream,avi或vfw型的mkv -> 普通mkv,mp4,flv
好吧,说了一大堆废话,无视我吧