AVI-Mux-音频视频不同步-建议使用MP4-ASF
AVI Mux 音频视频不同步 建议使用MP4 ASF
问:
前些天一直在查为什么会产生音视频不同步的现像,下面是查证的数据.
都是使用AVI Mux Filter生成的avi文件。
用GSpot v2.52查看到的文件信息
第1个文件(音视频异步):文件长度正确
OpenDML (AVI v2.0)
第2个文件(音视频同步):OpenDML (AVI v2.0)
Interleave: 34 ms (1.0 v.frames)
Audio frames: Split across interleaves
文件长度正确
Graph图:
第1个文件
file source -> mpeg2 demux -> mpeg2 video decoder -> divx codec -> avi mux -> file write
-> ac3filter -> WMAudio encoder dmo -> (同上)
第2个文件
file source -> mpeg2 demux -> mpeg 2 video decoder -> divx codec -> avi mux -> file write
-> ac2 filter -> MP3 Layer -> (同上)
问题1:为什么使用不同的audio encoder,会产生不同文件信息?(如上述)
问题2:通过使用IConfigAviMux接口的SetOutputCompatibilityIndex(TRUE)仍不见文件信息有所改变(文件大小除外)。
问题3:使用IConfigInterleaving接口的put_mode设置为INTERLEAVE_NONE也不见文件信息有所改(文件大小除外)。
问题4:在生成两个文件时,只是改变了audio encoder,在第2个文件中的Interleave 34 ms 信息是根据什么产生的呢?
想了好些天还是没想出原因来:(
答:
avi mux这个filter的确有很多问题,不只你,很多人都碰到过。因为我很少写avi文件,所以这方面的经验也甚少。我的建议,尽量用asf文件格式去代替avi。asf与avi一样,也是一个文件容器,可以包含任意格式的音视频数据。但asf比avi设计得更完善,而且兼顾了网络流媒体的应用要求。
DirectShow自带了一个ASF Writer filter,但这个filter默认情况下会将输入数据使用Windows Media编码器进行编码。不大好用!你可以使用Windows Media Format SDK自己开发一个ASF Writer。
顺便打一下广告^o^
我的新书《Windows Media编程导向》马上就要出版了。这本书带了两个Filter:ASF Writer Filter和ASF Mux Filter——前者将输入的音视频数据使用Windows Media编码器进行编码后,生成Wmv文件;后者将输入的音视频数据直接按ASF格式打包成ASF文件,适合搂主的应用(不过输入到ASF Mux的Sample都要求打好时间戳!)。
再答:
还有 MP4 Filter