x264是一個開源的H.264視頻編碼器庫。是目前最好的有損視頻編碼器。php
基本用法是html
x264 [options]-o outfile infile
主頁: http://www.videolan.org/developers/x264.htmllinux
目錄[隱藏] |
H.264是ITU(International Telecommunication Unite 國際通訊聯盟)和MPEG(Motion Picture Experts Group 運動圖像專家組)聯合制定的視頻編碼標準。在ITU的標準裏稱爲H.264,在MPEG的標準裏是MPEG-4的一個組成部分:MPEG-4 Part 10,又叫Advanced Video Codec,所以經常稱爲MPEG-4 AVC或直接叫AVC。ide
H.264編碼能實現很是好的壓縮比,有普遍的適用碼率(適於從超低碼率低延遲的電話會議到高碼率的BluRay光盤和HDTV碼流),良好的硬件支持(以PSP、iPod和顯卡DXVA爲表明)和衆多強大的廠商做後盾。工具
有不少人在編譯x264,特別是Win32平臺的編譯版。編碼
咱們下載到的x264.exe是一個命令行工具,不須要安裝,x264.exe須要在命令行裏輸入命令,沒有GUI。spa
不能否認有GUI的工具用來很方便,更容易上手,好比用的最普遍的MeGUI,此外還有ripbot、staxrip等GUI。MeGUI能夠自動更新編碼經常使用的軟件,做爲自動下載的工具卻是不錯。本教程主要講解命令行參數,GUI也是調用同一個x264,所以都用對應的選項。.net
輸入「x264 --help」會顯示幫助信息。命令行
輸入「--longhelp」或「--fullhelp」查看詳細選項或全部的選項。設計
x264.exe的用法是,在命令行裏輸入形如
>x264 [--參數名 參數值 ...] --output 輸出文件 輸入文件
其中方括號裏是可選的,「...」是能夠輸不少個的意思。每一個參數名以前要加「--」,空格後跟此參數名的參數值;必定要有「--output」指定輸出文件;必定要指定輸入文件,但前面沒有「--」之類的提示符號。
此外,還有短參數模式。這是爲了簡化某些經常使用參數名設計的。一個「-」加一個字母構成一個短參數名,和與之對應的普通參數名效果同樣。注意此時這個字母區分大小寫。在--fullhelp列表裏,有短參數的參數其相應的短參數都列在此參數的前面。
實際命令實例:
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o output.mp4 input.avs
調用x264編碼當前目錄下的"input.avs"文件,輸出"output.264"。
若是文件路徑有空格須要加上引號。
在Windows XP和Windows 7中,能夠直接把輸入文件拖拽到cmd裏。
若是用了64位的Windows Vista或Windows 7,就能夠用64位的x264。64位的x264大約能比32位的x264快上10%左右。可是用AviSynth輸入時,64位的x264只接受64位的AviSynth輸入,32位的x264只接受32位的AviSynth。雖然如今有64位的AviSynth和很多經常使用的濾鏡,可是大多數人仍是願意用32位的AviSynth。如何讓64位的x264配合32位的AviSynth呢?
方法是用pipe。用命令行工具(如ffmpeg、mencoder或avs2yuv)打開avs,讓輸出的raw yuv畫面直接輸入給x264,期間不產生中間文件。這個操做也是在命令行裏實現的。
先下載ffmpeg的Windows編譯版(參見FFmpeg(Windows版)),能夠用static link版本。目前ffmpeg在Windows上只有32位的編譯版。和x264同樣,ffmpeg放在任何目錄裏都能運行,假設和x26四、要進行編碼的input.avs放在一個目錄裏。
>ffmpeg -i input.avs -f yuv4mpegpipe -an -v 0 - | x264 [options] --demuxer y4m -o output.264 -
先用ffmpeg打開input.avs,並不指定輸出的文件,而是以「-」代替輸出的文件。後面寫「|」,再寫x264,x264的選項和輸出文件寫法不變,可是輸入文件寫「-」。
mencoder有不少有價值的濾鏡,用起來也很方便。libx264能夠編譯進mencoder自己,和單獨的x264效果同樣。mencoder也能夠打開avs文件,pipe給64位的x264。mplayer-ww的命令行版裏就帶有mencoder。
一樣假設mencoder、x264和要編碼的的input.avs(1280x720)在一個目錄裏。
>mencoder input.avs -vf format=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -
mencoder部分不一樣,x264部分和用ffmpeg時同樣。
avs2yuv原本是爲了給linux上wine來用的,由於AviSynth是運行在Windows的,在linux裏必須wine avs2yuv來打開avs,再pipe給x264。固然也能夠用來pipe給64位的x264。
一樣假設avs2yuv、x264和要編碼的的input.avs在一個目錄裏。
>avs2yuv input.avs - | x264 [options] --demuxer y4m -o output.264 -
avs2yuv的輸出格式默認是yuv4mpeg,x264用y4m格式解碼便可從中讀取分辨率,因此無須再用--input-res指定分辨率。
以上介紹了3種方法,我的比較傾向於用ffmpeg。2pass的編碼也是像上面所講的方法同樣。