x264是一個開源的H.264視頻編碼函數(shù)庫。是最好的有損視頻編碼器。主頁: http://www./developers/x264.html 當(dāng)前版本信息:x264 x86 8bit-depth r2197, x64 8bit-depth r2197. Checked 2012-04-25 14:30 GMT
H.264和x264H.264是ITU(International Telecommunication Unite 國際通信聯(lián)盟)和MPEG(Motion Picture Experts Group 運動圖像專家組)聯(lián)合制定的視頻編碼標(biāo)準(zhǔn)。從1999年開始,到2003年形成草案,最后在2007年定稿有待核實。在ITU的標(biāo)準(zhǔn)里稱為H.264,在MPEG的標(biāo)準(zhǔn)里是MPEG-4的一個組成部分--MPEG-4 Part 10,又叫Advanced Video Codec,因此常常稱為MPEG-4 AVC或直接叫AVC。 H.264編碼能實現(xiàn)非常好的壓縮比,有廣泛的適用碼率(適于從超低碼率低延遲的電話會議到高碼率的BluRay光盤和HDTV碼流),良好的硬件支持(以PSP、iPod和顯卡DXVA為代表)和眾多強(qiáng)大的廠商作后盾。 x264始于2003年,從當(dāng)開源社區(qū)的MPEG4-ASP編碼器Xvid小有所成時開始的,經(jīng)過幾年的開發(fā),特別是Dark Shikari加入開發(fā)后,x264逐漸成為了最好的視頻編碼器。 獲取x264x264的主頁上只用git提供源代碼。雖然官方網(wǎng)站不提供編譯好的版本,但是有很多人在編譯x264,特別是Win32平臺的編譯版。
我們一般選擇32位的最新版。 此外,可以關(guān)注由@dgwxx維護(hù)的twitter機(jī)器人@264bot,它每半小時檢查一次更新,報告32bit和64bit版本的更新。 命令行界面的x264我們下載到的x264.exe是一個命令行工具,不需要安裝,隨便放在哪里都能運行。雙擊x264.exe只能看到打開了一個黑色的窗口里在刷著什么,然后就沒了。x264.exe需要在命令行里輸入命令,沒有GUI。 不可否認(rèn)有GUI的工具用來很方便,更容易上手,比如用的最廣泛的[http:// MeGUI],此外還有ripbot、staxrip等GUI。doom9上有[1]都是各種GUI,一一試過來看看自己喜歡什么。MeGUI可以自動更新編碼常用的軟件,作為自動下載的工具倒是不錯。本篇教程主要講解命令行參數(shù),GUI也是調(diào)用同一個x264,因此都用對應(yīng)的選項。 命令行的操作按Win+R鍵調(diào)出運行,輸入cmd,回車,出現(xiàn)黑底白字的窗口和幾行字,其中有 “C:\Document and Settings\User\>”表示當(dāng)前所在的目錄,后面閃的光標(biāo)代表等待輸入內(nèi)容。 圖 假設(shè)x264.exe在E:\Encoder\文件夾,輸入 >cd /D E:\Encoder 回車 圖 改變當(dāng)前目錄到E:\Encoder了。接下來,輸入 >x264 回車 圖
我們看到,如果只運行x264,什么都不提供給他,x264會返回一個錯誤。他告訴我們?nèi)鄙佥斎胛募?,并提示我門輸入“x264 --help”會列出選項。照他說的,加--help試試。 >x264 --help 返回 x264 core:104 r1688M 0b36c6d Syntax: x264 [options] -o outfile infile Infile can be raw (in which case resolution is required), or YUV4MPEG (*.y4m), or Avisynth if compiled with support (no). or libav* formats if compiled with lavf support (no) or ffms support (yes). Outfile type is selected by filename: .264 -> Raw bytestream .mkv -> Matroska .flv -> Flash Video .mp4 -> MP4 Output bit depth: 8 (configured at compile time) Options: -h, --help List basic options --longhelp List more options --fullhelp List all options Example usage: Constant quality mode: x264 --crf 24 -o <output> <input> 中間略... Input/Output: -o, --output Specify output file --sar width:height Specify Sample Aspect Ratio --fps <float|rational> Specify framerate --seek <integer> First frame to encode --frames <integer> Maximum number of frames to encode --level <string> Specify level (as defined by Annex A) --quiet Quiet Mode Filtering: Filter options may be specified in the name=value format --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file Available filters: crop:left,top,right,bottom resize:[width,height][,sar][,fittobox][,csp][,method] select_every:step,offset1[,...]
接著輸入 >x264 --fullhelp 列出了所有選項。 x264.exe的用法是,在命令行里輸入形如 >x264 [--參數(shù)名 參數(shù)值 ...] --output 輸出文件 輸入文件
此外,還有短參數(shù)模式。這是為了簡化某些常用參數(shù)名設(shè)計的。一個“-”加一個字母構(gòu)成一個短參數(shù)名,和與之對應(yīng)的普通參數(shù)名效果一樣。注意此時這個字母區(qū)分大小寫。在--fullhelp列表里,有短參數(shù)的參數(shù)的短參數(shù)都列在此參數(shù)的前面。 實際命令實例: >x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs 調(diào)用x264編碼當(dāng)前目錄下的"ep01.avs"文件,輸入"psp.264"。 >"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi" 這個例子中,x264.exe、和輸入文件都不在當(dāng)前目錄下,也不輸出到當(dāng)前路徑,就要寫完整的路徑,如果有空格就需要在完整的路徑左右加上引號。 在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd會自動把文件的完整路徑寫在命令行上的。 x264的輸入輸出文件類型在加入了ffms/lavf后,x264可以直接輸入幾乎所有類型的片子,而不是像原來一樣必須借助于avs。下面所講的是輸入輸出的片子類型,除此之外的輸入輸出還有多pass中的stats文件、qp file、量化矩陣和tc file。
x264支持輸入的文件類型有raw yuv、y4m、avs和任何可以由ffms或lavf打開的文件。raw yuv會用在64位的x264里。有ffms/lavf打開的片子會自動正確的處理vfr問題。avs和ffms/lavf輸入不需要指定片子的分辨率。
x264可以輸出沒有封裝的H.264視頻流,擴(kuò)展名是.264;matroska視頻,擴(kuò)展名是.mkv;flash視頻,擴(kuò)展名是.flv;mp4視頻,擴(kuò)展名是.mp4。mkv、mp4和flv可以是vfr的。 x264通過輸出文件的擴(kuò)展名判斷輸出文件類型。 x264的preset和tune系統(tǒng)x264的參數(shù)繁多,開發(fā)者為了方便使用者、簡化輸入和提出編碼建議,設(shè)計了一套快速調(diào)用參數(shù)的系統(tǒng)。如果沒有特別的需要,請盡量使用preset和tune系統(tǒng)。這套開發(fā)者推薦的參數(shù)比各種道聽途說的參數(shù)更合理。 在使用了preset和tune以后,依然可以指定里面已經(jīng)有的參數(shù)。手動指定的參數(shù)會覆蓋preset和tune里的參數(shù)。 --preset通過--preset的參數(shù)調(diào)節(jié)編碼速度和質(zhì)量的平衡。 --preset的值有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo。從快到慢,參數(shù)越來越EP。默認(rèn)是medium。 --tune通過--tune的參數(shù)值指定片子的類型,是和視覺優(yōu)化的參數(shù),或有特別的情況。 --tune的值有
碼率控制視頻的碼率直接影響到了片子的編碼質(zhì)量。要想效果好,碼率足夠是最重要的必要條件之一。但是想實現(xiàn)更好的效果和控制文件的體積(碼率)之間始終是一對矛盾。這就需要我們通過實踐,在強(qiáng)大的編碼器的幫助下總結(jié)出合適的碼率,實現(xiàn)盡量好的效果。 x264有4種碼率控制方式,分別是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。 1pass bitrate和qp(恒定量化值)一般不推薦使用。 crf--crf 23 (默認(rèn)) 一種根據(jù)片子質(zhì)量自動分配碼率的vbr碼率控制方式。一遍編碼,如果對碼率沒要求請盡量使用crf模式。 可用的值從1到51,越小編碼質(zhì)量越好,碼率越高。一般使用16到24,可以為浮點。 crf并不是恒定質(zhì)量的方式,同一片子同一crf值,其他參數(shù)不同可能碼率和質(zhì)量能差比較大,不同的片子之間就更沒有可比性了。 2pass bitrate這種方式可以精確的得到想要的平均碼率,2pass代表需要做2次編碼,第一遍編碼x264先分析全片,得到一個stats文件和一個mbtree文件(默認(rèn)使用mbtree)。第二遍編碼以這兩個文件作參考分配合理的碼率。需要特定的碼率(或文件大?。┮欢ㄒ?pass(或多pass)編碼。 除了2pass,還有多pass模式,在之前分析的基礎(chǔ)上再繼續(xù)分析,理論上會使碼率分配更加合理,但實際上2pass已經(jīng)足夠了。 --bitrate 1000 (以1000kbps碼率為例) >x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs >x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs
此外,1pass可以用crf方式跑,而且可以輸出編碼的結(jié)果,也就是說先跑個1pass看看,如果大小和預(yù)想的偏差太多,就再跑個2pass。但由于1pass默認(rèn)用“快速”參數(shù)跑,因此這里的1pass需要加上--slow-firstpass強(qiáng)制x264用我們給的參數(shù)跑。 >x264 --crf 20 --pass 1 --slow-firstpass --tune animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs >x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs
64bit的x264如果用了64位的Windows Vista或Windows 7,就可以用64位的x264。64位的x264大約能比32位的x264快上10%左右,能節(jié)省的時間還是比較可觀的。但是用AviSynth輸入時,64位的x264只接受64位的AviSynth輸入,32位的x264只接受32位的AviSynth。雖然現(xiàn)在有64位的AviSynth和不少常用的濾鏡,但是大多數(shù)人還是愿意用32位的AviSynth。那么如何用讓64位的x264配合32位的AviSynth呢? 方法是用pipe。用命令行工具(如ffmpeg、mencoder或avs2yuv)打開avs,讓輸出的raw yuv畫面直接輸入給x264,期間不產(chǎn)生中間文件。這個操作也是在命令行里實現(xiàn)的。 用ffmpeg輸入先下載ffmpeg的Windows編譯版,可以用static link版本。目前ffmpeg在Windows只有32位的編譯版。和x264一樣,ffmpeg放在任何目錄里都能運行,假設(shè)和x264、要進(jìn)行編碼的input.avs放在一個目錄里。 >ffmpeg -i input.avs -f yuv4mpegpipe -an -v 0 - | x264 [options] --demuxer y4m -o output.264 - 先用ffmpeg打開input.avs,并不指定輸出的文件,而是以“-”代替輸出的文件。后面寫“|”,再寫x264,x264的選項和輸出文件寫法不變,但是輸入文件寫“-”。 用mencoder輸入mencoder有很多有價值的濾鏡,用起來也很方便。libx264可以編譯進(jìn)mencoder本身,和單獨的x264效果一樣。mencoder也可以打開avs文件,pipe給64位的x264。mplayer-ww的命令行版里就帶有mencoder。 同樣假設(shè)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輸入avs2yuv本來是為了給linux上wine來用的,因為AviSynth是運行在Windows的,在linux里必須wine avs2yuv來打開avs,再pipe給x264。當(dāng)然也可以用來pipe給64位的x264。 同樣假設(shè)avs2yuv、x264和要編碼的的input.avs在一個目錄里。 >avs2yuv input.avs - | x264 [options] --demuxer y4m -o output.264 - avs2yuv的輸出格式默認(rèn)是yuv4mpeg,x264用y4m格式解碼即可從中讀取分辨率,所以無須再用--input-res指定分辨率。 以上介紹了3種方法,個人比較傾向于用ffmpeg。2pass的編碼也是像上面所講的方法一樣。 x264壓制的自動化雖然MeGUI等程序?qū)崿F(xiàn)了x264壓制的批量化,但并無法實現(xiàn)crf 1st pass + bitrate 2nd pass的自動2pass,也無法實現(xiàn)1st pass和2nd pass使用不同avs腳本。 為此SAPikachu編寫了Python腳本encx264,實現(xiàn)了以下功能:
下載、討論、反饋請前往論壇討論發(fā)布專用貼。 DXVA參考主條目: DXVA和psp DXVA(DirectX Video Accelaration)通常被稱為硬解,是在Windows上用顯卡解碼H.264等編碼視頻的方式。AMD的顯卡方面,HD2xxx以上的系列都可以DXVA;nVidia的顯卡方面,GeForce8000以上的系列都可以DXVA。 符合一定條件的H.264編碼的片子才能正常的DXVA。由于H.264的復(fù)雜性,用比較老的CPU解碼720p和1080p通常比較吃力,因此720p和1080p的片子能否DXVA常常成為矛盾的焦點。為了讓大多數(shù)人都能正常的看到片子,建議盡量使用能夠DXVA的參數(shù)壓制。 |
|