2009-02-15

Mencoder转换RMVB、wmv等视频为FLV的注意事项

经过多日的编码参数测试,最终找到了比较不错的解决方案,趁着这次重写代码的机会,把编码参数也调整下。
原来使用的flv编码参数是这样的:
mencoder -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1:vbitrate=500 -vf scale=320:240 -ofps 12 -srate 22050 /tempvideo/813f77fa8bbd055850d1b84d0e95f7e2.wmv,19:-o /raid/data_post/flvtemp/813f77fa8bbd055850d1b84d0e95f7e2.flv


  如果你阅读过mencoder的手册的话你就会发现这里有些不合理的参数,比如oac指定了mp3lame却有调用的是lameopts。经过稍微的修改之后,我采用的编码参数是这样的:

mencoder -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:last_pred=3:cmp=3:trell:v4mv:cbp:qprd:mv0 -oac mp3lame -lameopts aq=3:preset=64 -vf expand=352::::::,scale=352:-3 -lavdopts er=2 -pp 6 -of lavf -srate 44100 -ofps 12 -mc 0 upload_save_sends/0becb057bd6a1d7f0b72feea8a032c42.avi -o /flvtemp/0becb057bd6a1d7f0b72feea8a032c42.flv


  这样稍微提高了一些视频的品质,但是用的是更多的编码时间来交换的,然而,之前在做桑梓电影的自动转换程序的时候,经过研究,发现,即使是不到1M的码率,使用h.264编码的视频能够达到非常高的清晰度,所以,最佳的解决方案还是尽快利用flash10支持h.264播放的特性更换旧的flv。

在调试参数的过程中。用于在线视频网站的flv有如下两个问题:

  1. rmvb、wmv等视频转换时会有很多的duplicated frame,这种视频经常会造成声音画面不同步,解决方法有两个。一是,保证-ofps 是12,这样一般就能同步,如果还不行使用解决方法二:使用mencoder转换成avi容器的其他编码,再用ffmpeg转换成flv。另外,在2008年12月之后ffmpeg也加入了real video的解码支持,但是暂时还是有一点bug,所以我们等其稳定了之后就可以直接用ffmpeg编码了。
  2. flv视频在播放器上不能拖动,这是由于没有元数据的原因,使用flvtool2或者fixmdi修复一下即可。

没有评论: