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 http://www.gdcl.co.uk

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值