我的專業(yè)跟視頻流媒體略有關(guān)系,所以對視頻壓縮也略知一二。
下面就談?wù)勎覍AVC的個人看法,如有出入,請大家指正。[ ]
談到AVC大家一定不陌生阿,自從有了PSP,我就對AVC開始感興趣了(以前比較注意RMVB)
作為目前最先進(jìn)的視頻編碼之一的AVC已被廣泛應(yīng)用,比如視頻監(jiān)控、HD-DVD、藍(lán)光DVD等。
由此可見,AVC的畫質(zhì)已經(jīng)得到了業(yè)界的公認(rèn)。
那么如何壓制高質(zhì)量的AVC視頻呢?
首先,你需要一個好的編碼器。
目前,得到大家公認(rèn)的高質(zhì)量AVC編碼器有:NERO RECODER 2 (非開源)和X264(開源) .
至于它們那個更優(yōu)秀呢,2004年時(shí),你問我,我會回答是NERO RECODER 2
2005年時(shí),你問我,我會回答是X264
至于現(xiàn)在,我很難理性的回答。我個人更喜歡X264。
這里,我要說明一個問題。
可播放視頻文件大體有三部分組成:視頻流、音頻流、容器。
AVC(高級視頻編碼)這個定名,大約是在H.264列入規(guī)范后的事情(隸屬M(fèi)PEG 4 Part 10)。
也就是說,它只規(guī)范了視頻流的壓縮標(biāo)準(zhǔn)。
AAC(高級音頻編碼)官方制定的音頻流壓縮標(biāo)準(zhǔn)(隸屬M(fèi)PEG 4 Part 2)。
mp4官方制定的標(biāo)準(zhǔn)容器。
由于這些標(biāo)準(zhǔn)不太嚴(yán)格,所以大家都在說的格式一詞也就模糊了。
同樣的AVI文件中可能由 視頻流MPEG4 SP和MP3組成,也有可能是視頻流h.264和音頻流aac.
但大家都習(xí)慣叫做AVI格式的視頻。這是不太規(guī)范的。所以,才有了PMP這種自制格式阿。
那么,PMP-AVC 和HAVC那個更優(yōu)秀呢?
我沒有用過PMP-AVC,所以說不好,但據(jù)說PMP-AVC不支持B禎,這可能導(dǎo)致PMP-AVC不如
HAVC的壓縮率高,質(zhì)量也有一定的影響。
還有關(guān)鍵的一點(diǎn),HAVC僅支持的H.264 的主規(guī)格(Main Profile,向下兼容),而AVC/H.264定義了4種不同的Profile(類):Baseline(基線類), Main(主要類), Extended(擴(kuò)展類)和High Profile(高端類)(它們各自下分成許多個層):
- Baseline Profile 提供I/P幀,僅支持progressive(逐行掃描)和CAVLC - Extended Profile 提供I/P/B/SP/SI幀,僅支持progressive(逐行掃描)和CAVLC - Main Profile 提供I/P/B幀,支持progressive(逐行掃描)和interlaced(隔行掃描),提供CAVLC或CABAC - High Profile (也就是FRExt)在Main Profile基礎(chǔ)上新增:8x8 intra prediction(8x8 幀內(nèi)預(yù)測), custom quant(自定義量化), lossless video coding(無損視頻編碼), 更多的yuv格式(4:4:4...)
至于Main Profile的相關(guān)編碼工具,也就是在我們應(yīng)用MEGUI & X264時(shí)可以使用的有:
CAVLC/CABAC: AVC/H.264定義了2種先進(jìn)的重構(gòu)數(shù)據(jù)流(包括macroblock-type(宏塊), motionvectors(運(yùn)動矢量) + reference-index(參考索引)...)的熵編碼工具,一舉超越MPEG-4 ASP: Context-Adaptive Variable Length Coding(CAVLC/上下文自適應(yīng)變長編碼)和 Context-Adaptive Binary Arithmetic Coding(CABAC/上下文自適應(yīng)二進(jìn)制算術(shù)編碼) CABAC,與AVC/H.264中只是默認(rèn)算法的CAVLC(也叫UVLC)相比,是個壓縮率更強(qiáng)大的算法,據(jù)說能額外降低10-15%的比特率(特別在高碼率)。CABAC(同CAVLC一樣)是一種無損算法,因此不會降低質(zhì)量,但會減緩編碼和解碼速度。
Loop/Deblocking Filter(循環(huán)/去塊濾波器): 與預(yù)處理濾波器(例如通過avisynth作用于輸入端),或后處理濾波器(通過解碼器作用于最終輸出端)相反,循環(huán)濾波器在編碼過程中對每楨進(jìn)行濾波,編碼完成后被用于下一楨的參考。它能消除塊效應(yīng),尤其在低碼率時(shí),但同樣會減緩編碼和解碼速度。
Variable Block Sizes/Macroblock Partitions(塊大小可變/宏塊劃分): 與MPEG-4 ASP(僅Inter4V/4MV能作16x16和8x8塊變換)相比,AVC/H.264把動態(tài)搜尋精度(Motion Search Precision)提高到4x4(包含的步驟有8x4...)。子塊大小是自適應(yīng)/可變的,一個優(yōu)秀的編碼器應(yīng)能對每個宏塊明智地作出最恰當(dāng)?shù)膭澐执笮Q定。
Multiple Reference Frames(多重參考楨): 與MPEG-4 ASP(僅允許當(dāng)前楨的前一楨作為參考楨)相比,AVC/H.264使用幀間搜索方式并提供成倍的參考楨選擇,它意味著AVC/H.264編碼能決定是否只是簡單地參考前一楨或甚至參考比前楨更過去的楨。因此(例如某個P楨能參考最近I楨前的某楨)不得不提出一種新型楨型:IDR楨,是種其后的楨不允許參考其前的楨的I楨。使用多重參考楨會減慢編碼和解碼速度并且可能導(dǎo)致只能在IDR楨剪切。
Rate Distortion Optimisation(RDO/碼率-失真/損耗最佳化): 只要編碼器不得不在眾多選擇中作出絕擇時(shí),RDO允許選擇最有效的編碼方式(例如面臨采用楨間/楨內(nèi)的動態(tài)搜尋的決定...) RDO不是AVC/H.264本身定義的工具,它是第一個由H.264參考軟件引入的工具,可謂一種新的途徑。其他的編碼也能利用RDO,如XviD'的VHQ模式能使用RDO
這是我編寫的MEGUI的命令行(發(fā)揮了所有可用的工具,高畫質(zhì)):
--pass 2 --bitrate 1024 --stats ".stats" --level 2.1 --ref 2 --mixed-refs --bframes 3 --b-rdo --bime --weightb --direct auto --filter -3,-2 --subme 6 --trellis 1 --analyse p8x8,b8x8,i4x4,p4x4 --vbv-maxrate 4000 --me umh --threads auto --thread-input --progress --no-psnr --no-ssim --output "" "" --colormatrix YCgCo --sar 1:1
這里還有說的就是,X264是編碼器,而并非視頻編碼規(guī)范,所以說“x264格式的視頻“是不正確的。
VDM的壓縮方法本身有缺陷,它調(diào)用的X264VFW.DLL本身沒有完全的x264的功能。
目前,我們能利用的X264.EXE(命令行)并非官方放出的,大都來自高手的編譯。官方只提供
源代碼。但質(zhì)量上有保障的,大家不用擔(dān)心,官方承認(rèn)的Unofficial builds for Windows are available from Jarod or Sharktooth.
再說以下,在一用MEGUI時(shí),我們可以不用分離出音頻再進(jìn)行編碼?。?BR> 這是AVS模板:
DirectShowSource("<%InputFile%>",convertfps=true)
#changefps(29.97)
ConvertToYV12()
ResampleAudio(48000)
Sharpen(0.2)
LanczosResize(480,272)
其實(shí)我們沒有必要改變源視頻的FPS,PSP可以正常播放的。還有,AAC音頻應(yīng)當(dāng)是LC級別的。
直接將AVS腳本添加到音頻轉(zhuǎn)換就可。
|