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/