x264

x264

ITU和MPEG聯合制定的視頻編碼标準
X264是ITU(International-Telecommunication-Unite——國際通信聯盟)和MPEG(Motion-Picture-Experts-Group——運動圖像專家組)聯合制定的視頻編碼标準。x264的主要功能在于進行H.264/MPEG-4-AVC的視頻編碼,而不是作為解碼器(decoder)之用。x264有4種碼率控制方式,分别是1pass-bitrate、crf、qp和2passbitrate。x264支持輸入的文件類型有raw-yuv、y4m、avs和任何可以由ffms或lavf打開的文件。x264的參數繁多,開發者為了方便使用者、簡化輸入和提出編碼建議,設計了一套快速調用參數的系統。[1]
    中文名:x264 外文名:Advanced Video Codec 别名: 日期:1999年 優點:壓縮比

H.264和x264

H.264是ITU(International-Telecommunication-Unite-國際通信聯盟)和MPEG(Motion-Picture-Experts-Group-運動圖像專家組)聯合制定的視頻編碼标準。從1999年開始,到2003年形成草案,最後在2007年定稿有待核實。在ITU的标準裡稱為H.264,在MPEG的标準裡是MPEG-4的一個組成部分--MPEG-4-Part-10,又叫Advanced-Video-Codec,因此常常稱為MPEG-4-AVC或直接叫AVC。

H.264編碼能實現非常好的壓縮比,有廣泛的适用碼率(适于從超低碼率低延遲的電話會議到高碼率的bluray光盤和HDTV碼流),良好的硬件支持(以PSP、iPod和顯卡dxva為代表)和衆多強大的廠商作後盾。

x264始于2003年,從當開源社區的MPEG4-ASP編碼器Xvid小有所成時開始的,經過幾年的開發,特别是Dark-Shikari加入開發後,x264逐漸成為了最好的視頻編碼器。

性價比

理論知識,我估計很多人也不喜歡看,直接說結論。

同樣的片源、碼率、編碼器默認設置下,用x264編碼出的視頻(一般是mkv或者mp4格式)一定會比rmvb畫質更好(264高級參數發揮的作用)。還有請扔掉“mkv版一定會很大,rmvb一定會很小”的錯誤觀念,一般來說用于收藏的mkv版才會很大!

接上補充-x264是一種編碼方式-而RMVB是一種封裝格式完全沒有可比性-常見的編碼方式和封裝格式有

h263:FLV

x264:MP4/MKV/F4V

R10/R9/R40:RMVB/RM

XVID/DIVX:AVI

如果對結論有所懷疑,可以自行做實驗對比,但是必須保證條件公平,即輸入編碼器的視頻(片源)必須相同,對畫面所做的處理必須相同(也就是不可以一個銳化一個不銳化這樣的),輸出的視頻的碼率必須相同或者相差極小。因為要對比的是x264與編碼rmvb的軟件,對照實驗應該盡可能排除其他因素的幹擾

主要特點

■-8x8與4x4自适應空間域轉換

■-自适應B幀選擇

■-B幀可作為參考幀/自由的幀順序

■-CAVLC/CABAC熵編碼

■-自定義精确的矩陣模闆

■-I幀:所有宏塊格式(16x16,-8x8,-4x4,-以及有全部預測的PCM)

■-P幀:所有的分割塊(從16x16到4x4)

■-B幀:分割塊從16x16到8x8(包括skip/direct)

■-隔行掃描(MBAFF)

■-多個參考幀

■-碼率控制:固定量化,固定質量,一次或者多次編碼的平均碼率,可選的VBV參數

■-場景變換檢測

■-B幀時間域、空間域direct模式自适應選擇

■-可在多個CPU平行編碼

■-預測性的無損編碼(x264似乎也是所有基于H.264标準的編碼器中唯一實現這項的)

■-心理視覺優化,保留更多的細節(自适應量化,psy-RD,psy-trellis)

■-可用于手動調整碼率分配的zones參數

使用介紹

命令行界面的x264

我們下載到的x264.exe是一個命令行工具,不需要安裝,随便放在哪裡都能運行。雙擊x264.exe隻能看到打開了一個黑色的窗口裡在刷着什麼,然後就沒了。x264.exe需要在命令行裡輸入命令,沒有GUI。

不可否認有GUI的工具用來很方便,更容易上手,比如用的最廣泛的MeGUI,此外還有ripbot、staxrip等GUI。doom9上有都是各種GUI,一一試過來看看自己喜歡什麼。MeGUI可以自動更新編碼常用的軟件,作為自動下載的工具倒是不錯。本文主要講解命令行參數,GUI也是調用同一個x264,因此都用對應的選項。

基本用法

x264.exe的用法是,在命令行裡輸入形如

>x264-[--參數名-參數值-...]---output-輸出文件-輸入文件

其中方括号裡是可輸入可不輸入的,“...”是可以輸很多個的意思。觀察這個形式,每個參數名之前要加“--”,空格後跟此參數名的參數值;一定要有“--output”并指定輸出文件;一定要指定輸入文件,但前面沒有“--”之類的提示符号。

此外,還有短參數模式。這是為了簡化某些常用參數名設計的。一個“-”加一個字母構成一個短參數名,和與之對應的普通參數名效果一樣。注意此時這個字母區分大小寫。

要查看x264的幫助,輸入x264---help。輸入x264---longhelp查看更詳細的幫助,--fullhelp是查看全部幫助

實際命令實例:

>x264---crf-22---profile-main---tune-animation---preset-medium---b-pyramid-none--o-psp.264-ep01.avs

調用x264編碼當前目錄下的"ep01.avs"文件,輸出"psp.264"。

>"D:encoder-toolsx264.exe"---crf-18---tune-touhou---preset-slower--I-24--o-"D:touhouout.mkv"-"D:touhouth9rec.avi"

這個例子中,x264.exe、和輸入文件都不在當前目錄下,也不輸出到當前路徑,就要寫完整的路徑,如果有空格就需要在完整的路徑左右加上引号。

在Windows-XP和Windows-7中,把文件拖拽到cmd裡,cmd會自動把文件的完整路徑寫在命令行上的。

輸入輸出文件類型

在加入了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視頻流,擴展名是.264;matroska視頻,擴展名是.mkv;flash視頻,擴展名是.flv;mp4視頻,擴展名是.mp4。mkv、mp4和flv可以是vfr的。

x264通過輸出文件的擴展名判斷輸出文件類型。

preset和tune系統

x264的參數繁多,開發者為了方便使用者、簡化輸入和提出編碼建議,設計了一套快速調用參數的系統。如果沒有特别的需要,請盡量使用preset和tune系統。這套開發者推薦的參數比各種道聽途說的參數更合理。

在使用了preset和tune以後,依然可以指定裡面已經有的參數。手動指定的參數會複蓋preset和tune裡的參數。

--preset

通過--preset的參數調節編碼速度和質量的平衡。

--preset的值有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo。從快到慢,參數越來越EP。默認是medium。

--tune

通過--tune的參數值指定片子的類型,是和視覺優化的參數,或有特别的情況。

--tune的值有

film:電影、真人類型;

animation:動畫;

grain:需要保留大量的grain時用;

stillimage:靜态圖像編碼時使用;

psnr:為提高psnr做了優化的參數;

ssim:為提高ssim做了優化的參數;

fastdecode:可以快速解碼的參數;

zerolatency:零延遲,用在需要非常低的延遲的情況下,比如電視電話會議的編碼。

碼率控制

視頻的碼率直接影響到了片子的編碼質量。要想效果好,碼率足夠是最重要的必要條件之一。但是想實現更好的效果和控制文件的體積(碼率)之間始終是一對矛盾。這就需要我們通過實踐,在強大的編碼器的幫助下總結出合适的碼率,實現盡量好的效果。

x264有4種碼率控制方式,分别是1pass-bitrate、crf、qp和2passbitrate。其中2pass-bitrate包含npass-bitrate。

1pass-bitrate和qp(恒定量化值)一般不推薦使用。

crf

--crf-23-(默認)

一種根據片子質量自動分配碼率的vbr碼率控制方式。一遍編碼,如果對碼率沒要求請盡量使用crf模式。

可用的值從1到51,越小編碼質量越好,碼率越高。一般使用16到24,可以為浮點。

crf并不是恒定質量的方式,同一片子同一crf值,其他參數不同可能碼率和質量能差比較大,不同的片子之間就更沒有可比性了。

2pass-bitrate

這種方式可以精确的得到想要的平均碼率,2pass代表需要做2次編碼,第一遍編碼x264先分析全片,得到一個stats文件和一個mbtree文件(默認使用mbtree)。第二遍編碼以這兩個文件作參考分配合理的碼率。需要特定的碼率(或文件大小)一定要用2pass(或多pass)編碼。

除了2pass,還有多pass模式,在之前分析的基礎上再繼續分析,理論上會使碼率分配更加合理,但實際上2pass已經足夠了。

--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跑完之後再輸入第二行跑2pass。1pass主要為了得到1pass.stats和1pass.stats.mbtree兩個文件,2pass需要這兩個文件已完成最後的編碼,最後輸出文件。

默認情況下,1pass是以“快速”參數跑的,而不是以指定的參數跑。因此一般1pass會比2pass的速度快上很多。而這裡1pass指定輸出的文件名是NUL,在Windows裡,這個文件名是保留的,因此不會有任何輸出的已編碼的文件。

盡量讓1pass和2pass的視頻一緻,如果改變了視頻,分析的結果就會變得比較不準确。

此外,1pass可以用crf方式跑,而且可以輸出編碼的結果,也就是說先跑個1pass看看,如果大小和預想的偏差太多,就再跑個2pass。但由于1pass默認用“快速”參數跑,因此這裡的1pass需要加上--slow-firstpass強制x264用我們給的參數跑。

>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

1pass會輸出3個文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前兩個是分析文件,後一個是編碼的結果。如果對編碼結果不滿意,則繼續用分析的結果跑2pass。

2pass必須用bitrate模式跑,不能用crf跑。

DXVA

DXVA(DirectX-Video-Accelaration)通常被稱為硬解,是在Windows上用顯卡解碼H.264等編碼視頻的方式。AMD的顯卡方面,HD2xxx以上的系列都可以DXVA;nVidia的顯卡方面,GeForce8000以上的系列都可以DXVA。

符合一定條件的H.264編碼的片子才能正常的DXVA。由于H.264的複雜性,用比較老的CPU解碼720p和1080p通常比較吃力,因此720p和1080p的片子能否DXVA常常成為矛盾的焦點。為了讓大多數人都能正常的看到片子,建議盡量使用能夠DXVA的參數壓制。

編碼開發作者

x264-Team-成員:

Laurent-Aimar

Loren-Merritt

Eric-Petit-(OS-X)

Min-Chen-(vfw/asm)

Justin-Clay-(vfw)

Måns-Rullgård

Radek-Czyz

Christian-Heine-(asm)

Alex-Izvorski

Alex-Wright

獲得獎項

2005年-赢得Doom9's-2005-codec-shoot-out獎項

2006年-在第3屆MSU-MPEG-4-AVC/H.264視頻編碼比賽中獲獎

2007年-在第4屆MSU-MPEG-4-AVC/H.264視頻編碼比賽中獲獎

相關詞條

相關搜索

其它詞條