目录

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