用Mencoder進行任意視頻格式轉換成flv

Mencoder簡介:

     Mencoder是Mplayer自帶的編碼工具(Mplayer是Linux下的播放器,開源,支持幾乎所有視頻格式的播放,現在有windows和Mac版本)。

Mplayer的獲得與配置:

     Mplayer windows版本下載列表:http://www5.mplayerhq.hu/MPlayer/releases/win32/

     列表中會有版本發佈日期,可以挑選最新的版本,也可以選擇old/去下載老的版本,筆者用的是6月份的版本。下載後解壓到某個文件夾中即可。

     Codecs下載列表:http://www5.mplayerhq.hu/MPlayer/releases/codecs/

     選擇windows-all-********.zip(*表示年月日)下載,將zip包中的文件夾下所有文件,包括*.dll、*.acm、*.ax等等全部copy到Mplayer根目錄下的codecs文件夾中。

     此時最好把Mplayer.exe所在路徑,同時也是Mencoder.exe所在路徑添加到環境變量path中。

     現在可以試試用Mplayer播放視頻,比如有個視頻位於D:/music/APerfectMatch.wmv,那麼可以打開一個cmd窗口,輸入mplayer “D:/music/APerfectMatch.wmv”,感受一下來自Linux的播放器吧,可以通過鍵盤來操縱。

Mencoder轉換視頻格式:

     以將各種格式轉換爲flv格式爲例(flv格式是flash支持的視頻格式):

     mencoder "E:/test.m2p" -o "E:/output.flv" -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:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050

     在命令行中輸入這行代碼(注意:windows的命令行是不支持換行的),按回車運行,一段時間之後就可以得到一個.flv文件,播放一下看看品質如何(可以直接用Mplayer播放)。

     下圖是我這邊轉換的效果對比,左邊是原視頻,右邊是轉換後的視頻:


 
    所有人都會覺得,轉換後品質下降了很多,確實是這樣,同時可以發現轉換後的文件由原來的13M變成了1M,如果要提高品質,可以將vbitrate=500改爲vbitrate=5000。

    轉換後的效果對比,左邊是原視頻,右邊是轉換後的視頻:


 
     品質幾乎一樣了,但同時,轉換文件變成了6M。關於命令中的一些參數,解釋一下:

     -o "E:/output.flv":是輸出文件路徑;

     -of lavf:是輸出文件格式,這裏不是flv而是lavf,是因爲flv屬於libavformat;

     -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames:-lavfopts表示對lavf進行一些設置,設置的內容就是i_certify_that_my_video_stream_does_not_use_b_frames,翻譯成中文就是:我確定,我的視頻不用B frames,對於轉換flv格式,最好加上這個參數,否則可能會報錯,如圖:


     -oac mp3lame:oac=output audio codec,輸出音頻編碼器,這裏用的mp3lame;

     -lameopts abr:br=56:lame options,是專門針對mp3lame的參數設置,abr:br=56,是設置音頻比特率爲56(比特率:每秒鐘輸出的音頻大小,單位kb/s);

-ovc lavc:ovc=output video codec,輸出視頻編碼器,lavc表示one of libavcodec’s video codec,輸出格式爲libavformat之一,編碼器當然也是libavcodec之一啦,至於libavodec裏都有哪些編碼器,可以查看Mplayer的官方文檔;

 

    -lavcoptsvcodec=flv:vbitrate=500:mbd=2:mv0:v4mv:trell:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1:對lavc進行一些設置,詳細介紹如下:

     vcodec=flv:指定視頻編碼器爲flv;

     vbitrate=500:指定視頻比特率爲500,這個參數很重要,vbitrate大了可以讓視頻品質增加,但會讓文件變的很大(可以參考flash8自帶的轉換工具的參數:低品質爲150kb/s,中等品質爲400kb/s,高品質爲700kb/s)。

     mbd:宏模塊選擇算法,值爲0~2默認爲0,值越大轉換越緩慢,但在品質和文件大小方面有好處;

     mv0:編譯每個宏模塊並選擇最好的一個,當mbd=0時無效;

     v4mv:會稍微增加品質,mbd>0時效果更明顯;

     trell:量子化網格搜索,對每8×8block找到最優化編碼;

     cbp:只能和trell一期使用,評估失真的圖像塊編碼;

     last_pred=3:與上一幀相比的移動數量預測,值爲0~99,1~3比較合適,大於3時對品質的提高已經無關緊要,但卻會降低速度;

     dia=4:移動搜索範圍,值爲-99~6,對於快速轉換,-1是個不錯的值,如果不是很重視速度,可以考慮2~4;

     cmp=6:值爲1~2000,默認爲0,設置用於全象素移動預算的比較函數

     vb_strategy=1:對動作很大的場景會有幫助,對有些視頻,設置vmax_b_frames會有損品質,加上vb_strategy=1會好點。

     以上是對-lavcopts的詳細解釋,接下來繼續說明mencoder的參數:

     -vf scale=512:-3:-vf表示視頻格式,scale是縮放,512:-3表示強制將寬度設置爲512,高度寫爲-3表示保持高寬比,也可以設置爲-1或-2,具體表示什麼,有興趣的可以嘗試一下。如果要強制轉化爲統一大小,可以直接寫-vf scale=640:480,但筆者個人建議用-3來保持高寬比。-vf裏還有expand和crop參數,例如:-vf scale=512:384,expand=512:384:::1,crop=512:384:0:0,expand表示膨脹,crop表示裁剪;

     -ofps 12:輸出視頻的幀頻,一般,用於flash播放的視頻幀頻高了沒有沒有意義,反而會增加視頻文件大小,但如果ofps設置的不合適,比如源視頻幀頻不是ofps的整數倍,可能會導致轉換後的視頻、音頻不同步,似乎可以將這一參數改爲-noskip來解決這一問題;   

    -srate 22050:音頻採樣率一般爲22050或44100。

    對於轉換flv格式,lavsopts的設置比較重要,還有很多參數本文沒有涉及到,在筆者參考的文獻中會有具體的說明,感興趣的可以去看一下。我對於Mencoder的認識主要也是來源於下面2篇文章,實踐的比較少,如果有理解和翻譯的失誤,再次歡迎與我交流。

參考文獻:

《Mplayer官方文檔,英文版》http://www.mplayerhq.hu/DOCS/HTML-single/en/MPlayer.html

《Linux Reviews》http://linuxreviews.org/man/mencoder/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章