https://www.nmm-hd.org/d/api.php?action=feedcontributions&user=Lititude&feedformat=atom
NMM Doc - 用户贡献 [zh]
2024-03-28T22:10:32Z
用户贡献
MediaWiki 1.36.1
https://www.nmm-hd.org/d/index.php?title=X264%E8%A8%AD%E5%AE%9A&diff=790
X264設定
2011-02-27T13:58:18Z
<p>Lititude:添加命令行参考站内链接</p>
<hr />
<div>{{TOCright}}<br />
本頁說明所有x264參數之目的和用法。參數的排列相同於在<code>x264 --fullhelp</code>出現的順序。<br />
<br />
參閱:[[X264統計資料輸出]]、[[X264統計資料檔案]]和[[X264編碼建議]]。<br />
<br />
=x264設定=<br />
==說明==<br />
x264帶有一些內置的文件。要閱讀此說明,執行<code>x264 --help</code>、<code>x264 --longhelp</code>或<code>x264 --fullhelp</code>。越後面的選項會提供越詳細的資訊。每条选项的具体命令行帮助界面正在开发中。<br />
<br />
==輸入==<br />
以一個位置引數指定輸入的視訊。例如:<br />
x264.exe {{x|output}} NUL C:\input.avs<br />
x264 {{x|output}} /dev/null ~/input.y4m<br />
當輸入是raw YUV格式時,還必須告知x264視訊的解析度。你可能也要使用{{x|fps}}來指定幀率:<br />
x264.exe {{x|output}} NUL {{x|fps}} 25 {{x|input-res}} 1280x720 D:\input.yuv <br />
x264 {{x|output}} /dev/null {{x|fps}} 30000/1001 {{x|input-res}} 640x480 ~/input.yuv<br />
<br />
详细的命令行使用方法参见[[X264使用介绍]]<br />
<br />
==預設==<br />
為了減少使用者花費時間和精力在命令列上而設計的一套系統。這些設定切換了哪些選項可以從<code>x264 --fullhelp</code>的說明裡得知。<br />
<br />
===profile===<br />
'''預設值:無'''<br />
<br />
限制輸出資料流的profile。如果指定了profile,它會覆寫所有其他的設定。所以如果指定了profile,將會保證得到一個相容的資料流。如果設了此選項,將會無法使用無失真(lossless)編碼({{x|qp}}<code> 0</code>或{{x|crf}}<code> 0</code>)。<br />
<br />
如果播放設備僅支援某個profile,則應該設此選項。大多數解碼器都支援High profile,所以沒有設定的必要。<br />
<br />
可用的值:<code>baseline, main, high</code><br />
<br />
===preset===<br />
'''預設值:medium'''<br />
<br />
變更選項,以權衡壓縮效率和編碼速度。如果指定了預設,變更的選項將會在套用所有其他的參數前套用。<br />
<br />
通常應該將此設為所能忍受的最慢一個選項。<br />
<br />
可用的值:<code>ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo</code><br />
<br />
===tune===<br />
'''預設值:無'''<br />
<br />
調整選項,以進一步最佳化為視訊的內容。如果指定了tune,變更的選項將會在{{x|preset}}之後,但所有其他的參數之前套用。<br />
<br />
如果視訊的內容符合其中一個可用的調整值,則可以使用此選項,否則不要使用。<br />
<br />
可用的值:<code>film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency</code><br />
<br />
===slow-firstpass===<br />
'''預設值:無'''<br />
<br />
使用{{x|pass}}<code> 1</code>會在解析命令列的最後套用以下設定:<br />
* {{x|ref}}<code> 1</code><br />
* {{x|no-8x8dct}}<br />
* {{x|partitions}}<code> i4x4</code> (如果最初有啟用,否則為無)<br />
* {{x|me}}<code> dia</code><br />
* {{x|subme}} MIN(2, subme)<br />
* {{x|trellis}}<code> 0</code><br />
<br />
可以使用{{x|slow-firstpass}}來停用此功能。注意,使用{{x|preset}}<code> placebo</code>也會啟用slow-firstpass。<br />
<br />
'''參閱:'''{{x|pass}}<br />
<br />
==幀類型選項==<br />
===keyint===<br />
'''預設值:250'''<br />
<br />
設定x264輸出的資料流之最大IDR幀(亦稱為關鍵幀)間隔。可以指定<code>infinite</code>讓x264永遠不要插入非場景變更的IDR幀。<br />
<br />
IDR幀是資料流的“分隔符號”,所有幀都無法從IDR幀的另一邊參照資料。因此,IDR幀也是I幀,所以它們不從任何其他幀參照資料。這意味著它們可以用作視訊的搜尋點(seek points)。<br />
<br />
注意,I幀通常明顯大於P/B幀(在低動態場景通常為10倍大或更多),所以當它們與極低的VBV設定合併使用時會打亂速率控制。在這些情況下,研究{{x|intra-refresh}}。<br />
<br />
預設值對於大多數視訊沒啥問題。在為藍光、廣播、即時資料流或某些其他特殊情況編碼時,可能需要更小的GOP長度(通常等於幀率)。<br />
<br />
'''參閱:'''{{x|min-keyint}}, {{x|scenecut}}, {{x|intra-refresh}}<br />
<br />
===min-keyint===<br />
'''預設值:自動 (MIN({{x|keyint}} / 10, {{x|fps}}))'''<br />
<br />
設定IDR幀之間的最小長度。<br />
<br />
IDR幀的說明可以參閱{{x|keyint}}。過小的keyint範圍會導致“不正確的”IDR幀位置(例如閃屏場景)。此選項限制在每個IDR幀之後,要有多少幀才可以再有另一個IDR幀的最小長度。<br />
<br />
min-keyint的最大允許值是{{x|keyint}}/2+1。<br />
<br />
'''建議:'''預設值,或者等於幀率<br />
<br />
'''參閱:'''{{x|keyint}}, {{x|scenecut}}<br />
<br />
===no-scenecut===<br />
'''預設值:無'''<br />
<br />
完全停用彈性I幀決策(adaptive I-frame decision)。<br />
<br />
'''參閱:'''{{x|scenecut}}<br />
<br />
===scenecut===<br />
'''預設值:40'''<br />
<br />
設定I/IDR幀位置的閾值(場景變更偵測)。<br />
<br />
x264為每一幀計算一個度量值,來估計與前一幀的不同程度。如果該值低於scenecut,則算偵測到一個“場景變更”。如果此時與最近一個IDR幀的距離低於{{x|min-keyint}},則放置一個I幀,否則放置一個IDR幀。越大的scenecut值會增加偵測到場景變更的數目。場景變更是如何比較的詳細資訊可以參閱[http://forum.doom9.org/showthread.php?t=121116 http://forum.doom9.org/showthread.php?t=121116]。<br />
<br />
將scenecut設為0相當於設定{{x|no-scenecut}}。<br />
<br />
'''建議:'''預設值<br />
<br />
'''參閱:'''{{x|keyint}}, {{x|min-keyint}}, {{x|no-scenecut}}<br />
<br />
===intra-refresh===<br />
'''預設值:無'''<br />
<br />
停用IDR幀,作為替代x264會為每隔{{x|keyint}}的幀的每個巨集區塊(macroblock)使用內部編碼(intra coding)。區塊是以一個水平捲動的行刷新,稱為刷新波(refresh wave)。這有利於低延遲的資料流,使它有可能比標準的IDR幀達到更加固定的幀大小。它也增強了視訊資料流對封包遺失的恢復能力。此選項會降低壓縮效率,因此必要時才使用。<br />
<br />
有趣的事:<br />
* 第一幀仍然是IDR幀。<br />
* 內部區塊(Intra-blocks)僅處於P幀裡,刷新波在一或多個B幀後的第一個P幀更廣泛。<br />
* 壓縮效率的損失主要來自於在刷新波上左側(新)的巨集區塊無法參照右側(舊)的資料。<br />
<br />
===bframes===<br />
'''預設值:3'''<br />
<br />
設定x264可以使用的最大並行B幀數。<br />
<br />
沒有B幀時,一個典型的x264資料流有著像這樣的幀類型:IPPPPP...PI。當設了<code>--bframes 2</code>時,最多兩個連續的P幀可以被B幀取代,就像:IBPBBPBPPPB...PI。<br />
<br />
B幀類似於P幀,除了B幀還能從它之後的幀做動態預測(motion prediction)。就壓縮比來說效率會大幅提高。它們的平均品質是由{{x|pbratio}}所控制。<br />
<br />
有趣的事:<br />
* x264還區分兩種不同種類的B幀。"B"是代表一個被其他幀作為參照幀的B幀(參閱{{x|b-pyramid}}),而"b"則代表一個不被其他幀作為參照幀的B幀。如果看到一段混合的"B"和"b",原因通常與上述有關。當差別並不重要時,通常就以"B"代表所有B幀。<br />
* x264是如何為每個候選幀選定為P幀或B幀的詳細資訊可以參閱[http://article.gmane.org/gmane.comp.video.ffmpeg.devel/29064 http://article.gmane.org/gmane.comp.video.ffmpeg.devel/29064]。在此情況下,幀類型看起來會像這樣(假設<code>--bframes 3</code>):IBBBPBBBPBPI。<br />
<br />
'''參閱:'''{{x|b-bias}}, {{x|b-pyramid}}, {{x|ref}}, {{x|pbratio}}, {{x|partitions}}, {{x|weightb}}<br />
<br />
===b-adapt===<br />
'''預設值:1'''<br />
<br />
設定彈性B幀位置決策演算法。此設定控制x264如何決定要放置P幀或B幀。<br />
<br />
: <code>0</code>:停用,總是挑選B幀。這與舊的<code>no-b-adapt</code>設定相同作用。<br />
<br />
: <code>1</code>:“快速”演算法,較快,越大的{{x|bframes}}值會稍微提高速度。當使用此模式時,基本上建議搭配{{x|bframes}}<code> 16</code>使用。<br />
<br />
: <code>2</code>:“最佳”演算法,較慢,越大的{{x|bframes}}值會大幅降低速度。<br />
<br />
注意:對於多重階段(multi-pass)編碼,僅在第一階段(first pass)才需要此選項,因為幀類型在此時已經決定完了。<br />
<br />
===b-bias===<br />
'''預設值:0'''<br />
<br />
控制使用B幀而不使用P幀的可能性。大於0的值增加偏向B幀的加權,而小於0的值則相反。範圍是從-100到100。100並不保證全是B幀(要全是B幀該使用{{x|b-adapt}}<code> 0</code>),而-100也不保證全是P幀。<br />
<br />
僅在你認為能比x264做出更好的速率控制決策時才使用此選項。<br />
<br />
'''參閱:'''{{x|bframes}}, {{x|ipratio}}<br />
<br />
===b-pyramid===<br />
'''預設值:normal'''<br />
<br />
允許B幀作為其他幀的參照幀。沒有此設定時,幀只能參照I/P幀。雖然I/P幀因其較高的品質作為參照幀更有價值,但B幀也是很有用的。作為參照幀的B幀會得到一個介於P幀和普通B幀之間的量化值。b-pyramid需要至少兩個以上的{{x|bframes}}才會運作。<br />
<br />
如果是在為藍光編碼,須使用<code>none</code>或<code>strict</code>。<br />
<br />
: <code>none</code>:不允許B幀作為參照幀。<br />
: <code>strict</code>:每minigop允許一個B幀作為參照幀,這是藍光標準強制執行的限制。<br />
: <code>normal</code>:每minigop允許多個B幀作為參照幀。<br />
<br />
'''參閱:'''{{x|bframes}}, {{x|refs}}, {{x|no-mixed-refs}}<br />
<br />
===open-gop===<br />
'''預設值:none'''<br />
<br />
open-gop是一個提高效率的編碼技術。有三種模式:<br />
: <code>none</code>:停用open-gop。<br />
: <code>normal</code>:啟用open-gop。<br />
: <code>bluray</code>:啟用open-gop。一個效率較低的open-gop版本,因為<code>normal</code>模式無法用於藍光編碼。<br />
<br />
某些解碼器不完全支援open-gop資料流,這就是為什麼此選項並未預設為啟用。如果想啟用open-gop,應該先測試所有可能用來撥放的解碼器。<br />
<br />
open-gop的說明可以參閱[http://forum.doom9.org/showthread.php?p=1300124#post1300124 http://forum.doom9.org/showthread.php?p=1300124#post1300124]。<br />
<br />
===no-cabac===<br />
'''預設值:無'''<br />
<br />
停用彈性內容的二進位算數編碼(CABAC:'''C'''ontext '''A'''daptive '''B'''inary '''A'''rithmetic '''C'''oder)資料流壓縮,切換回效率較低的彈性內容的可變長度編碼(CAVLC:'''C'''ontext '''A'''daptive '''V'''ariable '''L'''ength '''C'''oder)系統。大幅降低壓縮效率(通常10~20%)和解碼的硬體需求。<br />
<br />
===ref===<br />
'''預設值:3'''<br />
<br />
控制解碼圖片緩衝(DPB:'''D'''ecoded '''P'''icture '''B'''uffer)的大小。範圍是從0到16。總之,此值是每個P幀可以使用先前多少幀作為參照幀的數目(B幀可以使用的數目要少一或兩個,取決於它們是否作為參照幀)。可以被參照的最小ref數是1。<br />
<br />
還要注意的是,H.264規格限制了每個level的DPB大小。如果遵守[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels Level 4.1]規格,720p和1080p視訊的最大ref數分別是9和4。<br />
<br />
'''參閱:'''{{x|b-pyramid}}, {{x|no-mixed-refs}}, {{x|level}}<br />
<br />
===no-deblock===<br />
'''預設值:無'''<br />
<br />
完全停用循環篩選(loop filter)。不建議。<br />
<br />
'''參閱:'''{{x|deblock}}<br />
<br />
===deblock===<br />
'''預設值:0:0'''<br />
<br />
控制循環篩選(亦稱為持續循環去區塊(inloop deblocker)),這是H.264標準的一部分。就性價比來說非常有效率。<br />
<br />
可以在[http://forum.doom9.org/showthread.php?t=109747 http://forum.doom9.org/showthread.php?t=109747]找到loop濾鏡的參數是如何運作的說明(參閱第一個帖子和akupenguin的回覆)。<br />
<br />
'''參閱:'''{{x|no-deblock}}<br />
<br />
===slices===<br />
'''預設值:0'''<br />
<br />
設定每幀的切片數,而且強制為矩形切片(會被{{x|slice-max-size}}或{{x|slice-max-mbs}}覆寫)。<br />
<br />
如果是在為藍光編碼,將值設為4。否則,不要使用此選項,除非你知道真的有必要。<br />
<br />
'''參閱:'''{{x|slice-max-size}}, {{x|slice-max-mbs}}<br />
<br />
===slice-max-size===<br />
'''預設值:0'''<br />
<br />
設定最大的切片大小(單位是位元組),包括估計的NAL額外負荷(overhead)。(目前與{{x|interlaced}}不相容)<br />
<br />
'''參閱:'''{{x|slices}}<br />
<br />
===slice-max-mbs===<br />
'''預設值:0'''<br />
<br />
設定最大的切片大小(單位是巨集區塊)。(目前與{{x|interlaced}}不相容)<br />
<br />
'''參閱:'''{{x|slices}}<br />
<br />
===tff===<br />
啟用交錯式編碼並指定頂場優先(top field first)。x264的交錯式編碼使用MBAFF,本身效率比漸進式編碼差。出於此原因,僅在打算於交錯式顯示器上播放此視訊時,才應該編碼為交錯式(或者視訊在送給x264之前無法進行去交錯)。此選項會自動啟用{{x|pic-struct}}。<br />
<br />
===bff===<br />
啟用交錯式編碼並指定底場優先(bottom field first)。詳細資訊可以參閱{{x|tff}}。<br />
<br />
===constrained-intra===<br />
'''預設值:無'''<br />
<br />
啟用限制的內部預測(constrained intra prediction),這是SVC編碼的基礎層(base layer)所需要的。由於Everyone<sup>TM</sup>忽略SVC,你同樣可以忽略此選項。<br />
<br />
===pulldown===<br />
'''預設值:none'''<br />
<br />
使用其中一個預設模式將漸進式、固定幀率的輸入資料流標誌上軟膠捲過帶(soft telecine)。軟膠捲過帶在[http://trac.handbrake.fr/wiki/Telecine http://trac.handbrake.fr/wiki/Telecine]有更詳細的解釋。<br />
<br />
可用的預設:<code>none, 22, 32, 64, double, triple, euro</code><br />
<br />
指定除了<code>none</code>以外的任一模式會自動啟用{{x|pic-struct}}。<br />
<br />
===fake-interlaced===<br />
'''預設值:無'''<br />
<br />
將資料流標記為交錯式,即使它並未以交錯式來編碼。用於編碼25p和30p為符合藍光標準的視訊。<br />
<br />
==速率控制==<br />
===qp===<br />
'''預設值:無'''<br />
<br />
三種速率控制方法之一。設定x264以固定量化值('''C'''onstant '''Q'''uantizer)模式來編碼視訊。這裡給的值是指定P幀的量化值。I幀和B幀的量化值則是衍生自{{x|ipratio}}和{{x|pbratio}}。CQ模式把某個量化值作為目標,這意味著最終檔案大小是未知的(雖然可以透過一些方法來準確地估計)。將值設為0會產生無失真輸出。對於相同視覺品質,qp會比{{x|crf}}產生更大的檔案。qp模式也會停用彈性量化,因為按照定義“固定量化值”意味著沒有彈性量化。<br />
<br />
此選項與{{x|bitrate}}和{{x|crf}}互斥。各種速率控制系統的詳細資訊可以參閱[http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD]。<br />
<br />
雖然qp不需要lookahead來執行因此速度較快,但通常應該改用{{x|crf}}。<br />
<br />
'''參閱:'''{{x|bitrate}}, {{x|crf}}, {{x|ipratio}}, {{x|pbratio}}<br />
<br />
===bitrate===<br />
'''預設值:無'''<br />
<br />
三種速率控制方法之二。以目標位元速率(target bitrate)模式來編碼視訊。目標位元速率模式意味著最終檔案大小是已知的,但最終品質則未知。x264會嘗試把給定的位元速率作為整體平均值來編碼視訊。此參數的單位是千位元/秒(8位元=1位元組)。注意,1千位元(kilobit)是1000位元,而不是1024位元。<br />
<br />
此設定通常與{{x|pass}}在兩階段(two-pass)編碼一起使用。<br />
<br />
此選項與{{x|qp}}和{{x|crf}}互斥。各種速率控制系統的詳細資訊可以參閱[http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD]。<br />
<br />
'''參閱:'''{{x|qp}}, {{x|crf}}, {{x|ratetol}}, {{x|pass}}, {{x|stats}}<br />
<br />
===crf===<br />
'''預設值:23.0'''<br />
<br />
最後一種速率控制方法:固定速率係數('''C'''onstant '''R'''ate'''f'''actor)。當qp是把某個量化值作為目標,而bitrate是把某個檔案大小作為目標時,crf則是把某個“品質”作為目標。構想是讓crf n提供的視覺品質與qp n相同,只是檔案更小一點。crf值的度量單位是“速率係數(ratefactor)”。<br />
<br />
CRF是藉由降低“較不重要”的幀之品質來達到此目的。在此情況下,“較不重要”是指在複雜或高動態場景的幀,其品質不是很耗費位元數就是不易察覺,所以會提高它們的量化值。從這些幀裡所節省下來的位元數被重新分配到可以更有效利用的幀。<br />
<br />
CRF花費的時間會比兩階段編碼少,因為兩階段編碼中的“第一階段”被略過了。另一方面,要預測CRF編碼的最終位元速率是不可能的。根據情況哪種速率控制模式更好是由你來決定。<br />
<br />
此選項與{{x|qp}}和{{x|bitrate}}互斥。各種速率控制系統的詳細資訊可以參閱[http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD]。<br />
<br />
'''參閱:'''{{x|qp}}, {{x|bitrate}}<br />
<br />
===rc-lookahead===<br />
'''預設值:40'''<br />
<br />
設定mb-tree速率控制和vbv-lookahead使用的幀數。最大允許值是250。<br />
<br />
對於mb-tree部分,增加幀數帶來更好的效果但也會更慢。mb-tree使用的最大緩衝值是MIN(rc-lookahead, {{x|keyint}})。<br />
<br />
對於vbv-lookahead部分,當使用vbv時,增加幀數帶來更好的穩定性和準確度。vbv-lookahead使用的最大值是:<br />
MIN(rc-lookahead, MAX({{x|keyint}}, MAX({{x|vbv-maxrate}}, {{x|bitrate}}) / {{x|vbv-bufsize}} * {{x|fps}}))<br />
<br />
'''參閱:'''{{x|no-mbtree}}, {{x|vbv-bufsize}}, {{x|vbv-maxrate}}<br />
<br />
===vbv-maxrate===<br />
'''預設值:0'''<br />
<br />
設定重新填滿VBV緩衝的最大速率。<br />
<br />
VBV會降低品質,所以必要時才使用。<br />
<br />
'''參閱:'''{{x|vbv-bufsize}}, {{x|vbv-init}}, [[X264編碼建議#VBV編碼|VBV編碼建議]]<br />
<br />
===vbv-bufsize===<br />
'''預設值:0'''<br />
<br />
設定VBV緩衝的大小(單位是千位元)。<br />
<br />
VBV會降低品質,所以必要時才使用。<br />
<br />
'''參閱:'''{{x|vbv-maxsize}}, {{x|vbv-init}}, [[X264編碼建議#VBV編碼|VBV編碼建議]]<br />
<br />
===vbv-init===<br />
'''預設值:0.9'''<br />
<br />
設定VBV緩衝必須填滿多少才會開始播放。<br />
<br />
如果值小於1,初始的填滿量是:vbv-init * vbv-bufsize。否則該值即是初始的填滿量(單位是千位元)。<br />
<br />
'''參閱:'''{{x|vbv-maxsize}}, {{x|vbv-bufsize}}, [[X264編碼建議#VBV編碼|VBV編碼建議]]<br />
<br />
===crf-max===<br />
'''預設值:無'''<br />
<br />
一個類似{{x|qpmax}}的設定,除了指定的是最大速率係數而非最大量化值。當使用{{x|crf}}且啟用VBV時,此選項才會運作。它阻止x264降低速率係數(亦稱為“品質”)到低於給定的值,即使這樣做會違反VBV的條件約束。此設定主要適用於自訂資料流伺服器。詳細資訊可以參閱[http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52 http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52]。<br />
<br />
'''參閱:'''{{x|crf}}, {{x|vbv-maxrate}}, {{x|vbv-bufsize}}<br />
<br />
===qpmin===<br />
'''預設值:0'''<br />
<br />
定義x264可以使用的最小量化值。量化值越小,輸出就越接近輸入。到了一定的值,x264的輸出看起來會跟輸入一樣,即使它並不完全相同。通常沒有理由允許x264花費比這更多的位元數在任何特定的巨集區塊上。<br />
<br />
當彈性量化啟用時(預設啟用),不建議提高qpmin,因為這會降低幀裡面平面背景區域的品質。<br />
<br />
'''參閱:'''{{x|qpmax}}, {{x|ipratio}}<br />
<br />
'''关于qpmin的预设值:'''在x264 r1795版本之前,该选项预设值为10。<br />
<br />
===qpmax===<br />
'''預設值:51'''<br />
<br />
定義x264可以使用的最大量化值。預設值51是H.264規格可供使用的最大量化值,而且品質極低。此預設值有效地停用了qpmax。如果想要限制x264可以輸出的最低品質,可以將此值設小一點(通常30~40),但通常並不建議調整此值。<br />
<br />
'''參閱:'''{{x|qpmin}}, {{x|pbratio}}, {{x|crf-max}}<br />
<br />
===qpstep===<br />
'''預設值:4'''<br />
<br />
設定兩幀之間量化值的最大變更幅度。<br />
<br />
===ratetol===<br />
'''預設值:1.0'''<br />
<br />
此參數有兩個目的:<br />
* 在一階段位元速率編碼時,此設定控制x264可以偏離目標平均位元速率的百分比。可以指定<code>inf</code>來完全停用溢出偵測(overflow detection)。可以設定的最小值是0.01。值設得越大,x264可以對接近電影結尾的複雜場景作出越好的反應。此目的的度量單位是百分比(例如,1.0等於允許1%的位元速率偏差)。<br />
:: 很多電影(例如動作片)在電影結尾時是最複雜的。因為一階段編碼並不知道這一點,結尾所需的位元數通常被低估。將ratetol設為<code>inf</code>可以減輕此情況,藉由允許編碼以更像{{x|crf}}的模式運行,但檔案大小將會暴增。<br />
* 當VBV啟用時(即指定了--vbv-開頭的選項),此設定也會影響VBV的強度。值設得越大,允許VBV在冒著可能違反VBV設定的風險下有越大的波動。<br />
<br />
===ipratio===<br />
'''預設值:1.40'''<br />
<br />
修改I幀量化值相比P幀量化值的目標平均增量。越大的值會提高I幀的品質。<br />
<br />
'''參閱:'''{{x|pbratio}}<br />
<br />
===pbratio===<br />
'''預設值:1.30'''<br />
<br />
修改B幀量化值相比P幀量化值的目標平均減量。越大的值會降低B幀的品質。當mbtree啟用時(預設啟用),此設定無作用,mbtree會自動計算最佳值。<br />
<br />
'''參閱:'''{{x|ipratio}}<br />
<br />
===chroma-qp-offset===<br />
'''預設值:0'''<br />
<br />
在編碼時增加色度平面量化值的偏移。偏移可以為負數。<br />
<br />
當使用psy-rd或psy-trellis時,x264自動降低此值來提高亮度的品質,其後降低色度的品質。這些設定的預設值會使chroma-qp-offset再減去2。<br />
<br />
注意:x264僅在同一量化值編碼亮度平面和色度平面,直到量化值29。在此之後,色度逐步以比亮度低的量被量化,直到亮度在q51和色度在q39為止。此行為是由H.264標準所要求。<br />
<br />
===aq-mode===<br />
'''預設值:1'''<br />
<br />
彈性量化模式。沒有AQ時,x264很容易分配不足的位元數到細節較少的部分。AQ是用來更好地分配視訊裡所有巨集區塊之間的可用位元數。此設定變更AQ會重新分配位元數到哪個範圍裡:<br />
: <code>0</code>:完全不使用AQ。<br />
: <code>1</code>:允許AQ重新分配位元數到整個視訊和幀內。<br />
: <code>2</code>:自動變化(Auto-variance)AQ,會嘗試對每幀調整強度。(實驗性的)<br />
<br />
'''參閱:'''{{x|aq-strength}}<br />
<br />
===aq-strength===<br />
'''預設值:1.0'''<br />
<br />
彈性量化強度。設定AQ偏向低細節(平面)的巨集區塊之強度。不允許為負數。0.0~2.0以外的值不建議。<br />
<br />
'''參閱:'''{{x|aq-mode}}<br />
<br />
===pass===<br />
'''預設值:無'''<br />
<br />
此為兩階段編碼的一個重要設定。它控制x264如何處理{{x|stats}}檔案。有三種設定:<br />
: <code>1</code>:建立一個新的統計資料檔案。在第一階段使用此選項。<br />
: <code>2</code>:讀取統計資料檔案。在最終階段使用此選項。<br />
: <code>3</code>:讀取統計資料檔案並更新。<br />
<br />
統計資料檔案包含每個輸入幀的資訊,可以輸入到x264以改善輸出。構想是執行第一階段來產生統計資料檔案,然後第二階段將建立一個最佳化的視訊編碼。改善的地方主要是從更好的速率控制中獲益。<br />
<br />
'''參閱:'''{{x|stats}}, {{x|bitrate}}, {{x|slow-firstpass}}, [[X264統計資料檔案]]<br />
<br />
===stats===<br />
'''預設值:"x264_2pass.log"'''<br />
<br />
設定x264讀取和寫入統計資料檔案的位置。<br />
<br />
'''參閱:'''{{x|pass}}, [[X264統計資料檔案]]<br />
<br />
===no-mbtree===<br />
'''預設值:無'''<br />
<br />
停用巨集區塊樹(macroblock tree)速率控制。使用巨集區塊樹速率控制會改善整體壓縮率,藉由追蹤跨幀的時間傳播(temporal propagation)然後相應地加權。除了已經存在的統計資料檔案之外,多重階段編碼還需要一個新的統計資料檔案。<br />
<br />
'''建議:'''預設值<br />
<br />
'''參閱:'''{{x|rc-lookahead}}<br />
<br />
===qcomp===<br />
'''預設值:0.60'''<br />
<br />
量化值曲線壓縮係數。0.0是固定位元速率,1.0則是固定量化值。<br />
<br />
當mbtree啟用時,它會影響mbtree的強度(qcomp越大,mbtree越弱)。<br />
<br />
'''建議:'''預設值<br />
<br />
'''參閱:'''{{x|cplxblur}}, {{x|qblur}}<br />
<br />
===cplxblur===<br />
'''預設值:20'''<br />
<br />
以給定的半徑範圍套用高斯模糊(gaussian blur)於量化值曲線。這意味著分配給每個幀的量化值會被它的鄰近幀模糊掉,以此來限制量化值波動。<br />
<br />
'''參閱:'''{{x|qcomp}}, {{x|qblur}}<br />
<br />
===qblur===<br />
'''預設值:0.5'''<br />
<br />
在曲線壓縮之後,以給定的半徑範圍套用高斯模糊於量化值曲線。不怎麼重要的設定。<br />
<br />
'''參閱:'''{{x|qcomp}}, {{x|cplxblur}}<br />
<br />
===zones===<br />
'''預設值:無'''<br />
<br />
調整視訊的特定片段之設定。可以修改每區段的大多數x264選項。<br />
* 一個單一區段的形式為<起始幀>,<結束幀>,<選項>。<br />
* 多個區段彼此以"/"分隔。<br />
<br />
'''選項:'''<br />
<br />
這兩個是特殊選項。每區段只能設定其中一個,而且如果有設定其中一個,它必須為該區段列出的第一個選項:<br />
* b=<浮點數> 套用位元速率乘數在此區段。在額外調整高動態和低動態場景時很有用。<br />
* q=<整數> 套用固定量化值在此區段。在套用於一段範圍的幀時很有用。<br />
<br />
其他可用的選項如下:<br />
* ref=<整數><br />
* b-bias=<整數><br />
* scenecut=<整數><br />
* no-deblock<br />
* deblock=<整數>:<整數><br />
* deadzone-intra=<整數><br />
* deadzone-inter=<整數><br />
* direct=<字串><br />
* merange=<整數><br />
* nr=<整數><br />
* subme=<整數><br />
* trellis=<整數><br />
* (no-)chroma-me<br />
* (no-)dct-decimate<br />
* (no-)fast-pskip<br />
* (no-)mixed-refs<br />
* psy-rd=<浮點數>:<浮點數><br />
* me=<字串><br />
* no-8x8dct<br />
* b-pyramid=<字串><br />
<br />
限制:<br />
* 一個區段的參照幀數無法超過{{x|ref}}所指定的大小。<br />
* 無法開啟或關閉scenecut;如果{{x|scenecut}}最初為開啟(>0),則只能改變scenecut的大小。<br />
* 如果使用{{x|me}}<code> esa</code>/<code>tesa</code>,merange無法超過最初所指定的大小。<br />
* 如果{{x|subme}}最初指定為0,則無法變更subme。<br />
* 如果{{x|me}}最初指定為dia、hex或umh,則無法將me設為esa為tesa。<br />
<br />
'''範例:'''0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000<br />
<br />
'''建議:'''預設值<br />
<br />
===qpfile===<br />
<br />
手動覆寫標準的速率控制。指定一個檔案,為指定的幀賦予量化值和幀類型。格式為“幀號 幀類型 量化值”。例如:<br />
0 I 18 < IDR (key) I-frame<br />
1 P 18 < P-frame<br />
2 B 18 < Referenced B-frame<br />
3 i 18 < Non-IDR (non-key) I-frame<br />
4 b 18 < Non-referenced B-frame<br />
5 K 18 < Keyframe*<br />
* 不需要指定每個幀。<br />
* 使用-1作為所需的量化值允許x264自行選擇最佳的量化值,在只需設定幀類型時很有用。<br />
* 在指定了大量的幀類型和量化值時仍然讓x264間歇地自行選擇,會降低x264的效能。<br />
* "Keyframe"是一個泛用關鍵幀/搜尋點,如果{{x|open-gop}}是<code>none</code>則等同於一個IDR I幀,否則等同於一個加上Recovery Point SEI標幟的Non-IDR I幀。<br />
<br />
==分析==<br />
===partitions===<br />
'''預設值:p8x8,b8x8,i8x8,i4x4'''<br />
<br />
H.264視訊在壓縮過程中劃分為16x16的巨集區塊。這些區塊可以進一步劃分為更小的分割,這就是此選項要控制的部分。<br />
<br />
此選項可以啟用個別分割。分割依不同幀類型啟用。<br />
<br />
可用的分割:<code>p8x8, p4x4, b8x8, i8x8, i4x4, none, all</code><br />
* I:i8x8、i4x4。<br />
* P:p8x8(也會啟用p16x8/p8x16)、p4x4(也會啟用p8x4/p4x8)。<br />
* B:b8x8(也會啟用b16x8/b8x16)。<br />
<br />
p4x4通常不怎麼有用,而且性價比極低。<br />
<br />
'''參閱:'''{{x|no-8x8dct}}<br />
<br />
===direct===<br />
'''預設值:spatial'''<br />
<br />
設定"direct"動態向量(motion vectors)的預測模式。有兩種模式可用:<code>spatial</code>和<code>temporal</code>。可以指定<code>none</code>來停用direct動態向量,和指定<code>auto</code>來允許x264在兩者之間切換為適合的模式。如果設為<code>auto</code>,x264會在編碼結束時輸出使用情況的資訊。<code>auto</code>最適合用於兩階段編碼,但也可用於一階段編碼。在第一階段<code>auto</code>模式,x264持續記錄每個方法執行到目前為止的好壞,然後從該記錄挑選下一個預測模式。注意,僅在第一階段有指定<code>auto</code>時,才應該在第二階段指定<code>auto</code>;如果第一階段不是指定<code>auto</code>,第二階段將會預設為<code>temporal</code>。<code>none</code>模式會浪費位元數,因此強烈不建議。<br />
<br />
'''建議:'''auto<br />
<br />
===no-weightb===<br />
'''預設值:無'''<br />
<br />
H.264允許“加權”B幀的參照,它允許變更每個參照影響預測圖片的程度。此選項停用該功能。<br />
<br />
'''建議:'''預設值<br />
<br />
===weightp===<br />
'''預設值:2'''<br />
<br />
使x264能夠使用明確加權預測(explicit weighted prediction)來改善P幀的壓縮。亦改善淡入/淡出的品質。模式越高越慢。<br />
<br />
注意:在為Adobe Flash編碼時,將值設為1,否則它的解碼器會產生不自然痕跡(artifacts)。Flash 10.1修正了此bug。<br />
<br />
模式:<br />
: <code>0</code>:停用。<br />
: <code>1</code>:簡易:分析淡入/淡出,但不分析重複參照幀。<br />
: <code>2</code>:智慧:分析淡入/淡出和重複參照幀。<br />
<br />
===me===<br />
'''預設值:hex'''<br />
<br />
設定全像素(full-pixel)動態估算(motion estimation)的方法。有五個選項:<br />
: <code>dia</code>(diamond):最簡單的搜尋方法,起始於最佳預測器(predictor),檢查上、左、下、右方一個像素的動態向量,挑選其中最好的一個,然後重複此過程,直到它不再找到任何更好的動態向量為止。<br />
: <code>hex</code>(hexagon):由類似策略組成,除了它使用周圍6點範圍為2的搜尋,因此叫做六邊形。它比<code>dia</code>更有效率且幾乎沒有變慢,因此作為一般用途的編碼是個不錯的選擇。<br />
: <code>umh</code>(uneven multi-hex):比hex更慢,但搜尋複雜的多六邊形圖樣以避免遺漏難以找到的動態向量。不像hex和dia,merange參數直接控制umh的搜尋半徑,允許增加或減少廣域搜尋的大小。<br />
: <code>esa</code>(exhaustive):一種在merange內整個動態搜尋空間的高度最佳化智慧搜尋。雖然速度較快,但數學上相當於搜尋該區域每個單一動態向量的暴力(bruteforce)方法。不過,它仍然比UMH還要慢,而且沒有帶來很大的好處,所以對於日常的編碼不是特別有用。<br />
: <code>tesa</code>(transformed exhaustive):一種嘗試接近在每個動態向量執行Hadamard轉換法比較的效果之演算法,就像exhaustive,但效果好一點而速度慢一點。<br />
<br />
'''參閱:'''{{x|merange}}<br />
<br />
===merange===<br />
'''預設值:16'''<br />
<br />
merange控制動態搜尋的最大範圍(單位是像素)。對於hex和dia,範圍限制在4~16。對於umh和esa,它可以增加到超過預設值16來允許範圍更廣的動態搜尋,對於HD視訊和高動態鏡頭很有用。注意,對於umh、esa和tesa,增加merange會大幅減慢編碼速度。<br />
<br />
'''參閱:'''{{x|me}}<br />
<br />
===mvrange===<br />
'''預設值:-1 (自動)'''<br />
<br />
設定動態向量的最大(垂直)範圍(單位是像素)。預設值依level不同:<br />
* Level 1/1b:64。<br />
* Level 1.1~2.0:128。<br />
* Level 2.1~3.0:256。<br />
* Level 3.1+:512。<br />
<br />
注意:如果想要手動覆寫mvrange,在設定時從上述值減去0.25(例如<code>--mvrange 127.75</code>)。<br />
<br />
'''建議:'''預設值<br />
<br />
===mvrange-thread===<br />
'''預設值:-1 (自動)'''<br />
<br />
設定執行緒之間的最小動態向量緩衝。不要碰它。<br />
<br />
'''建議:'''預設值<br />
<br />
===subme===<br />
'''預設值:7'''<br />
<br />
設定子像素(subpixel)估算複雜度。值越高越好。層級1~5只是控制子像素細分(refinement)強度。層級6為模式決策啟用RDO,而層級8為動態向量和內部預測模式啟用RDO。RDO層級明顯慢於先前的層級。<br />
<br />
使用小於2的值不但會啟用較快且品質較低的lookahead模式,而且導致較差的{{x|scenecut}}決策,因此不建議。<br />
<br />
可用的值:<br />
: <code>0</code>:Fullpel only<br />
: <code>1</code>:QPel SAD 1 iteration<br />
: <code>2</code>:QPel SATD 2 iterations<br />
: <code>3</code>:HPel on MB then QPel<br />
: <code>4</code>:Always QPel<br />
: <code>5</code>:Multi QPel + bi-directional motion estimation<br />
: <code>6</code>:RD on I/P frames<br />
: <code>7</code>:RD on all frames<br />
: <code>8</code>:RD refinement on I/P frames<br />
: <code>9</code>:RD refinement on all frames<br />
: <code>10</code>:QP-RD (requires {{x|trellis}}=2, {{x|aq-mode}}>0)<br />
<br />
'''建議:'''預設值,或者更高,除非速度非常重要<br />
<br />
===psy-rd===<br />
'''預設值:1.0:0.0'''<br />
<br />
第一個數是Psy-RDO的強度(需要subme>=6)。第二個數是Psy-Trellis的強度(需要trellis>=1)。注意,Trellis仍然被視為“實驗性的”,而且幾乎可以肯定至少卡通不適合使用。<br />
<br />
psy-rd的解釋可以參閱[http://forum.doom9.org/showthread.php?t=138293 http://forum.doom9.org/showthread.php?t=138293]。<br />
<br />
===no-psy===<br />
'''預設值:無'''<br />
<br />
停用所有會降低PSNR或SSIM的視覺最佳化。這也會停用一些無法透過x264的命令列引數設定的內部psy最佳化。<br />
<br />
'''建議:'''預設值<br />
<br />
===no-mixed-refs===<br />
'''預設值:無'''<br />
<br />
混合參照會以每個8x8分割為基礎來選取參照,而不是以每個巨集區塊為基礎。當使用多個參照幀時這會改善品質,雖然要損失一些速度。設定此選項會停用該功能。<br />
<br />
'''建議:'''預設值<br />
<br />
'''參閱:'''{{x|ref}}<br />
<br />
===no-chroma-me===<br />
'''預設值:無'''<br />
<br />
通常,亮度(luma)和色度(chroma)兩個平面都會做動態估算。此選項停用色度動態估算來提高些微速度。<br />
<br />
'''建議:'''預設值<br />
<br />
===no-8x8dct===<br />
'''預設值:無'''<br />
<br />
彈性8x8離散餘弦轉換(Adaptive 8x8 DCT)使x264能夠智慧彈性地使用I幀的8x8轉換。此選項停用該功能。<br />
<br />
'''建議:'''預設值<br />
<br />
===trellis===<br />
'''預設值:1'''<br />
<br />
執行[http://en.wikipedia.org/wiki/Trellis_quantization Trellis quantization]來提高效率。<br />
: <code>0</code>:停用。<br />
: <code>1</code>:只在一個巨集區塊的最終編碼上啟用。<br />
: <code>2</code>:在所有模式決策上啟用。<br />
<br />
在巨集區塊時提供了速度和效率之間的良好平衡。在所有決策時則更加降低速度。<br />
<br />
'''建議:'''預設值<br />
<br />
'''注意:'''需要{{x|no-cabac|cabac}}<br />
<br />
===no-fast-pskip===<br />
'''預設值:無'''<br />
<br />
停用P幀的早期略過偵測(early skip detection)。非常輕微地提高品質,但要損失很多速度。<br />
<br />
'''建議:'''預設值<br />
<br />
===no-dct-decimate===<br />
'''預設值:無'''<br />
<br />
DCT Decimation會捨棄它認為“不必要的”的DCT區塊。這會改善編碼效率,而降低的品質通常微不足道。<br />
<br />
'''建議:'''預設值<br />
<br />
===nr===<br />
'''預設值:無'''<br />
<br />
執行快速的雜訊削減(noise reduction)。根據此值估算影片的雜訊,然後藉由在量化之前捨棄低細節資料來嘗試移除雜訊。這可能比不上優良的外部雜訊削減篩選的品質,但它執行得非常快。<br />
<br />
'''建議:'''預設值,或者100~1000</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Talk:%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC&diff=427
Talk:第一个脚本
2010-09-24T15:01:14Z
<p>Lititude:</p>
<hr />
<div>== 准备改动如下 == <br />
<br />
把脚本换成显示“hello world”的脚本,并且贴图;<br />
<br />
给出脚本的解释;<br />
<br />
脚本的一般形式;<br />
<br />
列出推荐的编辑器或IDE;<br />
<br />
列出哪些播放器或工具可以显示avs;<br />
<br />
列出哪些压缩工具可以处理avs。<br />
<br />
[[User:Lititude|Lititude]] 2010年9月24日 (五) 15:01 (UTC)</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Talk:%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC&diff=426
Talk:第一个脚本
2010-09-24T15:00:33Z
<p>Lititude:以内容'准备改动如下: 把脚本换成显示“hello world”的脚本,并且贴图; 给出脚本的解释; 脚本的一般形式; 列出推荐的编辑器或IDE; …'创建新页面</p>
<hr />
<div>准备改动如下:<br />
把脚本换成显示“hello world”的脚本,并且贴图;<br />
给出脚本的解释;<br />
脚本的一般形式;<br />
列出推荐的编辑器或IDE;<br />
列出哪些播放器或工具可以显示avs;<br />
列出哪些压缩工具可以处理avs。</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=DXVA%E5%92%8Cpsp&diff=425
DXVA和psp
2010-09-24T11:05:06Z
<p>Lititude:</p>
<hr />
<div>=硬件加速介绍篇=<br />
'''DirectX视频加速简介:'''<br />
<br />
DirectX视频加速(DirectX Video Acceleration/DXVA)是微软在Windows以及Xbox 360平台上的一种API技术规范,它允许通过硬件加速视频解码。以管线方式,将CPU疲于处理的运算,诸如反余弦变换(iDCT)、运动补偿(Motion Compensation)和反交错(Deinterlacing)等,交给GPU完成。DXVA 2.0能让更多的运算实现硬件加速,包括视频捕捉和处理。DXVA在显卡(Video Card)的视频渲染模块中工作。在Windows 2000中,DXVA 1.0作为一个标准的API被引入,并且在Windows 98以及之后的Windows中依然可用。DXVA 1.0可在覆盖合成器(Overlay Rendering Mode)或VMR 7/9运行。DXVA 2.0,仅在Windows Vista、Windows 7以及之后的微软操作系统中可用,与Media Foundation合并,并且在MF(Media Foundation)中使用的是增强型视频渲染器(Enhanced Video Renderer/EVR)。<br />
视频解码器为硬件加速解码和渲染特别定义了一条特殊的解码管线以使用DXVA。CPU分析流媒体并转换成DXVA兼容的数据结构。DXVA定义了一组可硬件加速的运算。除此之外,还定义了一组可以让图形驱动实现运算加速的硬件驱动接口(Device Driver Interfaces/DDIs)。如果解码器需要用到任何DXVA已支持的运算,那么通过调用这些接口,它便可实现运算的硬件加速。如果图形驱动未能调用这些接口,它将会返回给解码器进行软解码。然后已解码的视频输出给视频渲染设备。<br />
<br />
==DXVA的实现==<br />
DXVA有三种视频加速级别<br />
*MC加速<br />
*MC加速+iDCT加速<br />
*MC加速+iDCT加速+VLD[1]加速<br />
<br />
[1]VLD: Variable-Length Decoding,即可变长度解码<br />
<br />
==几种常见的支持DXVA的播放器或解码器==<br />
*PowerDVD(CyberLink): 著名的商业播放器<br />
*Nvidia PureVideo: 从名字就可以看出,Nvidia公司出品的视频解码器<br />
*MPC-HC: 继承了历史悠久的开源播放器MPC的衣襟,并在其基础上增加了许多实用功能<br />
*PotPlayer: 原Kmplayer作者开发的另一款播放器<br />
*ffdshow: 著名的开源编解码器,功能强大,内置了许多实用滤镜,在最近的版本中加入了DXVA模块<br />
在目前,虽然有许多播放器支持DXVA解码,但综合考虑MPC-HC是最为实用并且方便实用的。首先MPC-HC是开源软件,其次MPC-HC是绿色软件,无需安装即可使用,再则MPC-HC内置的字幕滤镜比起其他播放器,对ASS/SSA的支持度最高。因此接下来着重介绍[http://mpc-hc.sourceforge.net/ MPC-HC]<br />
<br />
<br />
MPC-HC的DXVA对显卡的限制:<br />
<br />
*nVidia 8(9)xxx系列,仅支持H.264<br />
*ATI Radeon HD系列,支持H.264和VC-1<br />
*Intel G45,仅支持H.264<br />
在未来,MPC-HC可能会增加对运动补偿模式的支持,以兼容更多古老的显卡。但在目前,还不支持MPEG2和WMV的硬件加速。<br />
<br />
<br />
<br />
由于DXVA的限制,所使用的渲染器必须遵守以下规则:<br />
<br />
Windows XP用户,必须使用覆盖合成器(Overlay Mixer),VMR 7或VMR9作为视频渲染器(Video Renderer)<br />
<br />
Windows Vista/7用户,必须使用增强型视频渲染器(Enhanced Video Renderer/EVR)或EVR custom renderer<br />
<br />
<br />
<br />
MPC-HC视频解码器必须直接连接视频渲染器,因此中间无法插入DirectVobSub或ffdshow之类的滤镜。<br />
在DXVA模式中,外挂字幕可以通过MPC-HC内置的字幕滤镜来显示,但是对渲染器的要求更苛刻<br />
<br />
Windows XP用户,必须使用VMR9<br />
<br />
Windows Vista/7用户,必须使用EVR custom renderer<br />
<br />
<br />
在 选项(Options)/播放(Playback) 中,勾上 自动装载字幕(Auto-load subtitles)<br />
<br />
<br />
==支持DXVA的视频==<br />
可以通过软件来检测:[http://bluesky23.hp.infoseek.co.jp/index.html#DXVAChecker DXVAChecker]<br />
<br />
<br />
说了那么多,其实只是想说视频加速解码真是个复杂的东西。需要硬件,解码器,视频本身等多方面的支持方可促成视频硬解。虽然复杂,但这是值得的。通过视频加速解码,我们可以将CPU从繁重又重复的工作中解放出来,让它在别的地方发挥自己的性能,以及让那些由于CPU性能孱弱但有一块还不错的显卡的电脑同样可以享受高清视频。<br />
<br />
=压制篇(x264版)=<br />
接下来将介绍如何压制一个能使绝大多数硬件加速解码方案都支持的视频<br />
使用的编码器是x264,它是一个效率非常高的开源编码器,基于H.264标准设计。<br />
<br />
==H.264的规格分类==<br />
首先H.264的视频按照标准被分为几个规格<br />
<br />
Profile在x264中被分为baseline/main/high (Profile越高级,支持越多的高级特性,成品的压缩率越高)<br />
<br />
x264相关参数:--profile 可强制指定Profile,一般情况下可不选,x264将会根据其他参数自行设定此项。如果设置此项,x264将会自动无视所设Profile无法支持的高级特性。<br />
<br />
特性支持表:http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles<br />
<br />
Level被分为1/1.1/1.2/1.3/2/2.1/2.2/3/3.1/3.2/4/4.1/4.2/5/5.1 (Level越高,对分辨率/参考帧/码率的限制越小)<br />
<br />
x264相关参数:--level 可强制指定Level,一般情况下可不选,x264将会根据实际情况自行设定此项,但自动设定并不一定准确。如果设置此项,x264将会自动限制DBP[2]。<br />
<br />
具体规格详见:http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels<br />
<br />
[2]DPB,即Decoded Picture Buffer。<br />
<br />
==兼容性==<br />
目前,随着软硬件的发展,播放硬件加速播放高清视频对视频本身的限制越来越小,有些甚至已经宣称支持 High Profile @ Level 5.1。但这些毕竟只有少数软硬件支持,为考虑支持更普遍的硬件加速方案。推荐压制视频不超过 High Profile @ Level 4.1。此规格被绝大多数主流硬件加速播放方案支持。<br />
<br />
<br />
==相关参数==<br />
因为大多数方案已经支持 High Profile。因此我们只需着重考虑Level对硬件加速的兼容。<br />
Level与DPB以及码率息息相关。而DPB与分辨率(resolution)、参考帧(ref)相关。<br />
<br />
DPB的参考帧限制公式:<br />
ref=Min(Floor(MaxDpbMbs / (PicWidthInMbs * FrameHeightInMbs)), 16)<br />
<br />
MaxDpbMbs:<br />
{|style = "width:300px" border = 1px<br />
|Level||1||1b||1.1||1.2||1.3||2||2.1||2.2||3||3.1||3.2||4||4.1||4.2||5||5.1<br />
|-<br />
|MaxDpbMbs||396||396||900||2,376||2,376||2,376||4,752||8,100||8,100||18,000||20,480||32,768||32,768||34,816||110,400||184,320<br />
|}<br />
PicWidthInMbs * FrameHeightInMbs(分辨率)<br />
举个例子:宽为1920时,PicWidthInMbs=120;高为1080时,FrameHeightInMbs=68。其它分辨率按比例计算即可。<br />
<br />
常见高清视频视频分辨率参考帧限制:<br />
Level 4.1<br />
1920x1080: 4<br />
1440x1080: 5<br />
1280x960 : 6<br />
1280x720 : 9<br />
960x720 : 12<br />
关于码率,BD原盘都是Level 4.1,那压出来的东西一般不会超过原盘吧。<br />
<br />
如果你有特别需求需要限制的话,可用 --vbv-maxrate 和 --vbv-bufsize 。<br />
<br />
<br />
另外有些视频虽然标注 High Profile @ Level 5.1,但实际上这些视频也同样满足Level 4.1的限制。但由于一些解码方案直接读取视频的中压制者强制写入的Level信息,而导致无法播放。这时,我们不必重新压制,可以使用roozhou所修改的ffmpeg来简单的更改视频中的Level信息。<br />
<br />
地址:[http://sourceforge.net/projects/direct264/files/Related%20Programs/ffmpeg%20%28demuxer_muxer%20only%29/ffmpeg_svn_r25041.7z/download ffmpeg]<br />
<br />
使用范例(命令行):<br />
>ffmpeg -i input.mkv -vcodec copy -acodec copy -vbsf h264_changesps=level=41 output.mkv<br />
<br />
<br />
参考文献:<br />
*http://en.wikipedia.org/wiki/DirectX_Video_Acceleration<br />
*http://forum.doom9.org/showthread.php?t=137974<br />
<br />
[[分类:视频编码器]]<br />
[[分类:x264]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=424
X264使用介绍
2010-09-24T11:05:04Z
<p>Lititude:</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*[http://www.nmm-hd.org/x264/ MythCreator的编译版]<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
>cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
>x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:104 r1688M 0b36c6d<br />
Syntax: x264 [options] -o outfile infile<br />
<br />
Infile can be raw (in which case resolution is required),<br />
or YUV4MPEG (*.y4m),<br />
or Avisynth if compiled with support (no).<br />
or libav* formats if compiled with lavf support (no) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4<br />
Output bit depth: 8 (configured at compile time)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
'''中间略...'''<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
Filtering:<br />
<br />
Filter options may be specified in the name=value format<br />
--vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file<br />
Available filters:<br />
crop:left,top,right,bottom<br />
resize:[width,height][,sar][,fittobox][,csp][,method]<br />
select_every:step,offset1[,...]<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 [options] -o outfile infile”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
>x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -f rawvideo -an -v 0 - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf format=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
参考主条目: [[DXVA和psp]]<br />
<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
[[分类:视频编码器]]<br />
[[分类:x264]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=401
X264使用介绍
2010-09-19T04:20:01Z
<p>Lititude:/* 用mencoder输入 */ fmt -> format</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
>cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
>x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:104 r1688M 0b36c6d<br />
Syntax: x264 [options] -o outfile infile<br />
<br />
Infile can be raw (in which case resolution is required),<br />
or YUV4MPEG (*.y4m),<br />
or Avisynth if compiled with support (no).<br />
or libav* formats if compiled with lavf support (no) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4<br />
Output bit depth: 8 (configured at compile time)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
'''中间略...'''<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
Filtering:<br />
<br />
Filter options may be specified in the name=value format<br />
--vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file<br />
Available filters:<br />
crop:left,top,right,bottom<br />
resize:[width,height][,sar][,fittobox][,csp][,method]<br />
select_every:step,offset1[,...]<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 [options] -o outfile infile”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
>x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -f rawvideo -an -v 0 - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf format=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Eac3to&diff=399
Eac3to
2010-09-18T14:26:48Z
<p>Lititude:</p>
<hr />
<div>'''eac3to'''是一个免费音频转换工具,主要可以用来方便的处理BD。作者是[http://news.madshi.net madshi]。<br />
<br />
在[http://forum.doom9.org/showthread.php?t=125966 doom9讨论帖]里,作者madshi会很友好地回答每个问题的。请不要怕,勇敢的发问吧,当然前提是用英语问他。<br />
<br />
下载: http://madshi.net/eac3to.zip<br />
<br />
配合工具:<br />
*[http://www.bunkus.org/videotools/mkvtoolnix/downloads.html mkvtoolnix] - mkv工具套装。<br />
*[http://www.nero.com/eng/downloads-nerodigital-nero-aac-codec.php NeroAACEnc] - AAC编码器,输出mp4或m4a文件。<br />
*[http://haali.cs.msu.ru/mkv Haali媒体分离器] - 分离多种视频文件。<br />
*ArcSoft TotalMedia Theater - 提供DTS-HD解码器。<br />
<br />
把NeroAACEnc的可执行文件放在eac3to的目录里即可被调用。TMT则需要安装,如果安装好了还是没法调用,参考[http://forum.doom9.org/showthread.php?t=154070 这里]和madshi给的信息。安装mkvtoolnix或Haali分离器后,可以把视频封装成mkv。<br />
<br />
eac3to可以显示BD主要播放列表的结构,显示mkv、(m2)ts、VOB、EVO等文件的信息。<br />
也可以解码/编码很多种音频。也可以抽出AC3、E-AC3、DTS(HD/MA)、TrueHD等音轨,或抽出TrueHD的AC3核心。也可以抽出BD的章节文件信息,把MPEG2、AVC、VC-1视频封成Matroska文件。还能干很多事,同时也在不断的添加新功能。<br />
<br />
== 命令 ==<br />
<br />
eac3to是一个命令行工具,和[x264]等一样。命令很简单和人性化。<br />
'''一般性用法:'''<br />
<br />
>eac3to sourcefile[+sourcefile2] [trackno:] [destfile|stdout] [-options]<br />
<br />
*''sourcefile''是源文件,只要eac3to支持。''sourcefile+sourcefile2''是把两个文件按照顺序接在一起,可以用于处理BD中分开的m2ts。<br />
*''trackno: destifile -option''是对特定轨道号以option指定的方式进行处理,输出文件destifile。option对于之前的destifile起作用。可以一次性以不同的方式处理不同的轨道输出多个文件,像这样''trackno1: destifle1 -option1 trackno2: destifile2 -option2''。eac3to会根据destifile的扩展名选择编码。<br />
<br />
<br />
不加选项和输入文件执行eac3to,会返回帮助。<br />
<br />
<br />
== 用法举例 ==<br />
下面以处理CLANNAD的BDMV第一卷为例。<br />
<br />
此BDMV文件夹位于"G:\CLANNAD\BDMV\",BD的树形目录如下:<br />
<br />
G:.<br />
├─BDMV<br />
│ ├─BACKUP<br />
│ │ ├─CLIPINF<br />
│ │ └─PLAYLIST<br />
│ ├─CLIPINF<br />
│ ├─PLAYLIST<br />
│ └─STREAM<br />
└─CERTIFICATE<br />
└─BACKUP <br />
<br />
*查看BD信息<br />
>eac3to "G:\CLANNAD\BDMV\"<br />
1) 00000.mpls, 2:01:30<br />
[0+1+2+3+4+8].m2ts - Chapters, 30 chapters<br />
- h264/AVC, 1080p24 /1.001 (16:9)<br />
- RAW/PCM, Japanese, multi-channel, 48kHz<br />
- DTS Master Audio, Japanese, multi-channel, 48kHz<br />
- RAW/PCM, Japanese, stereo, 48kHz <br />
:直接执行eac3to,什么参数都不加,直接输出BD的章节、音频等信息。<br />
<br />
<br />
*查看章节文件<br />
>eac3to.exe 00000.mpls<br />
1) 00000.mpls, 2:01:30<br />
[0+1+2+3+4+8].m2ts<br />
- Chapters, 30 chapters<br />
- h264/AVC, 1080p24 /1.001 (16:9)<br />
- RAW/PCM, Japanese, multi-channel, 48kHz<br />
- DTS Master Audio, Japanese, multi-channel, 48kHz<br />
- RAW/PCM, Japanese, stereo, 48kHz <br />
:和上面的基本一样。'''查看播放列表是看不到有没有字幕的。'''<br />
<br />
<br />
*抽出章节文件<br />
cd到"G:\CLANNAD\BDMV\STREAM\"<br />
>eac3to ..\PLAYLIST\00000.mpls chap01.txt<br />
:"chap01.txt"会被写入"G:\CLANNAD\BDMV\STREAM\"文件夹。<br />
:chap01.txt里有30个章节,时间是从0000.m2ts到00004.m2ts按顺序排下来的。可以用[http://nmm-hd.org/bbs/thread-1144-1-1.html VempX的章节时间计算工具]处理这个章节文件。<br />
<br />
<br />
*查看00000.m2ts的信息<br />
>eac3to 00000.m2ts<br />
M2TS, 1 video track, 3 audio tracks, 2 subtitle tracks, 0:24:12, 24p /1.001<br />
1: h264/AVC, 1080p24 /1.001 (16:9)<br />
2: RAW/PCM, Japanese, 5.1 channels, 16 bits, 48kHz<br />
3: DTS Master Audio, Japanese, 5.1 channels, 16 bits, 48kHz<br />
(core: DTS, 5.1 channels, 16 bits, 1509kbps, 48kHz)<br />
4: RAW/PCM, Japanese, 2.0 channels, 16 bits, 48kHz<br />
5: Subtitle (PGS), Japanese<br />
6: Subtitle (PGS), English<br />
:eac3to告诉我们,这个文件有视频轨1条,音频轨3条,字幕轨两条,在下面显示出了具体的信息:<br />
#1号视频轨AVC编码,分辨率1080p,帧率24000/1001,比例16/9。<br />
#2号音频轨是PCM(可以认为是wav),语言日语,声道5.1,深度16bits,频率48kHz。<br />
#3号音频轨DTS-MA,语言日语,声道5.1,深度16bits,频率48kHz。同时带了DTS core,同样也是声道5.1,深度16bits,频率48kHz,但码率是1509kbps。<br />
#4号音频轨是PCM,语言日语,声道2.0,深度16bits,频率48kHz。<br />
#5号字幕轨是PGS字幕,语言日语。<br />
#6号字幕轨是PGS字幕,语言英语。<br />
:知道了文件信息后,就可以针对不同的轨道进行处理了。<br />
<br />
<br />
*将5.1声道的PCM编码成无损的FLAC:<br />
>eac3to 00000.m2ts 2: audio_1.flac<br />
:在经过一段时间后,会编码出audio_1.flac。<br />
<br />
<br />
*直接抽出DTS-MA:<br />
>eac3to 00000.m2ts 3: audio_2.dtsma<br />
:eac3to可以同时操作多条轨道<br />
*以640kbps把5.1的PCM压成AC3,从DTS-MA抽出DTS-core,以quality=0.5把2.0的PCM压成AAC,把2.0的PCM压成FLAC,并且抽出日语字幕:<br />
>ea3to 00000.m2ts 2: audio_3.ac3 -640 3: audio_4.dts -core 4: audio_5.m4a -quality=0.5 4: audio_6.flac 5: sub_1.sup<br />
:可以一次都做完。<br />
<br />
<br />
尽管CLANNAD的BD是一个很好很典型的例子,但也有一定局限性。如果BD里有TrueHD音轨,可以抽TrueHD的AC3核心。假设00000.m2ts的第二条轨道是TrueHD。<br />
>eac3to 00000.m2ts 2: auido_c.ac3 <br />
<br />
*更多用法<br />
eac3to source.pcm destination.flac<br />
eac3to source.thd destination.flac destination.ac3<br />
eac3to source.evo 1: chapters.txt 2: video.mkv 3: audio.flac 5: subtitle.sup<br />
eac3to feature_1.evo+feature_2.evo movie.mkv<br />
eac3to blurayMovieFolder movie.mkv<br />
<br />
== 其他 ==<br />
'''解码器'''<br />
<br />
ffmpeg/lavc(eac3to已经内置)可以正确的处理各种音频,除了6.1和7.1声道的DTS(HD)和(E-)AC3。6.1和7.1声道的DTS(HD)需要用ArcSoft的解码器解码,而且ffmpeg/lavc似乎会无视DTS-HD的HD部分。但是现在用7.1声道DTS的动画还没出现过,用6.1声道DTS-HD的EVA2.22里也有同等质量的替代音轨。(E-)AC3方面,madshi推荐用Nero的解码器解码,事实上ffmpeg/lavc完全可以胜任5.1声道以下的解码任务。<br />
因此eac3to内置的ffmpeg/lavc完全能够满足普通需求。<br />
<br />
如果不巧碰到高级音轨了,就尽情折腾吧:)<br />
<br />
<br />
'''GUI'''<br />
<br />
madshi并没有为eac3to写GUI,但有热心人写了GUI,madshi都列在他的帖子里了:<br />
*[http://forum.doom9.org/showthread.php?t=135095 Eac3to and More GUI]<br />
*[http://forum.doom9.org/showthread.php?t=141829 HD DVD/Blu-Ray Stream Extractor]<br />
*[http://forum.slysoft.com/showthread.php?t=25818 Clown BD]<br />
<br />
<br />
'''参考资料'''<br />
<br />
*eac3to - audio conversion tool - http://forum.doom9.org/showthread.php?t=125966<br />
*eac3to @ wikibooks - http://en.wikibooks.org/wiki/Eac3to<br />
*Eac3to and More GUI eac3to的一个GUI - http://forum.doom9.org/showthread.php?t=135095<br />
*Clown BD 分离BD的工具 - http://forum.slysoft.com/showthread.php?t=25818<br />
<br />
[[分类:音频工具]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E5%8E%8B%E7%89%87%E6%96%87%E6%A1%A3&diff=398
压片文档
2010-09-18T14:12:23Z
<p>Lititude:</p>
<hr />
<div>这是一篇压片教程,这篇教程试着在大类的页面里讲操作方法,在名词的页面里讲理论或更细的操作。<br />
<br />
请配合NMM-DOC的其他部分理解这些内容。<br />
<br />
== [[前言]] ==<br />
压片是一个EP的实践过程。压片有千万种理由,比如需要省硬盘空间而压片;比如为了移动设备而压片;比如为了爱而压片;比如纯粹的EP而已……无论出于什么目的,有一些原则是不会变的,有些弯也最好不要试图去绕。<br />
<br />
== [[压制概念|概念]] ==<br />
<br />
[[File:YV12.png|frame|right|YV12色彩空间示意图]]<br />
<br />
压制概念闲谈,请首先理解这些概念。<br />
<br />
[[封装]]<br />
<br />
[[视频]]:[[色彩]]、[[编码原理]]、[[fps]]、[[分辨率]]<br />
<br />
[[音频]]<br />
<br />
== [[播放器|播放]] ==<br />
介绍开源播放器和有关DirectShow的软件。<br />
<br />
[[MPC-HC]]<br />
<br />
[[mplayer]]<br />
<br />
[[VLC]]<br />
<br />
[[GraphStudio]]<br />
<br />
== [[Avisynth 2.5中文文档|AviSynth]] ==<br />
压片必要工具,EP党永远耕作的土地。<br />
<br />
[[avsp|工具]]<br />
<br />
[[源滤镜]]<br />
<br />
[[处理]]<br />
<br />
[[vfr处理]]<br />
<br />
== [[x264使用介绍|视频编码(x264)]] ==<br />
世界上最好的视频编码器。介绍x264的命令行界面用法,用起来很简单。<br />
<br />
[[X264使用介绍#x264的preset和tune系统|preset和tune系统]]<br />
<br />
[[参数解释]]<br />
<br />
[[X264使用介绍#64bit的x264|64bit的x264]]<br />
<br />
[[DXVA和psp]]<br />
<br />
== [[音频]] ==<br />
音频压制等操作。<br />
<br />
[[eac3to]]<br />
<br />
== [[封装]] ==<br />
和mkv、mp4有关的封装工具介绍。<br />
<br />
[[mkvtoolnix]]<br />
<br />
[[mp4box]]<br />
<br />
专题<br />
<br />
== [[DVDrip]] ==<br />
压片的核心课程。二区(日本)的DVD制作混乱,码率不足司空见惯。请特别恨P.A.Works。<br />
<br />
[[IVTC]]<br />
<br />
[[分辨率]]<br />
<br />
[[工具]]<br />
<br />
[[TIVTC]]和[[AAD]]<br />
<br />
[[mencoder]]<br />
<br />
== [[ts]] ==<br />
日本HDTV信号的处理方法,请先学习DVDrip。<br />
<br />
[[Trim]]和[[音频]]<br />
<br />
[[去台标]]<br />
<br />
[[480p和720p]]<br />
<br />
== [[BDrip]] ==<br />
和CPU过不去。</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Eac3to&diff=397
Eac3to
2010-09-18T14:09:59Z
<p>Lititude:以内容''''eac3to'''是一个免费音频转换工具,主要可以用来方便的处理BD。作者是[http://news.madshi.net madshi]。 在[http://forum.doom9.org/showthread.php…'创建新页面</p>
<hr />
<div>'''eac3to'''是一个免费音频转换工具,主要可以用来方便的处理BD。作者是[http://news.madshi.net madshi]。<br />
<br />
在[http://forum.doom9.org/showthread.php?t=125966 doom9讨论帖]里,作者madshi会很友好地回答每个问题的。请不要怕,勇敢的发问吧,当然前提是用英语问他。<br />
<br />
下载: http://madshi.net/eac3to.zip<br />
<br />
配合工具:<br />
*[http://www.bunkus.org/videotools/mkvtoolnix/downloads.html mkvtoolnix] - mkv工具套装。<br />
*[http://www.nero.com/eng/downloads-nerodigital-nero-aac-codec.php NeroAACEnc] - AAC编码器,输出mp4或m4a文件。<br />
*[http://haali.cs.msu.ru/mkv Haali媒体分离器] - 分离多种视频文件。<br />
*ArcSoft TotalMedia Theater - 提供DTS-HD解码器。<br />
<br />
把NeroAACEnc的可执行文件放在eac3to的目录里即可被调用。TMT则需要安装,如果安装好了还是没法调用,参考[http://forum.doom9.org/showthread.php?t=154070 这里]和madshi给的信息。安装mkvtoolnix或Haali分离器后,可以把视频封装成mkv。<br />
<br />
eac3to可以显示BD主要播放列表的结构,显示mkv、(m2)ts、VOB、EVO等文件的信息。<br />
也可以解码/编码很多种音频。也可以抽出AC3、E-AC3、DTS(HD/MA)、TrueHD等音轨,或抽出TrueHD的AC3核心。也可以抽出BD的章节文件信息,把MPEG2、AVC、VC-1视频封成Matroska文件。还能干很多事,同时也在不断的添加新功能。<br />
<br />
== 命令 ==<br />
<br />
eac3to是一个命令行工具,和[x264]等一样。命令很简单和人性化。<br />
'''一般性用法:'''<br />
<br />
>eac3to sourcefile[+sourcefile2] [trackno:] [destfile|stdout] [-options]<br />
<br />
*''sourcefile''是源文件,只要eac3to支持。''sourcefile+sourcefile2''是把两个文件按照顺序接在一起,可以用于处理BD中分开的m2ts。<br />
*''trackno: destifile -option''是对特定轨道号以option指定的方式进行处理,输出文件destifile。option对于之前的destifile起作用。可以一次性以不同的方式处理不同的轨道输出多个文件,像这样''trackno1: destifle1 -option1 trackno2: destifile2 -option2''。eac3to会根据destifile的扩展名选择编码。<br />
<br />
<br />
不加选项和输入文件执行eac3to,会返回帮助。<br />
<br />
<br />
== 用法举例 ==<br />
下面以处理CLANNAD的BDMV第一卷为例。<br />
<br />
此BDMV文件夹位于"G:\CLANNAD\BDMV\",BD的树形目录如下:<br />
<br />
H:.<br />
├─BDMV<br />
│ ├─BACKUP<br />
│ │ ├─CLIPINF<br />
│ │ └─PLAYLIST<br />
│ ├─CLIPINF<br />
│ ├─PLAYLIST<br />
│ └─STREAM<br />
└─CERTIFICATE<br />
└─BACKUP <br />
<br />
*查看BD信息<br />
>eac3to "G:\CLANNAD\BDMV\"<br />
1) 00000.mpls, 2:01:30<br />
[0+1+2+3+4+8].m2ts - Chapters, 30 chapters<br />
- h264/AVC, 1080p24 /1.001 (16:9)<br />
- RAW/PCM, Japanese, multi-channel, 48kHz<br />
- DTS Master Audio, Japanese, multi-channel, 48kHz<br />
- RAW/PCM, Japanese, stereo, 48kHz <br />
:直接执行eac3to,什么参数都不加,直接输出BD的章节、音频等信息。<br />
<br />
<br />
*查看章节文件<br />
>eac3to.exe 00000.mpls<br />
1) 00000.mpls, 2:01:30<br />
[0+1+2+3+4+8].m2ts<br />
- Chapters, 30 chapters<br />
- h264/AVC, 1080p24 /1.001 (16:9)<br />
- RAW/PCM, Japanese, multi-channel, 48kHz<br />
- DTS Master Audio, Japanese, multi-channel, 48kHz<br />
- RAW/PCM, Japanese, stereo, 48kHz <br />
:和上面的基本一样。'''查看播放列表是看不到有没有字幕的。'''<br />
<br />
<br />
*抽出章节文件<br />
cd到"G:\CLANNAD\BDMV\STREAM\"<br />
>eac3to ..\PLAYLIST\00000.mpls chap01.txt<br />
:"chap01.txt"会被写入"G:\CLANNAD\BDMV\STREAM\"文件夹。<br />
:chap01.txt里有30个章节,时间是从0000.m2ts到00004.m2ts按顺序排下来的。可以用[http://nmm-hd.org/bbs/thread-1144-1-1.html VempX的章节时间计算工具]处理这个章节文件。<br />
<br />
<br />
*查看00000.m2ts的信息<br />
>eac3to 00000.m2ts<br />
M2TS, 1 video track, 3 audio tracks, 2 subtitle tracks, 0:24:12, 24p /1.001<br />
1: h264/AVC, 1080p24 /1.001 (16:9)<br />
2: RAW/PCM, Japanese, 5.1 channels, 16 bits, 48kHz<br />
3: DTS Master Audio, Japanese, 5.1 channels, 16 bits, 48kHz<br />
(core: DTS, 5.1 channels, 16 bits, 1509kbps, 48kHz)<br />
4: RAW/PCM, Japanese, 2.0 channels, 16 bits, 48kHz<br />
5: Subtitle (PGS), Japanese<br />
6: Subtitle (PGS), English<br />
:eac3to告诉我们,这个文件有视频轨1条,音频轨3条,字幕轨两条,在下面显示出了具体的信息:<br />
#1号视频轨AVC编码,分辨率1080p,帧率24000/1001,比例16/9。<br />
#2号音频轨是PCM(可以认为是wav),语言日语,声道5.1,深度16bits,频率48kHz。<br />
#3号音频轨DTS-MA,语言日语,声道5.1,深度16bits,频率48kHz。同时带了DTS core,同样也是声道5.1,深度16bits,频率48kHz,但码率是1509kbps。<br />
#4号音频轨是PCM,语言日语,声道2.0,深度16bits,频率48kHz。<br />
#5号字幕轨是PGS字幕,语言日语。<br />
#6号字幕轨是PGS字幕,语言英语。<br />
:知道了文件信息后,就可以针对不同的轨道进行处理了。<br />
<br />
<br />
*将5.1声道的PCM编码成无损的FLAC:<br />
>eac3to 00000.m2ts 2: audio_1.flac<br />
:在经过一段时间后,会编码出audio_1.flac。<br />
<br />
<br />
*直接抽出DTS-MA:<br />
>eac3to 00000.m2ts 3: audio_2.dtsma<br />
:eac3to可以同时操作多条轨道<br />
*以640kbps把5.1的PCM压成AC3,从DTS-MA抽出DTS-core,以quality=0.5把2.0的PCM压成AAC,把2.0的PCM压成FLAC,并且抽出日语字幕:<br />
>ea3to 00000.m2ts 2: audio_3.ac3 -640 3: audio_4.dts -core 4: audio_5.m4a -quality=0.5 4: audio_6.flac 5: sub_1.sup<br />
:可以一次都做完。<br />
<br />
<br />
尽管CLANNAD的BD是一个很好很典型的例子,但也有一定局限性。如果BD里有TrueHD音轨,可以抽TrueHD的AC3核心。假设00000.m2ts的第二条轨道是TrueHD。<br />
>eac3to 00000.m2ts 2: auido_c.ac3 <br />
<br />
*更多用法<br />
eac3to source.pcm destination.flac<br />
eac3to source.thd destination.flac destination.ac3<br />
eac3to source.evo 1: chapters.txt 2: video.mkv 3: audio.flac 5: subtitle.sup<br />
eac3to feature_1.evo+feature_2.evo movie.mkv<br />
eac3to blurayMovieFolder movie.mkv<br />
<br />
== 其他 ==<br />
'''解码器'''<br />
<br />
ffmpeg/lavc(eac3to已经内置)可以正确的处理各种音频,除了6.1和7.1声道的DTS(HD)和(E-)AC3。6.1和7.1声道的DTS(HD)需要用ArcSoft的解码器解码,而且ffmpeg/lavc似乎会无视DTS-HD的HD部分。但是现在用7.1声道DTS的动画还没出现过,用6.1声道DTS-HD的EVA2.22里也有同等质量的替代音轨。(E-)AC3方面,madshi推荐用Nero的解码器解码,事实上ffmpeg/lavc完全可以胜任5.1声道以下的解码任务。<br />
因此eac3to内置的ffmpeg/lavc完全能够满足普通需求。<br />
<br />
如果不巧碰到高级音轨了,就尽情折腾吧:)<br />
<br />
<br />
'''GUI'''<br />
<br />
madshi并没有为eac3to写GUI,但有热心人写了GUI,madshi都列在他的帖子里了:<br />
*[http://forum.doom9.org/showthread.php?t=135095 Eac3to and More GUI]<br />
*[http://forum.doom9.org/showthread.php?t=141829 HD DVD/Blu-Ray Stream Extractor]<br />
*[http://forum.slysoft.com/showthread.php?t=25818 Clown BD]<br />
<br />
<br />
'''参考资料'''<br />
<br />
*eac3to - audio conversion tool - http://forum.doom9.org/showthread.php?t=125966<br />
*eac3to @ wikibooks - http://en.wikibooks.org/wiki/Eac3to<br />
*Eac3to and More GUI eac3to的一个GUI - http://forum.doom9.org/showthread.php?t=135095<br />
*Clown BD 分离BD的工具 - http://forum.slysoft.com/showthread.php?t=25818<br />
<br />
[[分类:音频工具]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Spline64Resize&diff=396
Spline64Resize
2010-09-09T12:15:22Z
<p>Lititude:重定向页面到缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Spline36Resize&diff=395
Spline36Resize
2010-09-09T12:15:18Z
<p>Lititude:重定向页面到缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Spline16Resize&diff=394
Spline16Resize
2010-09-09T12:15:15Z
<p>Lititude:重定向页面到缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#Spline16Resize / Spline36Resize / Spline64Resize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=PointResize&diff=393
PointResize
2010-09-09T12:14:50Z
<p>Lititude:重定向页面到缩放滤镜#PointResize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#PointResize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Lanczos4Resize&diff=392
Lanczos4Resize
2010-09-09T12:14:39Z
<p>Lititude:重定向页面到缩放滤镜#LanczosResize / Lanczos4Resize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#LanczosResize / Lanczos4Resize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=BlackmanResize&diff=391
BlackmanResize
2010-09-09T12:14:26Z
<p>Lititude:重定向页面到缩放滤镜#BlackmanResize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#BlackmanResize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=GaussResize&diff=390
GaussResize
2010-09-09T12:14:17Z
<p>Lititude:重定向页面到缩放滤镜#GaussResize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#GaussResize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=BilinearResize&diff=389
BilinearResize
2010-09-09T12:13:36Z
<p>Lititude:重定向页面到缩放滤镜#BilinearResize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#BilinearResize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=BicubicResize&diff=388
BicubicResize
2010-09-09T12:12:32Z
<p>Lititude:重定向页面到缩放滤镜#BicubicResize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#BicubicResize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=LanczosResize&diff=387
LanczosResize
2010-09-09T12:11:28Z
<p>Lititude:重定向页面到缩放滤镜#LanczosResize / Lanczos4Resize</p>
<hr />
<div>#REDIRECT [[缩放滤镜#LanczosResize / Lanczos4Resize]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Resize&diff=386
Resize
2010-09-09T12:09:44Z
<p>Lititude:重定向页面到缩放滤镜</p>
<hr />
<div>#REDIRECT [[缩放滤镜]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E7%BC%A9%E6%94%BE%E6%BB%A4%E9%95%9C&diff=385
缩放滤镜
2010-09-09T12:06:00Z
<p>Lititude:</p>
<hr />
<div>{{模板:FuncDef|BicubicResize (''clip, 整数 target_width, 整数 target_height, 浮点 "b<nowiki>=</nowiki>1./3.", 浮点 "c<nowiki>=</nowiki>1./3.", 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|BilinearResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|BlackmanResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 整数 "taps<nowiki>=</nowiki>4")}}<br />
<br />
{{模板:FuncDef|GaussResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 浮点 "p<nowiki>=</nowiki>30.")}}<br />
<br />
{{模板:FuncDef|LanczosResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 整数 "taps<nowiki>=</nowiki>4")}}<br />
<br />
{{模板:FuncDef|Lanczos4Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|PointResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline16Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline36Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline64Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
从v2.56开始,可以使用偏移量切边,就像在[[Crop]]里一样。<br />
<br />
比如:<br />
<br />
Lanczos4Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "-src_left", 浮点 "-src_top", 浮点 "-src_left", 浮点 "-src_bottom")}}<br />
<br />
所有的缩放滤镜都有切边的功能,可以切边再缩放。如果在缩放前先写Crop,效果一样的,但是速度会有一些小的差别。<br />
<br />
需要注意的是,边缘的操作上略有差别。用Crop会有严格的边缘,缩放滤镜的作用范围可能会扩展到切掉的部分里,但不会超过画面的物理界限。<br />
<br />
用Crop切掉边界或VHS的顶部switching noise,若用缩放滤镜的切边功能可能会使噪点进入临近的像素。当需要切掉整幅画面的一部分时,用缩放滤镜的切边功能可以保持准确的边界信息。<br />
<br />
Crop(10,10,200,300).BilinearResize(100,150)<br />
<br />
#和以下语句几乎相同<br />
BilinearResize(100,150,10,10,200,300)<br />
<br />
重要信息:'''AviSynth已经完全把纵向和横向的缩放滤镜分开了。'''如果在某个轴的方向上,输入和输出的尺寸相同,这个方向的缩放会被省略掉。哪个方向的缩放先做取决于哪个方向的缩小比例最小。这么做是为了保证尽可能好的质量,因此可以在几乎最好的画面上做第二次缩放。<br />
<br />
<br />
== BilinearResize ==<br />
<br />
'''BilinearResize'''(双线性缩放)滤镜可以把输入的视频拉伸或缩小到任意的新分辨率。如果提供了可选的source的参数,结果和在BilinearResize之前用Crop效果一致。<br />
<br />
BilinearResize使用标准的双线性滤镜,和[[VirtualDub]]的“precise bilinear”缩放选项的效果几乎一样。仅仅是“几乎”,因为VirtualDub的滤镜似乎把缩放参数稍稍搞错了,画面顶上和右边得到的像素会被切掉或重复。(当以两倍或以上的系数放大画面时,这个错误比较明显,但其他情况并不明显,因此不必过分在意。)<br />
<br />
举例:<br />
# 载入一个avi文件,并且缩放到240x180<br />
AVISource("video.avi").BilinearResize(240,180)<br />
<br />
# 载入一个720x480 (CCIR601) 的视频并缩小到352x240 (VCD),<br />
# 保持原高宽比<br />
AVISource("dv.avi").BilinearResize(352, 240, 8, 0, 704, 480)<br />
<br />
# 作用和上个例子一样<br />
AviSource("dv.avi").BilinearResize(352, 240, 8, 0, -8, -0)<br />
<br />
# 把320x240视频的右上1/4取出并拉伸到整幅画面大小<br />
BilinearResize(320,240,160,0,160,120)<br />
<br />
<br />
== BicubicResize ==<br />
<br />
'''BicubicResize'''(双立方缩放)和BilinearResize相似,区别在于用Mitchell-Betravali的两部分立方算法代替了双线性滤镜。参数''b''和''c''用于调整两次立方的特性,某些时候分别指“blurring”和“ringing”。<br />
<br />
当''b'' = 0和''c'' = 0.75时,这个滤镜和VirtualDub的“precise bicubic”完全一样,得到的结果也是完全一样的,除了上述的VirtualDub缩放问题。默认参数''b'' = 1./3.、''c'' = 1./3.,此参数是Mitchell和Netravali在人眼主观测试综合最满意的结果才得到的。增大''b''和''c''的值会得到有趣的反艺术效果——比方说试试''b'' = 和 ''c''= -5。<br />
<br />
如果放大视频,用BicubicResize比BilinearResize得到的画面更好看。然而在缩小时,用BilinearResize可能和BicubicResize一样,甚至优于BicubicResize。尽管VirtualDub的bicubic滤镜比linear的效果好,但这是因为bicubic滤镜锐化了图像,而不是因为形状更好。比较锐利的图像看起来很舒服——但在压缩时非常容易出瑕疵。BicubicResize的默认参数不像VirtualDub那样锐化,但依然比bilinear锐利。若像压低码率的视频,用BilinearResize得到的结果整体较好也很正常。<br />
<br />
为了最精确的数值,滤镜里b和c必须满足如下关系:<br />
b + 2 * c = 1<br />
<br />
因此当b = 0时c可以取最大值0.5,这其实是Catmull-Rom样条曲线。这是一个可以得到较锐利图像的推荐值。<br />
<br />
c > 0.6后滤镜开始“ring”了。这不是真正的锐利,相反会得到像电视的锐化控制一样的效果。b不能取负值,当c > 0,5时,b取0。<br />
<br />
<br />
== BlackmanResize ==<br />
<br />
'''BlackmanResize'''是LanczosResize的改进版,它用高tap数实现了更好的ringing控制效果。<br />
<br />
见[[缩放滤镜#LanczosResize / Lanczos4Resize|LanczosResize]]部分对于tap的解释(默认taps = 4)。(v2.58加入)<br />
<br />
<br />
== GaussResize ==<br />
<br />
'''GaussResize'''的参数''p''(默认值30)可以调节锐化程度。''p''的范围可从1非常模糊到100非常锐利。<br />
<br />
GaussResize用的tap数是4,和Lanczos4Resize的速度差异不大。(v2.56加入)<br />
<br />
<br />
== LanczosResize / Lanczos4Resize ==<br />
<br />
'''LanczosResize'''是c值大约从0.6到0.75左右的BicubicResize的一个替代,BicubicResize的c值这个范围内往往会产生很强烈的锐化。LanczosResize能实现的质量一般更好(瑕疵也更少),画面也很锐利。<br />
<br />
'''Lanczos4Resize'''(v2.56加入)和LanczosResize(真·名称:Lanczos3Resize)有很紧密的联系。缩放方面,LanczosResize使用2*3=个lobes,Lanczos4Resize使用2*4=8个lobes,其结果是Lanczos4Resize能得到更锐利的画面,而这一点特别适合放大图像。<br />
<br />
Lancozs4Resize是LanczosResize(taps=4)的简略形式。<br />
<br />
'''注意:参数taps真正的意义应是lobes(实际上是lobes数值上的一半)。谈到缩放算法时,taps有其他意义,下面会讲到。'''<br />
<br />
<br />
'''差值算法的阶数(taps参数)'''<br />
:设Taps=4,在放大(upsampling)画面时,整个等式包括个输入的4个采样点,这就是滤镜的作用范围,4-tap滤镜由此得来。滤镜并不关心输出多大的画面--仅仅是4 taps而已。<br />
:在缩小(downsampling)画面时,等式包括4个'''目标'''采样点,显然要包括源里的采样点区间更大。因此在缩小两倍时,(缩成原来的一半大小)滤镜包括2*4=8个采样点,因此相当于8 tap。缩小三倍时,相当于给了3*4=12个tap,四倍同样。<br />
:因此缩小时等效的taps数量等于缩小的倍数乘以滤镜的tap数,(于是用Lanczos'''k'''Resize缩小'''T'''倍相当于用T*k个tap)并且入到比该数大的最小的偶数上。当放大时,只是'''k'''个tap而已。来源:avsforum。<br />
<br />
<br />
== PointResize ==<br />
<br />
'''PointResize'''可能是最简单的缩放滤镜。PointResize使用Point采样或最临近算法,这种算法一般会生成块非常严重的图像。因此一般这个滤镜只在想得到较差的质量或想得到清晰像素画时使用。<br />
<br />
此滤镜在放大一片小区域做细微的检测时可发挥作用。<br />
<br />
<br />
== Spline16Resize / Spline36Resize / Spline64Resize ==<br />
<br />
这三个缩放滤镜基于样条插值算法。(v2.56/v2.58加入)样条差值算法可以尽可能的锐化图像,同时产生的ringing瑕疵也比LanczosResize少。'''Spline16Resize'''用sqrt(16)=4个采样点,'''Spline36Resize'''用6个采样点,'''Spline64Resize'''用8个采样点。采样点用的越多,图像就越锐利。[http://web.archive.org/web/20060827184031/http://www.path.unimelb.edu.au/~dersch/interpolator/interpolator.html 对比测试见此]。<br />
<br />
直到今天,AviSynth的作者也不能确定Spline缩放算法的系数是如何推导出来的。如果你知道,请告诉我们。<br />
<br />
<br />
更新日志:<br />
<br />
v2.55 加入Lanczos4Resize。<br />
<br />
v2.56 加入Spline16Resize、Spline36Resize、GaussResize和LanczosResize中的参数taps;加入缩放滤镜中Crop的偏移量表达方式。<br />
<br />
v2.58 加入BlackmanResize、Spline64Resize。<br />
<br />
[[分类:内部滤镜]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E7%BC%A9%E6%94%BE%E6%BB%A4%E9%95%9C&diff=384
缩放滤镜
2010-09-09T12:04:36Z
<p>Lititude:以内容'{{模板:FuncDef|BicubicResize (''clip, 整数 target_width, 整数 target_height, 浮点 "b<nowiki>=</nowiki>1./3.", 浮点 "c<nowiki>=</nowiki>1./3.", 浮点 "src_left", …'创建新页面</p>
<hr />
<div>{{模板:FuncDef|BicubicResize (''clip, 整数 target_width, 整数 target_height, 浮点 "b<nowiki>=</nowiki>1./3.", 浮点 "c<nowiki>=</nowiki>1./3.", 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|BilinearResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|BlackmanResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 整数 "taps<nowiki>=</nowiki>4")}}<br />
<br />
{{模板:FuncDef|GaussResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 浮点 "p<nowiki>=</nowiki>30.")}}<br />
<br />
{{模板:FuncDef|LanczosResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height", 整数 "taps<nowiki>=</nowiki>4")}}<br />
<br />
{{模板:FuncDef|Lanczos4Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|PointResize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline16Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline36Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
{{模板:FuncDef|Spline64Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "src_left", 浮点 "src_top", 浮点 "src_width", 浮点 "src_height")}}<br />
<br />
从v2.56开始,可以使用偏移量切边,就像在[[Crop]]里一样。<br />
<br />
比如:<br />
<br />
Lanczos4Resize (''clip, 整数 target_width, 整数 target_height, 浮点 "-src_left", 浮点 "-src_top", 浮点 "-src_left", 浮点 "-src_bottom")}}<br />
<br />
所有的缩放滤镜都有切边的功能,可以切边再缩放。如果在缩放前先写Crop,效果一样的,但是速度会有一些小的差别。<br />
<br />
需要注意的是,边缘的操作上略有差别。用Crop会有严格的边缘,缩放滤镜的作用范围可能会扩展到切掉的部分里,但不会超过画面的物理界限。<br />
<br />
用Crop切掉边界或VHS的顶部switching noise,若用缩放滤镜的切边功能可能会使噪点进入临近的像素。当需要切掉整幅画面的一部分时,用缩放滤镜的切边功能可以保持准确的边界信息。<br />
<br />
Crop(10,10,200,300).BilinearResize(100,150)<br />
<br />
#和以下语句几乎相同<br />
BilinearResize(100,150,10,10,200,300)<br />
<br />
重要信息:'''AviSynth已经完全把纵向和横向的缩放滤镜分开了。'''如果在某个轴的方向上,输入和输出的尺寸相同,这个方向的缩放会被省略掉。哪个方向的缩放先做取决于哪个方向的缩小比例最小。这么做是为了保证尽可能好的质量,因此可以在几乎最好的画面上做第二次缩放。<br />
<br />
<br />
== BilinearResize ==<br />
<br />
'''BilinearResize'''(双线性缩放)滤镜可以把输入的视频拉伸或缩小到任意的新分辨率。如果提供了可选的source的参数,结果和在BilinearResize之前用Crop效果一致。<br />
<br />
BilinearResize使用标准的双线性滤镜,和[[VirtualDub]]的“precise bilinear”缩放选项的效果几乎一样。仅仅是“几乎”,因为VirtualDub的滤镜似乎把缩放参数稍稍搞错了,画面顶上和右边得到的像素会被切掉或重复。(当以两倍或以上的系数放大画面时,这个错误比较明显,但其他情况并不明显,因此不必过分在意。)<br />
<br />
举例:<br />
# 载入一个avi文件,并且缩放到240x180<br />
AVISource("video.avi").BilinearResize(240,180)<br />
<br />
# 载入一个720x480 (CCIR601) 的视频并缩小到352x240 (VCD),<br />
# 保持原高宽比<br />
AVISource("dv.avi").BilinearResize(352, 240, 8, 0, 704, 480)<br />
<br />
# 作用和上个例子一样<br />
AviSource("dv.avi").BilinearResize(352, 240, 8, 0, -8, -0)<br />
<br />
# 把320x240视频的右上1/4取出并拉伸到整幅画面大小<br />
BilinearResize(320,240,160,0,160,120)<br />
<br />
<br />
== BicubicResize ==<br />
<br />
'''BicubicResize'''(双立方缩放)和BilinearResize相似,区别在于用Mitchell-Betravali的两部分立方算法代替了双线性滤镜。参数''b''和''c''用于调整两次立方的特性,某些时候分别指“blurring”和“ringing”。<br />
<br />
当''b'' = 0和''c'' = 0.75时,这个滤镜和VirtualDub的“precise bicubic”完全一样,得到的结果也是完全一样的,除了上述的VirtualDub缩放问题。默认参数''b'' = 1./3.、''c'' = 1./3.,此参数是Mitchell和Netravali在人眼主观测试综合最满意的结果才得到的。增大''b''和''c''的值会得到有趣的反艺术效果——比方说试试''b'' = 和 ''c''= -5。<br />
<br />
如果放大视频,用BicubicResize比BilinearResize得到的画面更好看。然而在缩小时,用BilinearResize可能和BicubicResize一样,甚至优于BicubicResize。尽管VirtualDub的bicubic滤镜比linear的效果好,但这是因为bicubic滤镜锐化了图像,而不是因为形状更好。比较锐利的图像看起来很舒服——但在压缩时非常容易出瑕疵。BicubicResize的默认参数不像VirtualDub那样锐化,但依然比bilinear锐利。若像压低码率的视频,用BilinearResize得到的结果整体较好也很正常。<br />
<br />
为了最精确的数值,滤镜里b和c必须满足如下关系:<br />
b + 2 * c = 1<br />
<br />
因此当b = 0时c可以取最大值0.5,这其实是Catmull-Rom样条曲线。这是一个可以得到较锐利图像的推荐值。<br />
<br />
c > 0.6后滤镜开始“ring”了。这不是真正的锐利,相反会得到像电视的锐化控制一样的效果。b不能取负值,当c > 0,5时,b取0。<br />
<br />
<br />
== BlackmanResize ==<br />
<br />
'''BlackmanResize'''是LanczosResize的改进版,它用高tap数实现了更好的ringing控制效果。<br />
<br />
见[[缩放滤镜#LanczosResize|LanczosResize]]部分对于tap的解释(默认taps = 4)。(v2.58加入)<br />
<br />
<br />
== GaussResize ==<br />
<br />
'''GaussResize'''的参数''p''(默认值30)可以调节锐化程度。''p''的范围可从1非常模糊到100非常锐利。<br />
<br />
GaussResize用的tap数是4,和Lanczos4Resize的速度差异不大。(v2.56加入)<br />
<br />
<br />
== LanczosResize / Lanczos4Resize ==<br />
<br />
'''LanczosResize'''是c值大约从0.6到0.75左右的BicubicResize的一个替代,BicubicResize的c值这个范围内往往会产生很强烈的锐化。LanczosResize能实现的质量一般更好(瑕疵也更少),画面也很锐利。<br />
<br />
'''Lanczos4Resize'''(v2.56加入)和LanczosResize(真·名称:Lanczos3Resize)有很紧密的联系。缩放方面,LanczosResize使用2*3=个lobes,Lanczos4Resize使用2*4=8个lobes,其结果是Lanczos4Resize能得到更锐利的画面,而这一点特别适合放大图像。<br />
<br />
Lancozs4Resize是LanczosResize(taps=4)的简略形式。<br />
<br />
'''注意:参数taps真正的意义应是lobes(实际上是lobes数值上的一半)。谈到缩放算法时,taps有其他意义,下面会讲到。'''<br />
<br />
<br />
'''差值算法的阶数(taps参数)'''<br />
:设Taps=4,在放大(upsampling)画面时,整个等式包括个输入的4个采样点,这就是滤镜的作用范围,4-tap滤镜由此得来。滤镜并不关心输出多大的画面--仅仅是4 taps而已。<br />
:在缩小(downsampling)画面时,等式包括4个'''目标'''采样点,显然要包括源里的采样点区间更大。因此在缩小两倍时,(缩成原来的一半大小)滤镜包括2*4=8个采样点,因此相当于8 tap。缩小三倍时,相当于给了3*4=12个tap,四倍同样。<br />
:因此缩小时等效的taps数量等于缩小的倍数乘以滤镜的tap数,(于是用Lanczos'''k'''Resize缩小'''T'''倍相当于用T*k个tap)并且入到比该数大的最小的偶数上。当放大时,只是'''k'''个tap而已。来源:avsforum。<br />
<br />
<br />
== PointResize ==<br />
<br />
'''PointResize'''可能是最简单的缩放滤镜。PointResize使用Point采样或最临近算法,这种算法一般会生成块非常严重的图像。因此一般这个滤镜只在想得到较差的质量或想得到清晰像素画时使用。<br />
<br />
此滤镜在放大一片小区域做细微的检测时可发挥作用。<br />
<br />
<br />
== Spline16Resize / Spline36Resize / Spline64Resize ==<br />
<br />
这三个缩放滤镜基于样条插值算法。(v2.56/v2.58加入)样条差值算法可以尽可能的锐化图像,同时产生的ringing瑕疵也比LanczosResize少。'''Spline16Resize'''用sqrt(16)=4个采样点,'''Spline36Resize'''用6个采样点,'''Spline64Resize'''用8个采样点。采样点用的越多,图像就越锐利。[http://web.archive.org/web/20060827184031/http://www.path.unimelb.edu.au/~dersch/interpolator/interpolator.html 对比测试见此]。<br />
<br />
直到今天,AviSynth的作者也不能确定Spline缩放算法的系数是如何推导出来的。如果你知道,请告诉我们。<br />
<br />
<br />
更新日志:<br />
<br />
v2.55 加入Lanczos4Resize。<br />
<br />
v2.56 加入Spline16Resize、Spline36Resize、GaussResize和LanczosResize中的参数taps;加入缩放滤镜中Crop的偏移量表达方式。<br />
<br />
v2.58 加入BlackmanResize、Spline64Resize。<br />
<br />
[[分类:内部滤镜]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Trim&diff=381
Trim
2010-09-08T01:05:16Z
<p>Lititude:</p>
<hr />
<div>{{Template:FuncDef|Trim(clip ''clip'', int ''first_frame'', int ''last_frame'' [, bool ''pad_audio''])|Trim(clip ''clip'', int ''first_frame'', int ''-num_frames'' [, bool ''pad_audio''])}}<br />
<br />
==参数==<br />
<br />
Trim截取一个视频片段中从''first_frame''(首帧)到''last_frame''(末帧)帧数(''first_frame''和''last_frame''也包含在内)。如果该片段包含音频,则音频也会一并被截取。截取时请注意,'''AviSynth计算帧数从0开始,即一个片段的第一帧的编号并不是1,而是0。'''当''last_frame''为0时,Trim会一直截取到视频最后一帧。<br />
<br />
Trim不能被用作单独截取音频片段。如果需要截取音频片段,您需要首先用[[BlankClip]]生成一个空白视频片段,再用[[AudioDub]]将音频视频结合,再将这个片段用Trim截取后,通过[[KillVideo]]删除视频部分,只留下音频。<br />
<br />
''pad_audio'' (默认:true) 使音频和视频保持长度一致,使两者对齐。否则在音频比视频短时,依然会保留一部分无声的部分。在''last_frame''=0和''pad_audio'' = false时,音频和视频流的结尾是没有关联的。<br />
<br />
==一般用例==<br />
<br />
Trim(100,0) # 删掉前100帧,同时对齐音频,<br />
# 或者说也截取也视频一样长的音频。<br />
Trim(100,0,false) # 删掉前100帧的音频和视频<br />
# 得到的视频和音频长度没有关联。<br />
Trim(100,-100) # 同trim(100,199)<br />
Trim(100,199,false) # 音频如果比100帧长,就截取,<br />
# 如果比100帧短,也不对齐。<br />
Trim(0,-1) # 只返回第一帧<br />
Trim(0,100)+Trim(200,300) # 返回第0帧到第100帧和第200帧到第300帧(即删掉了第101帧到第199帧)<br />
<br />
==对视频进行分段处理==<br />
<br />
简单的分段处理<br />
v = avisource("source.avi") #载入视频<br />
v1 = v.trim(0 , 99) #将视频分为v1、v2、v3三段,对v2用blur滤镜进行处理,保留v1、v3原样不动。<br />
v2 = v.trim(100 , 1999).blur()<br />
v3 = v.trim(2000, 0)<br />
v1 + v2 + v3 #将三个段落重新进行拼接。<br />
<br />
使用对混合型视频进行分段处理:<br />
# 假设视频0~99帧为30i(需要进行deinterlace);<br />
# 100~1999帧是pulldown(需要进行IVTC);<br />
# 2000帧之后全部为30p(不需要进行任何处理,直接保留原样)。<br />
v = mpeg2source("source.d2v") #载入视频<br />
v1 = v.trim(0 , 99).nnedi3() #对0~99帧用nnedi3进行deinterlace。<br />
v2 = v.trim(100 , 1999).tfm(mode=3).tdecimate(mode=1).AssumeFPS(30000/1001)<br />
#用[[TIVTC]]对v2段落进行IVTC。由于IVTC之后帧率降为23.976,没办法与v1和v2直接拼接,<br />
#所以这里用[[AssumeFPS]]将v2的帧率修改为29.970(=30000/1001)。<br />
v3 = v.trim(2000, 0)<br />
v1 + v2 + v3 #将三个段落重新进行拼接。<br />
当然,视频输出之后,还需要写对应的[[Timecode]],封装为mkv才能让视频正确播放。<br />
<br />
==高级分段处理==<br />
由于单纯依靠Trim进行复杂的分段和拼接比较麻烦,且分段脚本较为复杂繁冗,不便于阅读和维护,且内存占用率很高不少用户通过自定义脚本函数的方式实现了更加方便的分段处理。<br />
请参考:<br />
# [http://www.nmm-hd.org/bbs/thread-667-1-1.html AAD]脚本包中的aadtrim()函数;<br />
# [http://www.nmm-hd.org/bbs/thread-1201-1-1.html MYEPTools]脚本包中的EPClip()或者[[ClipSlice]]()函数。<br />
# [[ApplayRange]]<br />
<br />
==版本历史==<br />
<br />
{| border="1"<br />
|- <br />
| v2.56<br />
| Added pad audio.<br />
|}<br />
<br />
[[分类:内部滤镜]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=Trim&diff=380
Trim
2010-09-08T00:56:45Z
<p>Lititude:</p>
<hr />
<div>{{Template:FuncDef|Trim(clip ''clip'', int ''first_frame'', int ''last_frame'' [, bool ''pad_audio''])|Trim(clip ''clip'', int ''first_frame'', int ''-num_frames'' [, bool ''pad_audio''])}}<br />
<br />
==参数==<br />
<br />
Trim截取一个视频片段中从''first_frame''(首帧)到''last_frame''(末帧)帧数(''first_frame''和''last_frame''也包含在内)。如果该片段包含音频,则音频也会一并被截取。截取时请注意,'''AviSynth计算帧数从0开始,既一个片段的第一帧的编号并不是1,而是0。'''当''last_frame''为0时,Trim会一直截取到视频最后一帧。<br />
<br />
Trim不能被用作单独截取音频片段。如果需要截取音频片段,您需要首先用[[BlankClip]]生成一个空白视频片段,再用[[AudioDub]]将音频视频结合,再将这个片段用Trim截取后,通过[[KillVideo]]删除视频部分,只留下音频。<br />
<br />
''pad_audio'' (默认:true) 使音频和视频保持长度一致,使两者对齐。否则在音频比视频短时,依然会保留一部分无声的部分。在''last_frame''=0和''pad_audio'' = false时,音频和视频流的结尾是没有关联的。<br />
<br />
==一般用例==<br />
<br />
Trim(100,0) # 删掉前100帧,同时对齐音频,<br />
# 或者说也截取也视频一样长的音频。<br />
Trim(100,0,false) # 删掉前100帧的音频和视频<br />
# 得到的视频和音频长度没有关联。<br />
Trim(100,-100) # 同trim(100,199)<br />
Trim(100,199,false) # 音频如果比100帧长,就截取,<br />
# 如果比100帧短,也不对齐。<br />
Trim(0,-1) # 只返回第一帧<br />
Trim(0,100)+Trim(200,300) # 返回第0帧到第100帧和第200帧到第300帧(即删掉了第101帧到第199帧)<br />
<br />
==对视频进行分段处理==<br />
<br />
简单的分段处理<br />
v = avisource("source.avi") #载入视频<br />
v1 = v.trim(0 , 99) #将视频分为v1、v2、v3三段,对v2用blur滤镜进行处理,保留v1、v3原样不动。<br />
v2 = v.trim(100 , 1999).blur()<br />
v3 = v.trim(2000, 0)<br />
v1 + v2 + v3 #将三个段落重新进行拼接。<br />
<br />
使用对混合型视频进行分段处理:<br />
# 假设视频0~99帧为30i(需要进行deinterlace);<br />
# 100~1999帧是pulldown(需要进行IVTC);<br />
# 2000帧之后全部为30p(不需要进行任何处理,直接保留原样)。<br />
v = mpeg2source("source.d2v") #载入视频<br />
v1 = v.trim(0 , 99).nnedi3() #对0~99帧用nnedi3进行deinterlace。<br />
v2 = v.trim(100 , 1999).tfm(mode=3).tdecimate(mode=1).AssumeFPS(30000/1001)<br />
#用[[TIVTC]]对v2段落进行IVTC。由于IVTC之后帧率降为23.976,没办法与v1和v2直接拼接,<br />
#所以这里用[[AssumeFPS]]将v2的帧率修改为29.970(=30000/1001)。<br />
v3 = v.trim(2000, 0)<br />
v1 + v2 + v3 #将三个段落重新进行拼接。<br />
当然,视频输出之后,还需要写对应的[[Timecode]],封装为mkv才能让视频正确播放。<br />
<br />
==高级分段处理==<br />
由于单纯依靠Trim进行复杂的分段和拼接比较麻烦,且分段脚本较为复杂繁冗,不便于阅读和维护,且内存占用率很高不少用户通过自定义脚本函数的方式实现了更加方便的分段处理。<br />
请参考:<br />
# [http://www.nmm-hd.org/bbs/thread-667-1-1.html AAD]脚本包中的aadtrim()函数;<br />
# [http://www.nmm-hd.org/bbs/thread-1201-1-1.html MYEPTools]脚本包中的EPClip()或者[[ClipSlice]]()函数。<br />
# [[ApplayRange]]<br />
<br />
==版本历史==<br />
<br />
{| border="1"<br />
|- <br />
| v2.56<br />
| Added pad audio.<br />
|}<br />
<br />
[[分类:内部滤镜]]</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E4%BD%BF%E7%94%A8AviSynth%E5%81%9ADVDrip&diff=315
使用AviSynth做DVDrip
2010-08-13T15:07:42Z
<p>Lititude:/* 使用TIVTC做IVTC */</p>
<hr />
<div>围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步<br />
*判断类型,IVTC或反交错<br />
*保持正确的SAR<br />
*编码及封装<br />
<br />
<br />
== 准备工作 ==<br />
<br />
=== Telecine概念 ===<br />
'''IVTC(InVerse TeleCine,反胶卷过带)'''是DVDRip中的一个基本概念。<br />
<br />
为了将电影(24fps)转换到NTSC电视(30fps)上能够正常播放的格式,需要作'''Telecine(胶卷过带)'''。其做法是先把电影的一帧拆成两个场,拥有第0条扫描线的场叫top field(顶场),也叫odd field(奇数场),拥有第1条扫描线的场叫bottom field(底场),也叫even field(偶数场)。0t和0b两个场可以组成完整的第0帧。<br />
<br />
取出前4帧看,拆成了8个场,重新组合(这里用top field first,tff):<br />
<br />
{|style = "width:40%" border = 1px <br />
|-<br />
|0t||1t||1t||2t||3t<br />
|-<br />
|0b||1b||2b||3b||3b<br />
|-<br />
|A||B||C||D||E<br />
|}<br />
<br />
这样8个场又以这种方式组成了5帧。24帧中每4帧都如此组合,24 * 5 / 4 = 30,就成了30fps的影片。因为原来的显像管电视本来就是交错显示的,这种方式看起来并不会有问题但是电脑显示器或液晶电视是逐行扫描的,其中的C和D帧由于是由两个来自不同帧的场组成的,因此看起来可能就有交错,有人称为梳状波纹。<br />
<br />
以上这个过程叫做3:2 pulldhwon。做过3:2 pulldown的电影就变成30fps的了,在NTSC的电视上播放就没有同步问题了,NTSC的DVD也用此种方式的视频。但是在电脑上播放每5张画面会有2张有交错,有人称之为“5烂2”。这种DVD处理起来最简单。<br />
<br />
30fps的影片就不必做3:2 pulldown了,因为本来就是30fps的。<br />
<br />
电影要在pal的电视上播放,需要做2:2 pulldown。不过没有NTSC那样的复杂组合,只是将播放速度加快5%,既把24fps的画面以25fps播放,声音也加快5%,保持同步。<br />
<br />
把3:2 pulldown后的30fps通过重新组合场,删掉重复的帧,还原成原本的24fps的过程叫做IVTC广义上的IVTC包括了处理混合类型的DVD,还原成正常帧率的过程。<br />
<br />
=== DVD的类型 ===<br />
要正确的IVTC,首先要明白动画DVD的'''类型''':<br />
#'''Film'''<br />
#:3:2 pulldown的类型。<br />
#:有些DVD encoder在压制前会先做IVTC,再做压缩,这样做的好处是每5帧可以省掉1帧,而且可以对纯净的帧进行编码,帧的压缩率比场要高。但是如何在NTSC电视上播放呢?编码器会写入pulldown flag,解码器在播放时按照pulldown flag播放画面,就能在NTSC电视上同步了。<br />
#:绝大多数电影都是在完成剪辑后再去telecine,然后以这种方式编码的,处理起来非常简单。在DGIndex里Force film,就会输出24fps无交错的。DGIndex报告95%film以上的类型用Force Film处理。<br />
#:也有剪辑的乱七八糟的pulldown的片子,在压DVD时不做IVTC。这种片子也会在IVTC之后也会还原成24fps,但是不能在DGIndex里用Force Film,要用honor pulldown flag。IVTC的工作交给IVTC滤镜处理。<br />
#'''NTSC Video'''<br />
#:本身就是30fps的片子,在DVD里也存为30fps。这种片子不能做IVTC,不然每5帧就会少1帧,动态就不连贯了。<br />
#:DGIndex里报告95%Video以上的片子就是这种片子,前提是源是逐行扫描的。30i的隔行扫描需要做Deinterlace。<br />
#'''Hybrid'''<br />
#:混合了film和和video的DVD。有很多具体的情况。<br />
#*30p是30p,pulldown的是pulldown的,互不影响。比如OP/ED是30p,正片是pulldown。<br />
#*30p和pulldown内容交叉溶解。<br />
#*30i滚动字幕覆盖在pulldown的画面上。<br />
#*淡入淡出处是30i的。<br />
#*前景是pulldown的,背景是30p的。<br />
#*先telecine再拉伸的。<br />
#*画中画的pattern或类型不一样的。<br />
#*剪辑时少掉一个场,造成scene cut处无法匹配。<br />
<br />
<br />
===常见的IVTC工艺===<br />
<br />
*场匹配 Field Match<br />
*:把场和之前之后的场组合,还原出无交错的帧。<br />
*反交错 Deinterlace<br />
*:这里是狭义的反交错,把场补成帧,但保持帧率不变。<br />
*Bob<br />
*:由于Interlaced视频每个场是在不同的时间拍摄的,比如NTSC DV拍摄的视频每秒拍摄60个场,相当于30fps。为了保持动态,把每个场都补成帧,就形成了60fps。二倍帧率并补全每个场的过程叫Bob。<br />
*Decimate<br />
*:删除场匹配后重复的帧,还原原本的帧率。<br />
<br />
一部片里可能会遇到各种情况,比如有些地方是pulldown的,能做成24p,有些地方必须bob到60fps,因此只用一种帧率,即cfr就无法兼顾,这时候就必须把片子作成[[vfr]]的。[[mkv]]和[[mp4]]都支持vfr。<br />
<br />
=== 准备工具 ===<br />
<br />
*VirtualCloneCD或Deamon等虚拟光驱工具和DVDDecrypt<br />
*:用于抽出一话一话的vob和其他工作,比如也可以抽章节文件。<br />
*DGIndex<br />
*:存d2v,包含视频解码器,分离音频<br />
*AviSynth及其插件、IDE(avsp)和文本编辑器<br />
*:IVTC等工作<br />
*x264<br />
*:视频编码器<br />
*音频压缩工具<br />
*mkvtoolnix或mp4box<br />
*:封装工具<br />
<br />
<br />
== DVDrip中视频处理部分 ==<br />
=== 用DVD Decrypt按照不同话数抽出 ===<br />
用虚拟光驱载入DVDISO,打开DVDDecrypt,用ifo模式,找到合适的章节,注意要选择完整的一话。靠什么判断选择了完整的一话呢?注意下面的时间,再说,抽出来试试不就知道了。<br />
<br />
图-DVDdecrypt截图,标注光驱、目标目录、选择章节。<br />
<br />
如果没有设置过切割选项,DVDDecrypt则默认按照1GB分割文件。不过没有什么影响,DGIndex可以打开多个文件。<br />
<br />
DVDDecrypt还可以抽出章节文件,但这个不准,必须调整。<br />
<br />
图-DVDDecrypt设置截图,不分割文件<br />
<br />
图-DVDDecrypt设置截图,抽出章节文件<br />
<br />
=== 用DGIndex保存d2v ===<br />
用DGIndex打开抽出来的vob,按F4(或file->play)后DGIndex开始播放片子,并且会出现一个信息窗口。我们需要借助信息窗口返回的信息初步判断片子的类型。<br />
<br />
我们看到Video Type是film,那么这个片子是film类型的,我们可以直接选择force film,这样在avs里载入d2v会得到24fps的正确帧率的视频。因此说film类型的DVD最简单。除了film类型,DGIndex还会返回另一种类型:Video。<br />
<br />
'''Frame Struct'''是Frame,表示此帧是按照Frame编码的。还有按照Field编码的。<br />
<br />
'''Frame Type'''是Progressive,只是反应MPEG2码流中的progressive_frame旗标,和片源到底是隔行扫描/逐行扫描没有关系。把逐行扫描当作隔行扫描和把隔行扫描当作逐行扫描压制的有不少。<br />
<br />
我们可以试试在菜单的Video->Field Operation里选择Honor Pulldown Flags,保存一个d2v。DGIndex会读取整个流的数据,生成d2v文件,同时还会分离出音频。等保存完毕,再看信息框:<br />
<br />
图->保存完毕时的信息框。<br />
<br />
可以看到100%Film,这下就可以放心大胆的Force Film了,但其实靠刚才的预览就可以放心force film。当Film不足95%时,选择Honor Pulldown Flags模式。'''注意千万不要选错,把不能Force Film的给Force Film了,是得不到正确结果的。'''<br />
<br />
在Video菜单里,还有别的会影响解码的选项。在Avs里载入d2v,DGDecodec会直接把解码后的YV12传递过来,这里设置的PC/TV Scale是不影响的。Crop是会影响avs里的画面的。这里的Crop滤镜在高度上必须切4的倍数,在宽度上可以切2的倍数,原因请复习[[YV12色彩空间]]。<br />
<br />
=== IVTC操作 ===<br />
<br />
得到了d2v,我们就可以用avs了。先把DGIndex文件夹里的DGDecodec.dll放到avs的[[语法:插件]]插件自动加载目录里。打开avsp,把d2v拖进去,avsp会自动生成一行<br />
MPEG2Source("Direction\DVDvob.d2v")<br />
如果有其他选项,就去掉;如果你想知道具体有哪些选项,这些选项是什么意思,就看[http://neuron2.net/dgmpgdec/DGDecodeManual.html DGDecode的Manual]吧。<br />
<br />
MPEG2Source是源滤镜,负责解码并载入vob中的视频流。<br />
<br />
此时会得到一个720x480的视频。假如刚才是Force Film后存的d2v,这一步就不要看了,直接看[[选择正确的分辨率]]。如果没有Force Film,就利用AviSynth以及他的插件和脚本做IVTC。<br />
<br />
常用的IVTC和反交错插件有:<br />
*[[TIVTC]]<br />
*[[a60224]]<br />
*[[nnedi2|nnedi系列]]<br />
*[[TDeint]]<br />
*[[vinverse]]<br />
<br />
还有一些IVTC和反交错脚本:<br />
*[[AAD]]<br />
*[[AnimeIVTC]]<br />
*[[TGMC]]<br />
<br />
如果下面冒出来了新的插件,也不要惊讶<br />
<br />
<br />
==== 使用TIVTC做IVTC ====<br />
TIVTC是tritical大神写的一套IVTC滤镜,包括<br />
*tfm - 场匹配滤镜,先用多种方式组合附近的场,以匹配成完整的帧,即没有交错的帧。如果实在没有办法匹配出完整的无交错的帧,就把该帧反交错(DeInterlace)掉。<br />
*tdecimate - 删掉重复的多余帧的滤镜,可以用2pass实现vfr。<br />
*Mergehints、RequestLinear、FrameDiff、FieldDiff和ShowCombedTIVTC - 众多辅助滤镜。<br />
*IsCombedTIVTC、CFieldDiff和CFrameDiff - 条件函数,用来给ConditionFilter当判定标准的函数。<br />
<br />
一般只用到tfm和tdecimate。<br />
<br />
[[TIVTC|TIVTC的manual给出了9个例子]],都非常简单易用,基本概括了各种情况。<br />
<br />
<br />
事实上,TIVTC自动处理情况复杂的动画还是远远不够的。动画中的渐变,包括淡入淡出和场景之间的交叉溶解在内的渐变,有非常大的隔行扫描频率。也就是说渐变场景处是没有完整帧的,无法匹配出原本逐行扫描的帧。但是在这种地方,tfm是相当无力的,经常发生检测不出来的情况,把这些帧当作匹配成功而错误地放走。<br />
<br />
好在tfm提供了一种更灵活的方法,用一个称为ovr的文本文件强制某一帧用某个pattern匹配,或者强制其反交错行为。见[[TIVTC/ovr]]。<br />
<br />
==== 使用AAD做IVTC操作 ====<br />
AAD()<br />
<br />
=== 选择正确的分辨率 ===<br />
<br />
之前曾提到,DVD大多数是可变高宽比的,产生可变高宽比是因为现实的摄像机一般会拍摄宽屏的,16:9或2.35:1的画面,但是NTSC的DVD分辨率是720x480,PAL的DVD分辨率720x576,并不是4:3或16:9,因此在DVD的MPEG2码流中会标明DAR,播放时按照这个标记将画面拉伸至该比例,而且2.35:1的影片会在画面上加黑边,以保证比例正确。加黑边称为letterbox,拉伸至16:9称为Anamorphic。<br />
<br />
我们的目的是最终得到画面比例正确的视频,特别指解码后显示出来的SAR为视频,而且不留黑边。一般来说有两种做法,一是在压制前把SAR调整到1:1,二是在压制时给码流定义SAR,播放时就能得到不变形的画面,两种方法都要裁掉黑边。<br />
<br />
公式: 目标分辨率 = 当前分辨率 x SAR<br />
原则:黑边切干净,变形尽可能小,mod2,但是为了迁就传统,大多数时候考虑mod8。不要怕切掉画面,准备切掉的这部分画面本来就是在电视上会被切掉的部分,这些边缘的画面是为了保险起见设置的OverScan。<br />
<br />
<br />
观察DGIndex信息框的提示,一般有以下几种DVD。<br />
<br />
#NTSC 4:3,分辨率720x480,SAR=10:11<br />
##左右各切8像素,得到704x480,再缩放至640x480<br />
##:AviSynth中: LanczosResize(640, 480, 8, 0, -8, 0)<br />
##:640/480 = 704/480 x 10/11<br />
##:由于缩放到640x480比不缩放利用码流SAR的分辨小,可以省码率,一般没有人用10:11的SAR做DVDrip。<br />
#NTSC 16:9,分辨率720x480,SAR=40:33<br />
##左右'''共'''切7像素,再缩放至864x480<br />
##:LanczosResize(864, 480, 4, 0, -3, 0)<br />
##:864/480 = 713/480 x 40/33 x 0.99971954 <br />
##:误差在3%%左右,非常小。<br />
##:若发现黑边比较大,总共切7不够,就多切一点。切到706,在缩放到856x480<br />
##:LancozsResize(856, 480, 7, 0, -7, 0)<br />
##:856/480 = 706/480 x 40/33 x 1.000283286<br />
##:误差也很小。<br />
##利用H.264的SAR<br />
##:首先把黑边切干净,不要在AviSynth里缩放,用x264时加一个选项:'''--sar 40:33'''。一定要在x264里加这个参数,不然即使在容器里设置了DAR,播放器可能还是会无视掉容器的DAR,但是视频码流的SAR是不会被解码器/播放器忽视的,在播放时会自动按照视频码流的SAR拉伸。<br />
#PAL 4:3,分辨率720x576,SAR<br />
#PAL 16:9<br />
<br />
可以使用avsp的Resize Calculator辅助计算切多少边、缩放到多少、比例误差是多少。<br />
<br />
=== 不要改变色彩 ===<br />
从MPEG2Source会输出YV12的视频,在AviSynth里也是全程YV12处理。不要在AviSynth里动色彩。<br />
<br />
==== YC伸张 ====<br />
<br />
可能你已经注意到了在DGIndex里的选择TV Scale和PC Scale,色彩是不同的。选择PC Scale时色彩很饱满,很鲜艳,选择TV Scale时显得比较“灰”。这涉及到YUV范围的问题。在电脑上亮度Luma的范围是0~255,色度Chroma的范围也是0~255,但是在TV上为了一些冗余,亮度Luma范围是16~235,色度Chroma的范围是20~240。电视将TV Scale范围内的色彩转换为RGB,范围外的就丢掉了。电脑上则相反,从0到255都用上了。DVD原本是在电视上播放的,因此编码时也用TV Scale,这就导致在电脑上播放时本应该是黑色的地方却是灰色的。很多人将这种情况称为“黑位不准”,其实是不明白这中间的原因。现在的播放器大多数都会自动将TV Scale的转换到PC Scale,因此在DVDrip时不要动“level”,将转换工作交给播放时的软件做。<br />
<br />
但是播放时会不会做转换很复杂,不同的播放器、解码器、渲染器、显卡以及显卡驱动表现出的行为均不太一样,可以参考这篇研究:<br />
<br />
=== YUV<->RGB转换系数 ===<br />
我们用到的显示设备是用RGB色彩空间的,但是MPEG视频里是用YUV色彩空间的,这就涉及到RGB和YUV互相转换的问题。<br />
除了上面的YV伸张,还有转换矩阵(转换系数)。ITU推荐了两种转换系数:ITU-R BT.601和ITU-R BT.709。前者ITU-R BT.601主要用在DVD等标清的视频中,ITU-R BT.709主要用在HDTV、BluRay等高清的视频中。<br />
<br />
我们在DGIndex里面已经见过转换系数了,在DGIndex信息栏的Colorimetry一栏,其中BT.470-2 B,G*表示MPEG2中并没有指定转换矩阵,DGIndex按照标清级别的分辨率推测位BT.470-2。其实BT.470-2和ITU-R BT.601是一样的,因此这个DVD就是用ITU-R BT.601。<br />
<br />
实际上,现在的播放器、解码器、渲染器也是按照分辨率选择变换矩阵的。标清的(720p以下)就用ITU-R BT.601,高清(720p及以上)则用ITU-R BT.709。因此,在做DVDrip的过程中'''不能改变色彩变换矩阵'''。<br />
<br />
更进一步,在做SD<-->HD的缩放时,必须改变YUV的值,让渲染器用分辨率对应的变换时,能够播放出色彩正确的画面。用AviSynth的ColorMatrix插件。<br />
<br />
SD->HD<br />
ColorMatrix(clip, "BT.601->BT.709")<br />
<br />
HD->SD<br />
ColorMatrix(clip, "BT.709->BT.601")<br />
<br />
如果在SD范围内缩放,像在分辨率一节所讲的例子,'''不要改变色彩变换矩阵'''。<br />
<br />
接下来可以降噪、锐化,让画面看起来更舒服,看个人喜好了。<br />
<br />
总结视频处理过程,有以下几步:<br />
<br />
{| class= "wikitable" <br />
|-<br />
!判断类型 -> IVTC -> 改变分辨率 [-> 降噪等处理]<br />
|}<br />
<br />
如果选择输出SAR=1:1的画面,那么'''缩放一定要在ITVC之后做'''。<br />
<br />
之后就可以交给x264压制了。<br />
<br />
== 音频处理 ==<br />
<br />
从DGIndex里抽出了音频,一般是AC3、LPCM(wav)等。AC3可以直接封装,LPCM最好[[音频压缩|压一下]]。<br />
<br />
== 其他DVDrip方案 ==<br />
[[Direct264]]<br />
<br />
[[用mencoder做DVDrip]]<br />
<br />
{{分类:DVDrip}}<br />
{{分类:视频编码器}}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E4%BD%BF%E7%94%A8AviSynth%E5%81%9ADVDrip&diff=314
使用AviSynth做DVDrip
2010-08-13T14:56:45Z
<p>Lititude:/* 使用TIVTC做IVTC */</p>
<hr />
<div>围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步<br />
*判断类型,IVTC或反交错<br />
*保持正确的SAR<br />
*编码及封装<br />
<br />
<br />
== 准备工作 ==<br />
<br />
=== Telecine概念 ===<br />
'''IVTC(InVerse TeleCine,反胶卷过带)'''是DVDRip中的一个基本概念。<br />
<br />
为了将电影(24fps)转换到NTSC电视(30fps)上能够正常播放的格式,需要作'''Telecine(胶卷过带)'''。其做法是先把电影的一帧拆成两个场,拥有第0条扫描线的场叫top field(顶场),也叫odd field(奇数场),拥有第1条扫描线的场叫bottom field(底场),也叫even field(偶数场)。0t和0b两个场可以组成完整的第0帧。<br />
<br />
取出前4帧看,拆成了8个场,重新组合(这里用top field first,tff):<br />
<br />
{|style = "width:40%" border = 1px <br />
|-<br />
|0t||1t||1t||2t||3t<br />
|-<br />
|0b||1b||2b||3b||3b<br />
|-<br />
|A||B||C||D||E<br />
|}<br />
<br />
这样8个场又以这种方式组成了5帧。24帧中每4帧都如此组合,24 * 5 / 4 = 30,就成了30fps的影片。因为原来的显像管电视本来就是交错显示的,这种方式看起来并不会有问题但是电脑显示器或液晶电视是逐行扫描的,其中的C和D帧由于是由两个来自不同帧的场组成的,因此看起来可能就有交错,有人称为梳状波纹。<br />
<br />
以上这个过程叫做3:2 pulldhwon。做过3:2 pulldown的电影就变成30fps的了,在NTSC的电视上播放就没有同步问题了,NTSC的DVD也用此种方式的视频。但是在电脑上播放每5张画面会有2张有交错,有人称之为“5烂2”。这种DVD处理起来最简单。<br />
<br />
30fps的影片就不必做3:2 pulldown了,因为本来就是30fps的。<br />
<br />
电影要在pal的电视上播放,需要做2:2 pulldown。不过没有NTSC那样的复杂组合,只是将播放速度加快5%,既把24fps的画面以25fps播放,声音也加快5%,保持同步。<br />
<br />
把3:2 pulldown后的30fps通过重新组合场,删掉重复的帧,还原成原本的24fps的过程叫做IVTC广义上的IVTC包括了处理混合类型的DVD,还原成正常帧率的过程。<br />
<br />
=== DVD的类型 ===<br />
要正确的IVTC,首先要明白动画DVD的'''类型''':<br />
#'''Film'''<br />
#:3:2 pulldown的类型。<br />
#:有些DVD encoder在压制前会先做IVTC,再做压缩,这样做的好处是每5帧可以省掉1帧,而且可以对纯净的帧进行编码,帧的压缩率比场要高。但是如何在NTSC电视上播放呢?编码器会写入pulldown flag,解码器在播放时按照pulldown flag播放画面,就能在NTSC电视上同步了。<br />
#:绝大多数电影都是在完成剪辑后再去telecine,然后以这种方式编码的,处理起来非常简单。在DGIndex里Force film,就会输出24fps无交错的。DGIndex报告95%film以上的类型用Force Film处理。<br />
#:也有剪辑的乱七八糟的pulldown的片子,在压DVD时不做IVTC。这种片子也会在IVTC之后也会还原成24fps,但是不能在DGIndex里用Force Film,要用honor pulldown flag。IVTC的工作交给IVTC滤镜处理。<br />
#'''NTSC Video'''<br />
#:本身就是30fps的片子,在DVD里也存为30fps。这种片子不能做IVTC,不然每5帧就会少1帧,动态就不连贯了。<br />
#:DGIndex里报告95%Video以上的片子就是这种片子,前提是源是逐行扫描的。30i的隔行扫描需要做Deinterlace。<br />
#'''Hybrid'''<br />
#:混合了film和和video的DVD。有很多具体的情况。<br />
#*30p是30p,pulldown的是pulldown的,互不影响。比如OP/ED是30p,正片是pulldown。<br />
#*30p和pulldown内容交叉溶解。<br />
#*30i滚动字幕覆盖在pulldown的画面上。<br />
#*淡入淡出处是30i的。<br />
#*前景是pulldown的,背景是30p的。<br />
#*先telecine再拉伸的。<br />
#*画中画的pattern或类型不一样的。<br />
#*剪辑时少掉一个场,造成scene cut处无法匹配。<br />
<br />
<br />
===常见的IVTC工艺===<br />
<br />
*场匹配 Field Match<br />
*:把场和之前之后的场组合,还原出无交错的帧。<br />
*反交错 Deinterlace<br />
*:这里是狭义的反交错,把场补成帧,但保持帧率不变。<br />
*Bob<br />
*:由于Interlaced视频每个场是在不同的时间拍摄的,比如NTSC DV拍摄的视频每秒拍摄60个场,相当于30fps。为了保持动态,把每个场都补成帧,就形成了60fps。二倍帧率并补全每个场的过程叫Bob。<br />
*Decimate<br />
*:删除场匹配后重复的帧,还原原本的帧率。<br />
<br />
一部片里可能会遇到各种情况,比如有些地方是pulldown的,能做成24p,有些地方必须bob到60fps,因此只用一种帧率,即cfr就无法兼顾,这时候就必须把片子作成[[vfr]]的。[[mkv]]和[[mp4]]都支持vfr。<br />
<br />
=== 准备工具 ===<br />
<br />
*VirtualCloneCD或Deamon等虚拟光驱工具和DVDDecrypt<br />
*:用于抽出一话一话的vob和其他工作,比如也可以抽章节文件。<br />
*DGIndex<br />
*:存d2v,包含视频解码器,分离音频<br />
*AviSynth及其插件、IDE(avsp)和文本编辑器<br />
*:IVTC等工作<br />
*x264<br />
*:视频编码器<br />
*音频压缩工具<br />
*mkvtoolnix或mp4box<br />
*:封装工具<br />
<br />
<br />
== DVDrip中视频处理部分 ==<br />
=== 用DVD Decrypt按照不同话数抽出 ===<br />
用虚拟光驱载入DVDISO,打开DVDDecrypt,用ifo模式,找到合适的章节,注意要选择完整的一话。靠什么判断选择了完整的一话呢?注意下面的时间,再说,抽出来试试不就知道了。<br />
<br />
图-DVDdecrypt截图,标注光驱、目标目录、选择章节。<br />
<br />
如果没有设置过切割选项,DVDDecrypt则默认按照1GB分割文件。不过没有什么影响,DGIndex可以打开多个文件。<br />
<br />
DVDDecrypt还可以抽出章节文件,但这个不准,必须调整。<br />
<br />
图-DVDDecrypt设置截图,不分割文件<br />
<br />
图-DVDDecrypt设置截图,抽出章节文件<br />
<br />
=== 用DGIndex保存d2v ===<br />
用DGIndex打开抽出来的vob,按F4(或file->play)后DGIndex开始播放片子,并且会出现一个信息窗口。我们需要借助信息窗口返回的信息初步判断片子的类型。<br />
<br />
我们看到Video Type是film,那么这个片子是film类型的,我们可以直接选择force film,这样在avs里载入d2v会得到24fps的正确帧率的视频。因此说film类型的DVD最简单。除了film类型,DGIndex还会返回另一种类型:Video。<br />
<br />
'''Frame Struct'''是Frame,表示此帧是按照Frame编码的。还有按照Field编码的。<br />
<br />
'''Frame Type'''是Progressive,只是反应MPEG2码流中的progressive_frame旗标,和片源到底是隔行扫描/逐行扫描没有关系。把逐行扫描当作隔行扫描和把隔行扫描当作逐行扫描压制的有不少。<br />
<br />
我们可以试试在菜单的Video->Field Operation里选择Honor Pulldown Flags,保存一个d2v。DGIndex会读取整个流的数据,生成d2v文件,同时还会分离出音频。等保存完毕,再看信息框:<br />
<br />
图->保存完毕时的信息框。<br />
<br />
可以看到100%Film,这下就可以放心大胆的Force Film了,但其实靠刚才的预览就可以放心force film。当Film不足95%时,选择Honor Pulldown Flags模式。'''注意千万不要选错,把不能Force Film的给Force Film了,是得不到正确结果的。'''<br />
<br />
在Video菜单里,还有别的会影响解码的选项。在Avs里载入d2v,DGDecodec会直接把解码后的YV12传递过来,这里设置的PC/TV Scale是不影响的。Crop是会影响avs里的画面的。这里的Crop滤镜在高度上必须切4的倍数,在宽度上可以切2的倍数,原因请复习[[YV12色彩空间]]。<br />
<br />
=== IVTC操作 ===<br />
<br />
得到了d2v,我们就可以用avs了。先把DGIndex文件夹里的DGDecodec.dll放到avs的[[语法:插件]]插件自动加载目录里。打开avsp,把d2v拖进去,avsp会自动生成一行<br />
MPEG2Source("Direction\DVDvob.d2v")<br />
如果有其他选项,就去掉;如果你想知道具体有哪些选项,这些选项是什么意思,就看[http://neuron2.net/dgmpgdec/DGDecodeManual.html DGDecode的Manual]吧。<br />
<br />
MPEG2Source是源滤镜,负责解码并载入vob中的视频流。<br />
<br />
此时会得到一个720x480的视频。假如刚才是Force Film后存的d2v,这一步就不要看了,直接看[[选择正确的分辨率]]。如果没有Force Film,就利用AviSynth以及他的插件和脚本做IVTC。<br />
<br />
常用的IVTC和反交错插件有:<br />
*[[TIVTC]]<br />
*[[a60224]]<br />
*[[nnedi2|nnedi系列]]<br />
*[[TDeint]]<br />
*[[vinverse]]<br />
<br />
还有一些IVTC和反交错脚本:<br />
*[[AAD]]<br />
*[[AnimeIVTC]]<br />
*[[TGMC]]<br />
<br />
如果下面冒出来了新的插件,也不要惊讶<br />
<br />
<br />
==== 使用TIVTC做IVTC ====<br />
TIVTC是tritical大神写的一套IVTC滤镜,包括<br />
*tfm - 场匹配滤镜,先用多种方式组合附近的场,以匹配成完整的帧,即没有交错的帧。如果实在没有办法匹配出完整的无交错的帧,就把该帧反交错(DeInterlace)掉。<br />
*tdecimate - 删掉重复的多余帧的滤镜,可以用2pass实现vfr。<br />
*Mergehints、RequestLinear、FrameDiff、FieldDiff和ShowCombedTIVTC - 众多辅助滤镜。<br />
*IsCombedTIVTC、CFieldDiff和CFrameDiff - 条件函数,用来给ConditionFilter当判定标准的函数。<br />
<br />
一般只用到tfm和tdecimate。<br />
<br />
[[[TIVTC|TIVTC的manual给出了9个例子]],都非常简单易用,基本概括了各种情况。<br />
<br />
<br />
事实上,TIVTC自动处理情况复杂的动画还是远远不够的。动画中的渐变,包括淡入淡出和场景之间的交叉溶解在内的渐变,有非常大的隔行扫描频率。也就是说渐变场景处是没有完整帧的,无法匹配出原本逐行扫描的帧。但是在这种地方,tfm是相当无力的,经常发生检测不出来的情况,把这些帧当作匹配成功而错误地放走。<br />
<br />
好在tfm提供了一种更灵活的方法,用一个称为ovr的文本文件强制某一帧用某个pattern匹配,或者强制其反交错行为。见[[TIVTC/ovr]]。<br />
<br />
==== 使用AAD做IVTC操作 ====<br />
AAD()<br />
<br />
=== 选择正确的分辨率 ===<br />
<br />
之前曾提到,DVD大多数是可变高宽比的,产生可变高宽比是因为现实的摄像机一般会拍摄宽屏的,16:9或2.35:1的画面,但是NTSC的DVD分辨率是720x480,PAL的DVD分辨率720x576,并不是4:3或16:9,因此在DVD的MPEG2码流中会标明DAR,播放时按照这个标记将画面拉伸至该比例,而且2.35:1的影片会在画面上加黑边,以保证比例正确。加黑边称为letterbox,拉伸至16:9称为Anamorphic。<br />
<br />
我们的目的是最终得到画面比例正确的视频,特别指解码后显示出来的SAR为视频,而且不留黑边。一般来说有两种做法,一是在压制前把SAR调整到1:1,二是在压制时给码流定义SAR,播放时就能得到不变形的画面,两种方法都要裁掉黑边。<br />
<br />
公式: 目标分辨率 = 当前分辨率 x SAR<br />
原则:黑边切干净,变形尽可能小,mod2,但是为了迁就传统,大多数时候考虑mod8。不要怕切掉画面,准备切掉的这部分画面本来就是在电视上会被切掉的部分,这些边缘的画面是为了保险起见设置的OverScan。<br />
<br />
<br />
观察DGIndex信息框的提示,一般有以下几种DVD。<br />
<br />
#NTSC 4:3,分辨率720x480,SAR=10:11<br />
##左右各切8像素,得到704x480,再缩放至640x480<br />
##:AviSynth中: LanczosResize(640, 480, 8, 0, -8, 0)<br />
##:640/480 = 704/480 x 10/11<br />
##:由于缩放到640x480比不缩放利用码流SAR的分辨小,可以省码率,一般没有人用10:11的SAR做DVDrip。<br />
#NTSC 16:9,分辨率720x480,SAR=40:33<br />
##左右'''共'''切7像素,再缩放至864x480<br />
##:LanczosResize(864, 480, 4, 0, -3, 0)<br />
##:864/480 = 713/480 x 40/33 x 0.99971954 <br />
##:误差在3%%左右,非常小。<br />
##:若发现黑边比较大,总共切7不够,就多切一点。切到706,在缩放到856x480<br />
##:LancozsResize(856, 480, 7, 0, -7, 0)<br />
##:856/480 = 706/480 x 40/33 x 1.000283286<br />
##:误差也很小。<br />
##利用H.264的SAR<br />
##:首先把黑边切干净,不要在AviSynth里缩放,用x264时加一个选项:'''--sar 40:33'''。一定要在x264里加这个参数,不然即使在容器里设置了DAR,播放器可能还是会无视掉容器的DAR,但是视频码流的SAR是不会被解码器/播放器忽视的,在播放时会自动按照视频码流的SAR拉伸。<br />
#PAL 4:3,分辨率720x576,SAR<br />
#PAL 16:9<br />
<br />
可以使用avsp的Resize Calculator辅助计算切多少边、缩放到多少、比例误差是多少。<br />
<br />
=== 不要改变色彩 ===<br />
从MPEG2Source会输出YV12的视频,在AviSynth里也是全程YV12处理。不要在AviSynth里动色彩。<br />
<br />
==== YC伸张 ====<br />
<br />
可能你已经注意到了在DGIndex里的选择TV Scale和PC Scale,色彩是不同的。选择PC Scale时色彩很饱满,很鲜艳,选择TV Scale时显得比较“灰”。这涉及到YUV范围的问题。在电脑上亮度Luma的范围是0~255,色度Chroma的范围也是0~255,但是在TV上为了一些冗余,亮度Luma范围是16~235,色度Chroma的范围是20~240。电视将TV Scale范围内的色彩转换为RGB,范围外的就丢掉了。电脑上则相反,从0到255都用上了。DVD原本是在电视上播放的,因此编码时也用TV Scale,这就导致在电脑上播放时本应该是黑色的地方却是灰色的。很多人将这种情况称为“黑位不准”,其实是不明白这中间的原因。现在的播放器大多数都会自动将TV Scale的转换到PC Scale,因此在DVDrip时不要动“level”,将转换工作交给播放时的软件做。<br />
<br />
但是播放时会不会做转换很复杂,不同的播放器、解码器、渲染器、显卡以及显卡驱动表现出的行为均不太一样,可以参考这篇研究:<br />
<br />
=== YUV<->RGB转换系数 ===<br />
我们用到的显示设备是用RGB色彩空间的,但是MPEG视频里是用YUV色彩空间的,这就涉及到RGB和YUV互相转换的问题。<br />
除了上面的YV伸张,还有转换矩阵(转换系数)。ITU推荐了两种转换系数:ITU-R BT.601和ITU-R BT.709。前者ITU-R BT.601主要用在DVD等标清的视频中,ITU-R BT.709主要用在HDTV、BluRay等高清的视频中。<br />
<br />
我们在DGIndex里面已经见过转换系数了,在DGIndex信息栏的Colorimetry一栏,其中BT.470-2 B,G*表示MPEG2中并没有指定转换矩阵,DGIndex按照标清级别的分辨率推测位BT.470-2。其实BT.470-2和ITU-R BT.601是一样的,因此这个DVD就是用ITU-R BT.601。<br />
<br />
实际上,现在的播放器、解码器、渲染器也是按照分辨率选择变换矩阵的。标清的(720p以下)就用ITU-R BT.601,高清(720p及以上)则用ITU-R BT.709。因此,在做DVDrip的过程中'''不能改变色彩变换矩阵'''。<br />
<br />
更进一步,在做SD<-->HD的缩放时,必须改变YUV的值,让渲染器用分辨率对应的变换时,能够播放出色彩正确的画面。用AviSynth的ColorMatrix插件。<br />
<br />
SD->HD<br />
ColorMatrix(clip, "BT.601->BT.709")<br />
<br />
HD->SD<br />
ColorMatrix(clip, "BT.709->BT.601")<br />
<br />
如果在SD范围内缩放,像在分辨率一节所讲的例子,'''不要改变色彩变换矩阵'''。<br />
<br />
接下来可以降噪、锐化,让画面看起来更舒服,看个人喜好了。<br />
<br />
总结视频处理过程,有以下几步:<br />
<br />
{| class= "wikitable" <br />
|-<br />
!判断类型 -> IVTC -> 改变分辨率 [-> 降噪等处理]<br />
|}<br />
<br />
如果选择输出SAR=1:1的画面,那么'''缩放一定要在ITVC之后做'''。<br />
<br />
之后就可以交给x264压制了。<br />
<br />
== 音频处理 ==<br />
<br />
从DGIndex里抽出了音频,一般是AC3、LPCM(wav)等。AC3可以直接封装,LPCM最好[[音频压缩|压一下]]。<br />
<br />
== 其他DVDrip方案 ==<br />
[[Direct264]]<br />
<br />
[[用mencoder做DVDrip]]<br />
<br />
{{分类:DVDrip}}<br />
{{分类:视频编码器}}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E4%BD%BF%E7%94%A8AviSynth%E5%81%9ADVDrip&diff=307
使用AviSynth做DVDrip
2010-08-12T11:00:33Z
<p>Lititude:/* Telecine概念 */</p>
<hr />
<div>围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步<br />
*判断类型,IVTC或反交错<br />
*保持正确的SAR<br />
*编码及封装<br />
<br />
<br />
== 准备工作 ==<br />
<br />
=== Telecine概念 ===<br />
'''IVTC(InVerse TeleCine,反胶卷过带)'''是DVDRip中的一个基本概念。<br />
<br />
为了将电影(24fps)转换到NTSC电视(30fps)上能够正常播放的格式,需要作'''Telecine(胶卷过带)'''。其做法是先把电影的一帧拆成两个场,拥有第0条扫描线的场叫top field(顶场),也叫odd field(奇数场),拥有第1条扫描线的场叫bottom field(底场),也叫even field(偶数场)。0t和0b两个场可以组成完整的第0帧。<br />
<br />
取出前4帧看,拆成了8个场,重新组合(这里用top field first,tff):<br />
<br />
{|style = "width:40%" border = 1px <br />
|-<br />
|0t||1t||1t||2t||3t<br />
|-<br />
|0b||1b||2b||3b||3b<br />
|-<br />
|A||B||C||D||E<br />
|}<br />
<br />
这样8个场又以这种方式组成了5帧。24帧中每4帧都如此组合,24 * 5 / 4 = 30,就成了30fps的影片。因为原来的显像管电视本来就是交错显示的,这种方式看起来并不会有问题但是电脑显示器或液晶电视是逐行扫描的,其中的C和D帧由于是由两个来自不同帧的场组成的,因此看起来可能就有交错,有人称为梳状波纹。<br />
<br />
以上这个过程叫做3:2 pulldhwon。做过3:2 pulldown的电影就变成30fps的了,在NTSC的电视上播放就没有同步问题了,NTSC的DVD也用此种方式的视频。但是在电脑上播放每5张画面会有2张有交错,有人称之为“5烂2”。这种DVD处理起来最简单。<br />
<br />
30fps的影片就不必做3:2 pulldown了,因为本来就是30fps的。<br />
<br />
电影要在pal的电视上播放,需要做2:2 pulldown。不过没有NTSC那样的复杂组合,只是将播放速度加快5%,既把24fps的画面以25fps播放,声音也加快5%,保持同步。<br />
<br />
把3:2 pulldown后的30fps通过重新组合场,删掉重复的帧,还原成原本的24fps的过程叫做IVTC广义上的IVTC包括了处理混合类型的DVD,还原成正常帧率的过程。<br />
<br />
=== DVD的类型 ===<br />
要正确的IVTC,首先要明白动画DVD的'''类型''':<br />
#'''Film'''<br />
#:3:2 pulldown的类型。<br />
#:有些DVD encoder在压制前会先做IVTC,再做压缩,这样做的好处是每5帧可以省掉1帧,而且可以对纯净的帧进行编码,帧的压缩率比场要高。但是如何在NTSC电视上播放呢?编码器会写入pulldown flag,解码器在播放时按照pulldown flag播放画面,就能在NTSC电视上同步了。<br />
#:绝大多数电影都是在完成剪辑后再去telecine,然后以这种方式编码的,处理起来非常简单。在DGIndex里Force film,就会输出24fps无交错的。DGIndex报告95%film以上的类型用Force Film处理。<br />
#:也有剪辑的乱七八糟的pulldown的片子,在压DVD时不做IVTC。这种片子也会在IVTC之后也会还原成24fps,但是不能在DGIndex里用Force Film,要用honor pulldown flag。IVTC的工作交给IVTC滤镜处理。<br />
#'''NTSC Video'''<br />
#:本身就是30fps的片子,在DVD里也存为30fps。这种片子不能做IVTC,不然每5帧就会少1帧,动态就不连贯了。<br />
#:DGIndex里报告95%Video以上的片子就是这种片子,前提是源是逐行扫描的。30i的隔行扫描需要做Deinterlace。<br />
#'''Hybrid'''<br />
#:混合了film和和video的DVD。有很多具体的情况。<br />
#*30p是30p,pulldown的是pulldown的,互不影响。比如OP/ED是30p,正片是pulldown。<br />
#*30p和pulldown内容交叉溶解。<br />
#*30i滚动字幕覆盖在pulldown的画面上。<br />
#*淡入淡出处是30i的。<br />
#*前景是pulldown的,背景是30p的。<br />
#*先telecine再拉伸的。<br />
#*画中画的pattern或类型不一样的。<br />
#*剪辑时少掉一个场,造成scene cut处无法匹配。<br />
<br />
<br />
===常见的IVTC工艺===<br />
<br />
*场匹配 Field Match<br />
*:把场和之前之后的场组合,还原出无交错的帧。<br />
*反交错 Deinterlace<br />
*:这里是狭义的反交错,把场补成帧,但保持帧率不变。<br />
*Bob<br />
*:由于Interlaced视频每个场是在不同的时间拍摄的,比如NTSC DV拍摄的视频每秒拍摄60个场,相当于30fps。为了保持动态,把每个场都补成帧,就形成了60fps。二倍帧率并补全每个场的过程叫Bob。<br />
*Decimate<br />
*:删除场匹配后重复的帧,还原原本的帧率。<br />
<br />
一部片里可能会遇到各种情况,比如有些地方是pulldown的,能做成24p,有些地方必须bob到60fps,因此只用一种帧率,即cfr就无法兼顾,这时候就必须把片子作成[[vfr]]的。[[mkv]]和[[mp4]]都支持vfr。<br />
<br />
=== 准备工具 ===<br />
<br />
*VirtualCloneCD或Deamon等虚拟光驱工具和DVDDecrypt<br />
*:用于抽出一话一话的vob和其他工作,比如也可以抽章节文件。<br />
*DGIndex<br />
*:存d2v,包含视频解码器,分离音频<br />
*AviSynth及其插件、IDE(avsp)和文本编辑器<br />
*:IVTC等工作<br />
*x264<br />
*:视频编码器<br />
*音频压缩工具<br />
*mkvtoolnix或mp4box<br />
*:封装工具<br />
<br />
<br />
== DVDrip中视频处理部分 ==<br />
=== 用DVD Decrypt按照不同话数抽出 ===<br />
用虚拟光驱载入DVDISO,打开DVDDecrypt,用ifo模式,找到合适的章节,注意要选择完整的一话。靠什么判断选择了完整的一话呢?注意下面的时间,再说,抽出来试试不就知道了。<br />
<br />
图-DVDdecrypt截图,标注光驱、目标目录、选择章节。<br />
<br />
如果没有设置过切割选项,DVDDecrypt则默认按照1GB分割文件。不过没有什么影响,DGIndex可以打开多个文件。<br />
<br />
DVDDecrypt还可以抽出章节文件,但这个不准,必须调整。<br />
<br />
图-DVDDecrypt设置截图,不分割文件<br />
<br />
图-DVDDecrypt设置截图,抽出章节文件<br />
<br />
=== 用DGIndex保存d2v ===<br />
用DGIndex打开抽出来的vob,按F4(或file->play)后DGIndex开始播放片子,并且会出现一个信息窗口。我们需要借助信息窗口返回的信息初步判断片子的类型。<br />
<br />
我们看到Video Type是film,那么这个片子是film类型的,我们可以直接选择force film,这样在avs里载入d2v会得到24fps的正确帧率的视频。因此说film类型的DVD最简单。除了film类型,DGIndex还会返回另一种类型:Video。<br />
<br />
'''Frame Struct'''是Frame,表示此帧是按照Frame编码的。还有按照Field编码的。<br />
<br />
'''Frame Type'''是Progressive,只是反应MPEG2码流中的progressive_frame旗标,和片源到底是隔行扫描/逐行扫描没有关系。把逐行扫描当作隔行扫描和把隔行扫描当作逐行扫描压制的有不少。<br />
<br />
我们可以试试在菜单的Video->Field Operation里选择Honor Pulldown Flags,保存一个d2v。DGIndex会读取整个流的数据,生成d2v文件,同时还会分离出音频。等保存完毕,再看信息框:<br />
<br />
图->保存完毕时的信息框。<br />
<br />
可以看到100%Film,这下就可以放心大胆的Force Film了,但其实靠刚才的预览就可以放心force film。当Film不足95%时,选择Honor Pulldown Flags模式。'''注意千万不要选错,把不能Force Film的给Force Film了,是得不到正确结果的。'''<br />
<br />
在Video菜单里,还有别的会影响解码的选项。在Avs里载入d2v,DGDecodec会直接把解码后的YV12传递过来,这里设置的PC/TV Scale是不影响的。Crop是会影响avs里的画面的。这里的Crop滤镜在高度上必须切4的倍数,在宽度上可以切2的倍数,原因请复习[[YV12色彩空间]]。<br />
<br />
=== IVTC操作 ===<br />
<br />
得到了d2v,我们就可以用avs了。先把DGIndex文件夹里的DGDecodec.dll放到avs的[[语法:插件]]插件自动加载目录里。打开avsp,把d2v拖进去,avsp会自动生成一行<br />
MPEG2Source("Direction\DVDvob.d2v")<br />
如果有其他选项,就去掉;如果你想知道具体有哪些选项,这些选项是什么意思,就看[http://neuron2.net/dgmpgdec/DGDecodeManual.html DGDecode的Manual]吧。<br />
<br />
MPEG2Source是源滤镜,负责解码并载入vob中的视频流。<br />
<br />
此时会得到一个720x480的视频。假如刚才是Force Film后存的d2v,这一步就不要看了,直接看[[选择正确的分辨率]]。如果没有Force Film,就利用AviSynth以及他的插件和脚本做IVTC。<br />
<br />
常用的IVTC和反交错插件有:<br />
*[[TIVTC]]<br />
*[[a60224]]<br />
*[[nnedi2|nnedi系列]]<br />
*[[TDeint]]<br />
*[[vinverse]]<br />
<br />
还有一些IVTC和反交错脚本:<br />
*[[AAD]]<br />
*[[AnimeIVTC]]<br />
*[[TGMC]]<br />
<br />
如果下面冒出来了新的插件,也不要惊讶<br />
<br />
<br />
==== 使用TIVTC做IVTC ====<br />
TIVTC是tritical大神写的一套IVTC滤镜,包括<br />
*tfm - 场匹配滤镜,先用多种方式组合附近的场,以匹配成完整的帧,即没有交错的帧。如果实在没有办法匹配出完整的无交错的帧,就把该帧反交错(DeInterlace)掉。<br />
*tdecimate - 删掉重复的多余帧的滤镜,可以用2pass实现vfr。<br />
*Mergehints、RequestLinear、FrameDiff、FieldDiff和ShowCombedTIVTC - 众多辅助滤镜。<br />
*IsCombedTIVTC、CFieldDiff和CFrameDiff - 条件函数,用来给ConditionFilter当判定标准的函数。<br />
<br />
一般只用到tfm和tdecimate。<br />
<br />
TIVTC的manual给出了9个例子,都非常简单易用,概括了各种情况。<br />
<br />
1.) NTSC Film, normal source (not anime or cartoon). One pass.<br />
mpeg2source("c:\oursource.d2v")<br />
tfm(d2v="c:\oursource.d2v")<br />
tdecimate()<br />
<br />
事实上,TIVTC自动处理情况复杂的动画还是远远不够的。动画中的渐变,包括淡入淡出和场景之间的交叉溶解在内的渐变,有非常大的隔行扫描频率。也就是说渐变场景处是没有完整帧的,无法匹配出原本逐行扫描的帧。但是在这种地方,tfm是相当无力的,经常发生检测不出来的情况,把这些帧当作匹配成功而错误地放走。<br />
<br />
好在tfm提供了一种强制某一帧用模个pattern匹配,或者强制其反交错行为的方法。见这篇文章:<br />
<br />
==== 使用AAD做IVTC操作 ====<br />
AAD()<br />
<br />
=== 选择正确的分辨率 ===<br />
<br />
之前曾提到,DVD大多数是可变高宽比的,产生可变高宽比是因为现实的摄像机一般会拍摄宽屏的,16:9或2.35:1的画面,但是NTSC的DVD分辨率是720x480,PAL的DVD分辨率720x576,并不是4:3或16:9,因此在DVD的MPEG2码流中会标明DAR,播放时按照这个标记将画面拉伸至该比例,而且2.35:1的影片会在画面上加黑边,以保证比例正确。加黑边称为letterbox,拉伸至16:9称为Anamorphic。<br />
<br />
我们的目的是最终得到画面比例正确的视频,特别指解码后显示出来的SAR为视频,而且不留黑边。一般来说有两种做法,一是在压制前把SAR调整到1:1,二是在压制时给码流定义SAR,播放时就能得到不变形的画面,两种方法都要裁掉黑边。<br />
<br />
公式: 目标分辨率 = 当前分辨率 x SAR<br />
原则:黑边切干净,变形尽可能小,mod2,但是为了迁就传统,大多数时候考虑mod8。不要怕切掉画面,准备切掉的这部分画面本来就是在电视上会被切掉的部分,这些边缘的画面是为了保险起见设置的OverScan。<br />
<br />
<br />
观察DGIndex信息框的提示,一般有以下几种DVD。<br />
<br />
#NTSC 4:3,分辨率720x480,SAR=10:11<br />
##左右各切8像素,得到704x480,再缩放至640x480<br />
##:AviSynth中: LanczosResize(640, 480, 8, 0, -8, 0)<br />
##:640/480 = 704/480 x 10/11<br />
##:由于缩放到640x480比不缩放利用码流SAR的分辨小,可以省码率,一般没有人用10:11的SAR做DVDrip。<br />
#NTSC 16:9,分辨率720x480,SAR=40:33<br />
##左右'''共'''切7像素,再缩放至864x480<br />
##:LanczosResize(864, 480, 4, 0, -3, 0)<br />
##:864/480 = 713/480 x 40/33 x 0.99971954 <br />
##:误差在3%%左右,非常小。<br />
##:若发现黑边比较大,总共切7不够,就多切一点。切到706,在缩放到856x480<br />
##:LancozsResize(856, 480, 7, 0, -7, 0)<br />
##:856/480 = 706/480 x 40/33 x 1.000283286<br />
##:误差也很小。<br />
##利用H.264的SAR<br />
##:首先把黑边切干净,不要在AviSynth里缩放,用x264时加一个选项:'''--sar 40:33'''。一定要在x264里加这个参数,不然即使在容器里设置了DAR,播放器可能还是会无视掉容器的DAR,但是视频码流的SAR是不会被解码器/播放器忽视的,在播放时会自动按照视频码流的SAR拉伸。<br />
#PAL 4:3,分辨率720x576,SAR<br />
#PAL 16:9<br />
<br />
可以使用avsp的Resize Calculator辅助计算切多少边、缩放到多少、比例误差是多少。<br />
<br />
=== 不要改变色彩 ===<br />
从MPEG2Source会输出YV12的视频,在AviSynth里也是全程YV12处理。不要在AviSynth里动色彩。<br />
<br />
==== YC伸张 ====<br />
<br />
可能你已经注意到了在DGIndex里的选择TV Scale和PC Scale,色彩是不同的。选择PC Scale时色彩很饱满,很鲜艳,选择TV Scale时显得比较“灰”。这涉及到YUV范围的问题。在电脑上亮度Luma的范围是0~255,色度Chroma的范围也是0~255,但是在TV上为了一些冗余,亮度Luma范围是16~235,色度Chroma的范围是20~240。电视将TV Scale范围内的色彩转换为RGB,范围外的就丢掉了。电脑上则相反,从0到255都用上了。DVD原本是在电视上播放的,因此编码时也用TV Scale,这就导致在电脑上播放时本应该是黑色的地方却是灰色的。很多人将这种情况称为“黑位不准”,其实是不明白这中间的原因。现在的播放器大多数都会自动将TV Scale的转换到PC Scale,因此在DVDrip时不要动“level”,将转换工作交给播放时的软件做。<br />
<br />
但是播放时会不会做转换很复杂,不同的播放器、解码器、渲染器、显卡以及显卡驱动表现出的行为均不太一样,可以参考这篇研究:<br />
<br />
=== YUV<->RGB转换系数 ===<br />
我们用到的显示设备是用RGB色彩空间的,但是MPEG视频里是用YUV色彩空间的,这就涉及到RGB和YUV互相转换的问题。<br />
除了上面的YV伸张,还有转换矩阵(转换系数)。ITU推荐了两种转换系数:ITU-R BT.601和ITU-R BT.709。前者ITU-R BT.601主要用在DVD等标清的视频中,ITU-R BT.709主要用在HDTV、BluRay等高清的视频中。<br />
<br />
我们在DGIndex里面已经见过转换系数了,在DGIndex信息栏的Colorimetry一栏,其中BT.470-2 B,G*表示MPEG2中并没有指定转换矩阵,DGIndex按照标清级别的分辨率推测位BT.470-2。其实BT.470-2和ITU-R BT.601是一样的,因此这个DVD就是用ITU-R BT.601。<br />
<br />
实际上,现在的播放器、解码器、渲染器也是按照分辨率选择变换矩阵的。标清的(720p以下)就用ITU-R BT.601,高清(720p及以上)则用ITU-R BT.709。因此,在做DVDrip的过程中'''不能改变色彩变换矩阵'''。<br />
<br />
更进一步,在做SD<-->HD的缩放时,必须改变YUV的值,让渲染器用分辨率对应的变换时,能够播放出色彩正确的画面。用AviSynth的ColorMatrix插件。<br />
<br />
SD->HD<br />
ColorMatrix(clip, "BT.601->BT.709")<br />
<br />
HD->SD<br />
ColorMatrix(clip, "BT.709->BT.601")<br />
<br />
如果在SD范围内缩放,像在分辨率一节所讲的例子,'''不要改变色彩变换矩阵'''。<br />
<br />
接下来可以降噪、锐化,让画面看起来更舒服,看个人喜好了。<br />
<br />
总结视频处理过程,有以下几步:<br />
<br />
{| class= "wikitable" <br />
|-<br />
!判断类型 -> IVTC -> 改变分辨率 [-> 降噪等处理]<br />
|}<br />
<br />
如果选择输出SAR=1:1的画面,那么'''缩放一定要在ITVC之后做'''。<br />
<br />
之后就可以交给x264压制了。<br />
<br />
== 音频处理 ==<br />
<br />
从DGIndex里抽出了音频,一般是AC3、LPCM(wav)等。AC3可以直接封装,LPCM最好[[音频压缩|压一下]]。<br />
<br />
== 其他DVDrip方案 ==<br />
[[Direct264]]<br />
<br />
[[用mencoder做DVDrip]]<br />
<br />
{{分类:DVDrip}}<br />
{{分类:视频编码器}}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=MediaWiki:Common.css&diff=306
MediaWiki:Common.css
2010-08-12T09:57:29Z
<p>Lititude:</p>
<hr />
<div>/* 此处的 CSS 将应用于所有的皮肤 */<br />
/* wikitable/prettytable class for skinning normal tables */<br />
table.wikitable th, table.wikitable td {<br />
padding: 0.2em 0.4em;<br />
}<br />
table.wikitable th, table.wikitable td.hl3, table.wikitable th.hl3 {<br />
background: #8da7d6;<br />
}<br />
table.wikitable td.hl1, table.wikitable th.hl1 {<br />
background: #c5d8fc;<br />
text-align: center;<br />
}<br />
table.wikitable td.hl2, table.wikitable th.hl2 {<br />
background: #a7c1f2;<br />
text-align: center;<br />
}<br />
table.wikitable caption {<br />
margin-left: inherit;<br />
margin-right: inherit;<br />
font-weight: bold;<br />
}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E4%BD%BF%E7%94%A8AviSynth%E5%81%9ADVDrip&diff=305
使用AviSynth做DVDrip
2010-08-12T09:39:41Z
<p>Lititude:</p>
<hr />
<div>围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步<br />
*判断类型,IVTC或反交错<br />
*保持正确的SAR<br />
*编码及封装<br />
<br />
<br />
== 准备工作 ==<br />
<br />
=== Telecine概念 ===<br />
'''IVTC(InVerse TeleCine,反胶卷过带)'''是DVDRip中的一个基本概念。<br />
<br />
为了将电影(24fps)转换到NTSC电视(30fps)上能够正常播放的格式,需要作'''Telecine(胶卷过带)'''。其做法是先把电影的一帧拆成两个场,拥有第0条扫描线的场叫top field(顶场),也叫odd field(奇数场),拥有第1条扫描线的场叫bottom field(底场),也叫even field(偶数场)。0t和0b两个场可以组成完整的第0帧。<br />
<br />
取出前4帧看,拆成了8个场,重新组合(这里用top field first,tff):<br />
<br />
{|class = "wikitable"<br />
|-<br />
|0t||1t||1t||2t||3t<br />
|-<br />
|0b||1b||2b||3b||3b<br />
|-<br />
|A||B||C||D||E<br />
|}<br />
<br />
这样8个场又以这种方式组成了5帧。24帧中每4帧都如此组合,24 * 5 / 4 = 30,就成了30fps的影片。因为原来的显像管电视本来就是交错显示的,这种方式看起来并不会有问题但是电脑显示器或液晶电视是逐行扫描的,其中的C和D帧由于是由两个来自不同帧的场组成的,因此看起来可能就有交错,有人称为梳状波纹。<br />
<br />
以上这个过程叫做3:2 pulldhwon。做过3:2 pulldown的电影就变成30fps的了,在NTSC的电视上播放就没有同步问题了,NTSC的DVD也用此种方式的视频。但是在电脑上播放每5张画面会有2张有交错,有人称之为“5烂2”。这种DVD处理起来最简单。<br />
<br />
30fps的影片就不必做3:2 pulldown了,因为本来就是30fps的。<br />
<br />
电影要在pal的电视上播放,需要做2:2 pulldown。不过没有NTSC那样的复杂组合,只是将播放速度加快5%,既把24fps的画面以25fps播放,声音也加快5%,保持同步。<br />
<br />
把3:2 pulldown后的30fps通过重新组合场,删掉重复的帧,还原成原本的24fps的过程叫做IVTC广义上的IVTC包括了处理混合类型的DVD,还原成正常帧率的过程。<br />
<br />
=== DVD的类型 ===<br />
要正确的IVTC,首先要明白动画DVD的'''类型''':<br />
#'''Film'''<br />
#:3:2 pulldown的类型。<br />
#:有些DVD encoder在压制前会先做IVTC,再做压缩,这样做的好处是每5帧可以省掉1帧,而且可以对纯净的帧进行编码,帧的压缩率比场要高。但是如何在NTSC电视上播放呢?编码器会写入pulldown flag,解码器在播放时按照pulldown flag播放画面,就能在NTSC电视上同步了。<br />
#:绝大多数电影都是在完成剪辑后再去telecine,然后以这种方式编码的,处理起来非常简单。在DGIndex里Force film,就会输出24fps无交错的。DGIndex报告95%film以上的类型用Force Film处理。<br />
#:也有剪辑的乱七八糟的pulldown的片子,在压DVD时不做IVTC。这种片子也会在IVTC之后也会还原成24fps,但是不能在DGIndex里用Force Film,要用honor pulldown flag。IVTC的工作交给IVTC滤镜处理。<br />
#'''NTSC Video'''<br />
#:本身就是30fps的片子,在DVD里也存为30fps。这种片子不能做IVTC,不然每5帧就会少1帧,动态就不连贯了。<br />
#:DGIndex里报告95%Video以上的片子就是这种片子,前提是源是逐行扫描的。30i的隔行扫描需要做Deinterlace。<br />
#'''Hybrid'''<br />
#:混合了film和和video的DVD。有很多具体的情况。<br />
#*30p是30p,pulldown的是pulldown的,互不影响。比如OP/ED是30p,正片是pulldown。<br />
#*30p和pulldown内容交叉溶解。<br />
#*30i滚动字幕覆盖在pulldown的画面上。<br />
#*淡入淡出处是30i的。<br />
#*前景是pulldown的,背景是30p的。<br />
#*先telecine再拉伸的。<br />
#*画中画的pattern或类型不一样的。<br />
#*剪辑时少掉一个场,造成scene cut处无法匹配。<br />
<br />
<br />
===常见的IVTC工艺===<br />
<br />
*场匹配 Field Match<br />
*:把场和之前之后的场组合,还原出无交错的帧。<br />
*反交错 Deinterlace<br />
*:这里是狭义的反交错,把场补成帧,但保持帧率不变。<br />
*Bob<br />
*:由于Interlaced视频每个场是在不同的时间拍摄的,比如NTSC DV拍摄的视频每秒拍摄60个场,相当于30fps。为了保持动态,把每个场都补成帧,就形成了60fps。二倍帧率并补全每个场的过程叫Bob。<br />
*Decimate<br />
*:删除场匹配后重复的帧,还原原本的帧率。<br />
<br />
一部片里可能会遇到各种情况,比如有些地方是pulldown的,能做成24p,有些地方必须bob到60fps,因此只用一种帧率,即cfr就无法兼顾,这时候就必须把片子作成[[vfr]]的。[[mkv]]和[[mp4]]都支持vfr。<br />
<br />
=== 准备工具 ===<br />
<br />
*VirtualCloneCD或Deamon等虚拟光驱工具和DVDDecrypt<br />
*:用于抽出一话一话的vob和其他工作,比如也可以抽章节文件。<br />
*DGIndex<br />
*:存d2v,包含视频解码器,分离音频<br />
*AviSynth及其插件、IDE(avsp)和文本编辑器<br />
*:IVTC等工作<br />
*x264<br />
*:视频编码器<br />
*音频压缩工具<br />
*mkvtoolnix或mp4box<br />
*:封装工具<br />
<br />
<br />
== DVDrip中视频处理部分 ==<br />
=== 用DVD Decrypt按照不同话数抽出 ===<br />
用虚拟光驱载入DVDISO,打开DVDDecrypt,用ifo模式,找到合适的章节,注意要选择完整的一话。靠什么判断选择了完整的一话呢?注意下面的时间,再说,抽出来试试不就知道了。<br />
<br />
图-DVDdecrypt截图,标注光驱、目标目录、选择章节。<br />
<br />
如果没有设置过切割选项,DVDDecrypt则默认按照1GB分割文件。不过没有什么影响,DGIndex可以打开多个文件。<br />
<br />
DVDDecrypt还可以抽出章节文件,但这个不准,必须调整。<br />
<br />
图-DVDDecrypt设置截图,不分割文件<br />
<br />
图-DVDDecrypt设置截图,抽出章节文件<br />
<br />
=== 用DGIndex保存d2v ===<br />
用DGIndex打开抽出来的vob,按F4(或file->play)后DGIndex开始播放片子,并且会出现一个信息窗口。我们需要借助信息窗口返回的信息初步判断片子的类型。<br />
<br />
我们看到Video Type是film,那么这个片子是film类型的,我们可以直接选择force film,这样在avs里载入d2v会得到24fps的正确帧率的视频。因此说film类型的DVD最简单。除了film类型,DGIndex还会返回另一种类型:Video。<br />
<br />
'''Frame Struct'''是Frame,表示此帧是按照Frame编码的。还有按照Field编码的。<br />
<br />
'''Frame Type'''是Progressive,只是反应MPEG2码流中的progressive_frame旗标,和片源到底是隔行扫描/逐行扫描没有关系。把逐行扫描当作隔行扫描和把隔行扫描当作逐行扫描压制的有不少。<br />
<br />
我们可以试试在菜单的Video->Field Operation里选择Honor Pulldown Flags,保存一个d2v。DGIndex会读取整个流的数据,生成d2v文件,同时还会分离出音频。等保存完毕,再看信息框:<br />
<br />
图->保存完毕时的信息框。<br />
<br />
可以看到100%Film,这下就可以放心大胆的Force Film了,但其实靠刚才的预览就可以放心force film。当Film不足95%时,选择Honor Pulldown Flags模式。'''注意千万不要选错,把不能Force Film的给Force Film了,是得不到正确结果的。'''<br />
<br />
在Video菜单里,还有别的会影响解码的选项。在Avs里载入d2v,DGDecodec会直接把解码后的YV12传递过来,这里设置的PC/TV Scale是不影响的。Crop是会影响avs里的画面的。这里的Crop滤镜在高度上必须切4的倍数,在宽度上可以切2的倍数,原因请复习[[YV12色彩空间]]。<br />
<br />
=== IVTC操作 ===<br />
<br />
得到了d2v,我们就可以用avs了。先把DGIndex文件夹里的DGDecodec.dll放到avs的[[语法:插件]]插件自动加载目录里。打开avsp,把d2v拖进去,avsp会自动生成一行<br />
MPEG2Source("Direction\DVDvob.d2v")<br />
如果有其他选项,就去掉;如果你想知道具体有哪些选项,这些选项是什么意思,就看[http://neuron2.net/dgmpgdec/DGDecodeManual.html DGDecode的Manual]吧。<br />
<br />
MPEG2Source是源滤镜,负责解码并载入vob中的视频流。<br />
<br />
此时会得到一个720x480的视频。假如刚才是Force Film后存的d2v,这一步就不要看了,直接看[[选择正确的分辨率]]。如果没有Force Film,就利用AviSynth以及他的插件和脚本做IVTC。<br />
<br />
常用的IVTC和反交错插件有:<br />
*[[TIVTC]]<br />
*[[a60224]]<br />
*[[nnedi2|nnedi系列]]<br />
*[[TDeint]]<br />
*[[vinverse]]<br />
<br />
还有一些IVTC和反交错脚本:<br />
*[[AAD]]<br />
*[[AnimeIVTC]]<br />
*[[TGMC]]<br />
<br />
如果下面冒出来了新的插件,也不要惊讶<br />
<br />
<br />
==== 使用TIVTC做IVTC ====<br />
TIVTC是tritical大神写的一套IVTC滤镜,包括<br />
*tfm - 场匹配滤镜,先用多种方式组合附近的场,以匹配成完整的帧,即没有交错的帧。如果实在没有办法匹配出完整的无交错的帧,就把该帧反交错(DeInterlace)掉。<br />
*tdecimate - 删掉重复的多余帧的滤镜,可以用2pass实现vfr。<br />
*Mergehints、RequestLinear、FrameDiff、FieldDiff和ShowCombedTIVTC - 众多辅助滤镜。<br />
*IsCombedTIVTC、CFieldDiff和CFrameDiff - 条件函数,用来给ConditionFilter当判定标准的函数。<br />
<br />
一般只用到tfm和tdecimate。<br />
<br />
TIVTC的manual给出了9个例子,都非常简单易用,概括了各种情况。<br />
<br />
1.) NTSC Film, normal source (not anime or cartoon). One pass.<br />
mpeg2source("c:\oursource.d2v")<br />
tfm(d2v="c:\oursource.d2v")<br />
tdecimate()<br />
<br />
事实上,TIVTC自动处理情况复杂的动画还是远远不够的。动画中的渐变,包括淡入淡出和场景之间的交叉溶解在内的渐变,有非常大的隔行扫描频率。也就是说渐变场景处是没有完整帧的,无法匹配出原本逐行扫描的帧。但是在这种地方,tfm是相当无力的,经常发生检测不出来的情况,把这些帧当作匹配成功而错误地放走。<br />
<br />
好在tfm提供了一种强制某一帧用模个pattern匹配,或者强制其反交错行为的方法。见这篇文章:<br />
<br />
==== 使用AAD做IVTC操作 ====<br />
AAD()<br />
<br />
=== 选择正确的分辨率 ===<br />
<br />
之前曾提到,DVD大多数是可变高宽比的,产生可变高宽比是因为现实的摄像机一般会拍摄宽屏的,16:9或2.35:1的画面,但是NTSC的DVD分辨率是720x480,PAL的DVD分辨率720x576,并不是4:3或16:9,因此在DVD的MPEG2码流中会标明DAR,播放时按照这个标记将画面拉伸至该比例,而且2.35:1的影片会在画面上加黑边,以保证比例正确。加黑边称为letterbox,拉伸至16:9称为Anamorphic。<br />
<br />
我们的目的是最终得到画面比例正确的视频,特别指解码后显示出来的SAR为视频,而且不留黑边。一般来说有两种做法,一是在压制前把SAR调整到1:1,二是在压制时给码流定义SAR,播放时就能得到不变形的画面,两种方法都要裁掉黑边。<br />
<br />
公式: 目标分辨率 = 当前分辨率 x SAR<br />
原则:黑边切干净,变形尽可能小,mod2,但是为了迁就传统,大多数时候考虑mod8。不要怕切掉画面,准备切掉的这部分画面本来就是在电视上会被切掉的部分,这些边缘的画面是为了保险起见设置的OverScan。<br />
<br />
<br />
观察DGIndex信息框的提示,一般有以下几种DVD。<br />
<br />
#NTSC 4:3,分辨率720x480,SAR=10:11<br />
##左右各切8像素,得到704x480,再缩放至640x480<br />
##:AviSynth中: LanczosResize(640, 480, 8, 0, -8, 0)<br />
##:640/480 = 704/480 x 10/11<br />
##:由于缩放到640x480比不缩放利用码流SAR的分辨小,可以省码率,一般没有人用10:11的SAR做DVDrip。<br />
#NTSC 16:9,分辨率720x480,SAR=40:33<br />
##左右'''共'''切7像素,再缩放至864x480<br />
##:LanczosResize(864, 480, 4, 0, -3, 0)<br />
##:864/480 = 713/480 x 40/33 x 0.99971954 <br />
##:误差在3%%左右,非常小。<br />
##:若发现黑边比较大,总共切7不够,就多切一点。切到706,在缩放到856x480<br />
##:LancozsResize(856, 480, 7, 0, -7, 0)<br />
##:856/480 = 706/480 x 40/33 x 1.000283286<br />
##:误差也很小。<br />
##利用H.264的SAR<br />
##:首先把黑边切干净,不要在AviSynth里缩放,用x264时加一个选项:'''--sar 40:33'''。一定要在x264里加这个参数,不然即使在容器里设置了DAR,播放器可能还是会无视掉容器的DAR,但是视频码流的SAR是不会被解码器/播放器忽视的,在播放时会自动按照视频码流的SAR拉伸。<br />
#PAL 4:3,分辨率720x576,SAR<br />
#PAL 16:9<br />
<br />
可以使用avsp的Resize Calculator辅助计算切多少边、缩放到多少、比例误差是多少。<br />
<br />
=== 不要改变色彩 ===<br />
从MPEG2Source会输出YV12的视频,在AviSynth里也是全程YV12处理。不要在AviSynth里动色彩。<br />
<br />
==== YC伸张 ====<br />
<br />
可能你已经注意到了在DGIndex里的选择TV Scale和PC Scale,色彩是不同的。选择PC Scale时色彩很饱满,很鲜艳,选择TV Scale时显得比较“灰”。这涉及到YUV范围的问题。在电脑上亮度Luma的范围是0~255,色度Chroma的范围也是0~255,但是在TV上为了一些冗余,亮度Luma范围是16~235,色度Chroma的范围是20~240。电视将TV Scale范围内的色彩转换为RGB,范围外的就丢掉了。电脑上则相反,从0到255都用上了。DVD原本是在电视上播放的,因此编码时也用TV Scale,这就导致在电脑上播放时本应该是黑色的地方却是灰色的。很多人将这种情况称为“黑位不准”,其实是不明白这中间的原因。现在的播放器大多数都会自动将TV Scale的转换到PC Scale,因此在DVDrip时不要动“level”,将转换工作交给播放时的软件做。<br />
<br />
但是播放时会不会做转换很复杂,不同的播放器、解码器、渲染器、显卡以及显卡驱动表现出的行为均不太一样,可以参考这篇研究:<br />
<br />
=== YUV<->RGB转换系数 ===<br />
我们用到的显示设备是用RGB色彩空间的,但是MPEG视频里是用YUV色彩空间的,这就涉及到RGB和YUV互相转换的问题。<br />
除了上面的YV伸张,还有转换矩阵(转换系数)。ITU推荐了两种转换系数:ITU-R BT.601和ITU-R BT.709。前者ITU-R BT.601主要用在DVD等标清的视频中,ITU-R BT.709主要用在HDTV、BluRay等高清的视频中。<br />
<br />
我们在DGIndex里面已经见过转换系数了,在DGIndex信息栏的Colorimetry一栏,其中BT.470-2 B,G*表示MPEG2中并没有指定转换矩阵,DGIndex按照标清级别的分辨率推测位BT.470-2。其实BT.470-2和ITU-R BT.601是一样的,因此这个DVD就是用ITU-R BT.601。<br />
<br />
实际上,现在的播放器、解码器、渲染器也是按照分辨率选择变换矩阵的。标清的(720p以下)就用ITU-R BT.601,高清(720p及以上)则用ITU-R BT.709。因此,在做DVDrip的过程中'''不能改变色彩变换矩阵'''。<br />
<br />
更进一步,在做SD<-->HD的缩放时,必须改变YUV的值,让渲染器用分辨率对应的变换时,能够播放出色彩正确的画面。用AviSynth的ColorMatrix插件。<br />
<br />
SD->HD<br />
ColorMatrix(clip, "BT.601->BT.709")<br />
<br />
HD->SD<br />
ColorMatrix(clip, "BT.709->BT.601")<br />
<br />
如果在SD范围内缩放,像在分辨率一节所讲的例子,'''不要改变色彩变换矩阵'''。<br />
<br />
接下来可以降噪、锐化,让画面看起来更舒服,看个人喜好了。<br />
<br />
总结视频处理过程,有以下几步:<br />
<br />
{| class= "wikitable" <br />
|-<br />
!判断类型 -> IVTC -> 改变分辨率 [-> 降噪等处理]<br />
|}<br />
<br />
如果选择输出SAR=1:1的画面,那么'''缩放一定要在ITVC之后做'''。<br />
<br />
之后就可以交给x264压制了。<br />
<br />
== 音频处理 ==<br />
<br />
从DGIndex里抽出了音频,一般是AC3、LPCM(wav)等。AC3可以直接封装,LPCM最好[[音频压缩|压一下]]。<br />
<br />
== 其他DVDrip方案 ==<br />
[[Direct264]]<br />
<br />
[[用mencoder做DVDrip]]<br />
<br />
{{分类:DVDrip}}<br />
{{分类:视频编码器}}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E4%BD%BF%E7%94%A8AviSynth%E5%81%9ADVDrip&diff=304
使用AviSynth做DVDrip
2010-08-12T09:33:46Z
<p>Lititude:以内容'围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步 *判断类型,IVTC或反交错 *保持正确的SAR *编码及封装 == 准备工作 …'创建新页面</p>
<hr />
<div>围绕AviSynth等工具做DVDrip,视频部分处理大致可以分为以下几步<br />
*判断类型,IVTC或反交错<br />
*保持正确的SAR<br />
*编码及封装<br />
<br />
<br />
== 准备工作 ==<br />
<br />
=== Telecine概念 ===<br />
'''IVTC(InVerse TeleCine,反胶卷过带)'''是DVDRip中的一个基本概念。<br />
<br />
为了将电影(24fps)转换到NTSC电视(30fps)上能够正常播放的格式,需要作'''Telecine(胶卷过带)'''。其做法是先把电影的一帧拆成两个场,拥有第0条扫描线的场叫top field(顶场),也叫odd field(奇数场),拥有第1条扫描线的场叫bottom field(底场),也叫even field(偶数场)。0t和0b两个场可以组成完整的第0帧。<br />
<br />
取出前4帧看,拆成了8个场,重新组合(这里用top field first,tff):<br />
<br />
{|class = "wikitable"<br />
|-<br />
|0t||1t||1t||2t||3t<br />
|-<br />
|0b||1b||2b||3b||3b<br />
|-<br />
|A||B||C||D||E<br />
|-<br />
|}<br />
<br />
这样8个场又以这种方式组成了5帧。24帧中每4帧都如此组合,24 * 5 / 4 = 30,就成了30fps的影片。因为原来的显像管电视本来就是交错显示的,这种方式看起来并不会有问题但是电脑显示器或液晶电视是逐行扫描的,其中的C和D帧由于是由两个来自不同帧的场组成的,因此看起来可能就有交错,有人称为梳状波纹。<br />
<br />
以上这个过程叫做3:2 pulldhwon。做过3:2 pulldown的电影就变成30fps的了,在NTSC的电视上播放就没有同步问题了,NTSC的DVD也用此种方式的视频。但是在电脑上播放每5张画面会有2张有交错,有人称之为“5烂2”。这种DVD处理起来最简单。<br />
<br />
30fps的影片就不必做3:2 pulldown了,因为本来就是30fps的。<br />
<br />
电影要在pal的电视上播放,需要做2:2 pulldown。不过没有NTSC那样的复杂组合,只是将播放速度加快5%,既把24fps的画面以25fps播放,声音也加快5%,保持同步。<br />
<br />
把3:2 pulldown后的30fps通过重新组合场,删掉重复的帧,还原成原本的24fps的过程叫做IVTC广义上的IVTC包括了处理混合类型的DVD,还原成正常帧率的过程。<br />
<br />
=== DVD的类型 ===<br />
要正确的IVTC,首先要明白动画DVD的'''类型''':<br />
#'''Film'''<br />
#:3:2 pulldown的类型。<br />
#:有些DVD encoder在压制前会先做IVTC,再做压缩,这样做的好处是每5帧可以省掉1帧,而且可以对纯净的帧进行编码,帧的压缩率比场要高。但是如何在NTSC电视上播放呢?编码器会写入pulldown flag,解码器在播放时按照pulldown flag播放画面,就能在NTSC电视上同步了。<br />
#:绝大多数电影都是在完成剪辑后再去telecine,然后以这种方式编码的,处理起来非常简单。在DGIndex里Force film,就会输出24fps无交错的。DGIndex报告95%film以上的类型用Force Film处理。<br />
#:也有剪辑的乱七八糟的pulldown的片子,在压DVD时不做IVTC。这种片子也会在IVTC之后也会还原成24fps,但是不能在DGIndex里用Force Film,要用honor pulldown flag。IVTC的工作交给IVTC滤镜处理。<br />
#'''NTSC Video'''<br />
#:本身就是30fps的片子,在DVD里也存为30fps。这种片子不能做IVTC,不然每5帧就会少1帧,动态就不连贯了。<br />
#:DGIndex里报告95%Video以上的片子就是这种片子,前提是源是逐行扫描的。30i的隔行扫描需要做Deinterlace。<br />
#'''Hybrid'''<br />
#:混合了film和和video的DVD。有很多具体的情况。<br />
#*30p是30p,pulldown的是pulldown的,互不影响。比如OP/ED是30p,正片是pulldown。<br />
#*30p和pulldown内容交叉溶解。<br />
#*30i滚动字幕覆盖在pulldown的画面上。<br />
#*淡入淡出处是30i的。<br />
#*前景是pulldown的,背景是30p的。<br />
#*先telecine再拉伸的。<br />
#*画中画的pattern或类型不一样的。<br />
#*剪辑时少掉一个场,造成scene cut处无法匹配。<br />
<br />
<br />
===常见的IVTC工艺===<br />
<br />
*场匹配 Field Match<br />
*:把场和之前之后的场组合,还原出无交错的帧。<br />
*反交错 Deinterlace<br />
*:这里是狭义的反交错,把场补成帧,但保持帧率不变。<br />
*Bob<br />
*:由于Interlaced视频每个场是在不同的时间拍摄的,比如NTSC DV拍摄的视频每秒拍摄60个场,相当于30fps。为了保持动态,把每个场都补成帧,就形成了60fps。二倍帧率并补全每个场的过程叫Bob。<br />
*Decimate<br />
*:删除场匹配后重复的帧,还原原本的帧率。<br />
<br />
一部片里可能会遇到各种情况,比如有些地方是pulldown的,能做成24p,有些地方必须bob到60fps,因此只用一种帧率,即cfr就无法兼顾,这时候就必须把片子作成[[vfr]]的。[[mkv]]和[[mp4]]都支持vfr。<br />
<br />
=== 准备工具 ===<br />
<br />
*VirtualCloneCD或Deamon等虚拟光驱工具和DVDDecrypt<br />
*:用于抽出一话一话的vob和其他工作,比如也可以抽章节文件。<br />
*DGIndex<br />
*:存d2v,包含视频解码器,分离音频<br />
*AviSynth及其插件、IDE(avsp)和文本编辑器<br />
*:IVTC等工作<br />
*x264<br />
*:视频编码器<br />
*音频压缩工具<br />
*mkvtoolnix或mp4box<br />
*:封装工具<br />
<br />
<br />
== DVDrip中视频处理部分 ==<br />
=== 用DVD Decrypt按照不同话数抽出 ===<br />
用虚拟光驱载入DVDISO,打开DVDDecrypt,用ifo模式,找到合适的章节,注意要选择完整的一话。靠什么判断选择了完整的一话呢?注意下面的时间,再说,抽出来试试不就知道了。<br />
<br />
图-DVDdecrypt截图,标注光驱、目标目录、选择章节。<br />
<br />
如果没有设置过切割选项,DVDDecrypt则默认按照1GB分割文件。不过没有什么影响,DGIndex可以打开多个文件。<br />
<br />
DVDDecrypt还可以抽出章节文件,但这个不准,必须调整。<br />
<br />
图-DVDDecrypt设置截图,不分割文件<br />
<br />
图-DVDDecrypt设置截图,抽出章节文件<br />
<br />
=== 用DGIndex保存d2v ===<br />
用DGIndex打开抽出来的vob,按F4(或file->play)后DGIndex开始播放片子,并且会出现一个信息窗口。我们需要借助信息窗口返回的信息初步判断片子的类型。<br />
<br />
我们看到Video Type是film,那么这个片子是film类型的,我们可以直接选择force film,这样在avs里载入d2v会得到24fps的正确帧率的视频。因此说film类型的DVD最简单。除了film类型,DGIndex还会返回另一种类型:Video。<br />
<br />
'''Frame Struct'''是Frame,表示此帧是按照Frame编码的。还有按照Field编码的。<br />
<br />
'''Frame Type'''是Progressive,只是反应MPEG2码流中的progressive_frame旗标,和片源到底是隔行扫描/逐行扫描没有关系。把逐行扫描当作隔行扫描和把隔行扫描当作逐行扫描压制的有不少。<br />
<br />
我们可以试试在菜单的Video->Field Operation里选择Honor Pulldown Flags,保存一个d2v。DGIndex会读取整个流的数据,生成d2v文件,同时还会分离出音频。等保存完毕,再看信息框:<br />
<br />
图->保存完毕时的信息框。<br />
<br />
可以看到100%Film,这下就可以放心大胆的Force Film了,但其实靠刚才的预览就可以放心force film。当Film不足95%时,选择Honor Pulldown Flags模式。'''注意千万不要选错,把不能Force Film的给Force Film了,是得不到正确结果的。'''<br />
<br />
在Video菜单里,还有别的会影响解码的选项。在Avs里载入d2v,DGDecodec会直接把解码后的YV12传递过来,这里设置的PC/TV Scale是不影响的。Crop是会影响avs里的画面的。这里的Crop滤镜在高度上必须切4的倍数,在宽度上可以切2的倍数,原因请复习[[YV12色彩空间]]。<br />
<br />
=== IVTC操作 ===<br />
<br />
得到了d2v,我们就可以用avs了。先把DGIndex文件夹里的DGDecodec.dll放到avs的[[语法:插件]]插件自动加载目录里。打开avsp,把d2v拖进去,avsp会自动生成一行<br />
MPEG2Source("Direction\DVDvob.d2v")<br />
如果有其他选项,就去掉;如果你想知道具体有哪些选项,这些选项是什么意思,就看[http://neuron2.net/dgmpgdec/DGDecodeManual.html DGDecode的Manual]吧。<br />
<br />
MPEG2Source是源滤镜,负责解码并载入vob中的视频流。<br />
<br />
此时会得到一个720x480的视频。假如刚才是Force Film后存的d2v,这一步就不要看了,直接看[[选择正确的分辨率]]。如果没有Force Film,就利用AviSynth以及他的插件和脚本做IVTC。<br />
<br />
常用的IVTC和反交错插件有:<br />
*[[TIVTC]]<br />
*[[a60224]]<br />
*[[nnedi2|nnedi系列]]<br />
*[[TDeint]]<br />
*[[vinverse]]<br />
<br />
还有一些IVTC和反交错脚本:<br />
*[[AAD]]<br />
*[[AnimeIVTC]]<br />
*[[TGMC]]<br />
<br />
如果下面冒出来了新的插件,也不要惊讶<br />
<br />
<br />
==== 使用TIVTC做IVTC ====<br />
TIVTC是tritical大神写的一套IVTC滤镜,包括<br />
*tfm - 场匹配滤镜,先用多种方式组合附近的场,以匹配成完整的帧,即没有交错的帧。如果实在没有办法匹配出完整的无交错的帧,就把该帧反交错(DeInterlace)掉。<br />
*tdecimate - 删掉重复的多余帧的滤镜,可以用2pass实现vfr。<br />
*Mergehints、RequestLinear、FrameDiff、FieldDiff和ShowCombedTIVTC - 众多辅助滤镜。<br />
*IsCombedTIVTC、CFieldDiff和CFrameDiff - 条件函数,用来给ConditionFilter当判定标准的函数。<br />
<br />
一般只用到tfm和tdecimate。<br />
<br />
TIVTC的manual给出了9个例子,都非常简单易用,概括了各种情况。<br />
<br />
1.) NTSC Film, normal source (not anime or cartoon). One pass.<br />
mpeg2source("c:\oursource.d2v")<br />
tfm(d2v="c:\oursource.d2v")<br />
tdecimate()<br />
<br />
事实上,TIVTC自动处理情况复杂的动画还是远远不够的。动画中的渐变,包括淡入淡出和场景之间的交叉溶解在内的渐变,有非常大的隔行扫描频率。也就是说渐变场景处是没有完整帧的,无法匹配出原本逐行扫描的帧。但是在这种地方,tfm是相当无力的,经常发生检测不出来的情况,把这些帧当作匹配成功而错误地放走。<br />
<br />
好在tfm提供了一种强制某一帧用模个pattern匹配,或者强制其反交错行为的方法。见这篇文章:<br />
<br />
==== 使用AAD做IVTC操作 ====<br />
AAD()<br />
<br />
=== 选择正确的分辨率 ===<br />
<br />
之前曾提到,DVD大多数是可变高宽比的,产生可变高宽比是因为现实的摄像机一般会拍摄宽屏的,16:9或2.35:1的画面,但是NTSC的DVD分辨率是720x480,PAL的DVD分辨率720x576,并不是4:3或16:9,因此在DVD的MPEG2码流中会标明DAR,播放时按照这个标记将画面拉伸至该比例,而且2.35:1的影片会在画面上加黑边,以保证比例正确。加黑边称为letterbox,拉伸至16:9称为Anamorphic。<br />
<br />
我们的目的是最终得到画面比例正确的视频,特别指解码后显示出来的SAR为视频,而且不留黑边。一般来说有两种做法,一是在压制前把SAR调整到1:1,二是在压制时给码流定义SAR,播放时就能得到不变形的画面,两种方法都要裁掉黑边。<br />
<br />
公式: 目标分辨率 = 当前分辨率 x SAR<br />
原则:黑边切干净,变形尽可能小,mod2,但是为了迁就传统,大多数时候考虑mod8。不要怕切掉画面,准备切掉的这部分画面本来就是在电视上会被切掉的部分,这些边缘的画面是为了保险起见设置的OverScan。<br />
<br />
<br />
观察DGIndex信息框的提示,一般有以下几种DVD。<br />
<br />
#NTSC 4:3,分辨率720x480,SAR=10:11<br />
##左右各切8像素,得到704x480,再缩放至640x480<br />
##:AviSynth中: LanczosResize(640, 480, 8, 0, -8, 0)<br />
##:640/480 = 704/480 x 10/11<br />
##:由于缩放到640x480比不缩放利用码流SAR的分辨小,可以省码率,一般没有人用10:11的SAR做DVDrip。<br />
#NTSC 16:9,分辨率720x480,SAR=40:33<br />
##左右'''共'''切7像素,再缩放至864x480<br />
##:LanczosResize(864, 480, 4, 0, -3, 0)<br />
##:864/480 = 713/480 x 40/33 x 0.99971954 <br />
##:误差在3%%左右,非常小。<br />
##:若发现黑边比较大,总共切7不够,就多切一点。切到706,在缩放到856x480<br />
##:LancozsResize(856, 480, 7, 0, -7, 0)<br />
##:856/480 = 706/480 x 40/33 x 1.000283286<br />
##:误差也很小。<br />
##利用H.264的SAR<br />
##:首先把黑边切干净,不要在AviSynth里缩放,用x264时加一个选项:'''--sar 40:33'''。一定要在x264里加这个参数,不然即使在容器里设置了DAR,播放器可能还是会无视掉容器的DAR,但是视频码流的SAR是不会被解码器/播放器忽视的,在播放时会自动按照视频码流的SAR拉伸。<br />
#PAL 4:3,分辨率720x576,SAR<br />
#PAL 16:9<br />
<br />
可以使用avsp的Resize Calculator辅助计算切多少边、缩放到多少、比例误差是多少。<br />
<br />
=== 不要改变色彩 ===<br />
从MPEG2Source会输出YV12的视频,在AviSynth里也是全程YV12处理。不要在AviSynth里动色彩。<br />
<br />
==== YC伸张 ====<br />
<br />
可能你已经注意到了在DGIndex里的选择TV Scale和PC Scale,色彩是不同的。选择PC Scale时色彩很饱满,很鲜艳,选择TV Scale时显得比较“灰”。这涉及到YUV范围的问题。在电脑上亮度Luma的范围是0~255,色度Chroma的范围也是0~255,但是在TV上为了一些冗余,亮度Luma范围是16~235,色度Chroma的范围是20~240。电视将TV Scale范围内的色彩转换为RGB,范围外的就丢掉了。电脑上则相反,从0到255都用上了。DVD原本是在电视上播放的,因此编码时也用TV Scale,这就导致在电脑上播放时本应该是黑色的地方却是灰色的。很多人将这种情况称为“黑位不准”,其实是不明白这中间的原因。现在的播放器大多数都会自动将TV Scale的转换到PC Scale,因此在DVDrip时不要动“level”,将转换工作交给播放时的软件做。<br />
<br />
但是播放时会不会做转换很复杂,不同的播放器、解码器、渲染器、显卡以及显卡驱动表现出的行为均不太一样,可以参考这篇研究:<br />
<br />
=== YUV<->RGB转换系数 ===<br />
我们用到的显示设备是用RGB色彩空间的,但是MPEG视频里是用YUV色彩空间的,这就涉及到RGB和YUV互相转换的问题。<br />
除了上面的YV伸张,还有转换矩阵(转换系数)。ITU推荐了两种转换系数:ITU-R BT.601和ITU-R BT.709。前者ITU-R BT.601主要用在DVD等标清的视频中,ITU-R BT.709主要用在HDTV、BluRay等高清的视频中。<br />
<br />
我们在DGIndex里面已经见过转换系数了,在DGIndex信息栏的Colorimetry一栏,其中BT.470-2 B,G*表示MPEG2中并没有指定转换矩阵,DGIndex按照标清级别的分辨率推测位BT.470-2。其实BT.470-2和ITU-R BT.601是一样的,因此这个DVD就是用ITU-R BT.601。<br />
<br />
实际上,现在的播放器、解码器、渲染器也是按照分辨率选择变换矩阵的。标清的(720p以下)就用ITU-R BT.601,高清(720p及以上)则用ITU-R BT.709。因此,在做DVDrip的过程中'''不能改变色彩变换矩阵'''。<br />
<br />
更进一步,在做SD<-->HD的缩放时,必须改变YUV的值,让渲染器用分辨率对应的变换时,能够播放出色彩正确的画面。用AviSynth的ColorMatrix插件。<br />
<br />
SD->HD<br />
ColorMatrix(clip, "BT.601->BT.709")<br />
<br />
HD->SD<br />
ColorMatrix(clip, "BT.709->BT.601")<br />
<br />
如果在SD范围内缩放,像在分辨率一节所讲的例子,'''不要改变色彩变换矩阵'''。<br />
<br />
接下来可以降噪、锐化,让画面看起来更舒服,看个人喜好了。<br />
<br />
总结视频处理过程,有以下几步:<br />
<br />
{{|class="wikitable" <br />
|-<br />
!判断类型 -> IVTC -> 改变分辨率 [-> 降噪等处理]<br />
|-<br />
|}<br />
<br />
如果选择输出SAR=1:1的画面,那么'''缩放一定要在ITVC之后做'''。<br />
<br />
之后就可以交给x264压制了。<br />
<br />
== 音频处理 ==<br />
<br />
从DGIndex里抽出了音频,一般是AC3、LPCM(wav)等。AC3可以直接封装,LPCM最好[[音频压缩|压一下]]。<br />
<br />
== 其他DVDrip方案 ==<br />
[[Direct264]]<br />
<br />
[[用mencoder做DVDrip]]<br />
<br />
{{分类:DVDrip}}<br />
{{分类:视频编码器}}</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=303
X264使用介绍
2010-08-10T06:12:20Z
<p>Lititude:/* 命令行的操作 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
>cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
>x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:104 r1688M 0b36c6d<br />
Syntax: x264 [options] -o outfile infile<br />
<br />
Infile can be raw (in which case resolution is required),<br />
or YUV4MPEG (*.y4m),<br />
or Avisynth if compiled with support (no).<br />
or libav* formats if compiled with lavf support (no) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4<br />
Output bit depth: 8 (configured at compile time)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
'''中间略...'''<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
Filtering:<br />
<br />
Filter options may be specified in the name=value format<br />
--vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file<br />
Available filters:<br />
crop:left,top,right,bottom<br />
resize:[width,height][,sar][,fittobox][,csp][,method]<br />
select_every:step,offset1[,...]<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 [options] -o outfile infile”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\th9\rec.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
>x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -f rawvideo -an -v 0 - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=302
X264使用介绍
2010-08-09T06:34:37Z
<p>Lititude:/* 用ffmpeg输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
>cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
>x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
>x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -f rawvideo -an -v 0 - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=301
X264使用介绍
2010-08-08T10:22:17Z
<p>Lititude:</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
>cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
>x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
>x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
>x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
>x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
>x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -an - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=300
X264使用介绍
2010-08-08T10:20:42Z
<p>Lititude:/* 用mencoder输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -an - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=299
X264使用介绍
2010-08-08T10:18:57Z
<p>Lititude:/* 用avs2yuv输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -an - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
>avs2yuv input.avs -raw -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=298
X264使用介绍
2010-08-08T10:16:49Z
<p>Lititude:/* 用ffmpeg输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
>ffmpeg -i input.avs -pix_fmt yuv420p -an - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=297
X264使用介绍
2010-08-08T10:13:07Z
<p>Lititude:/* 用mencoder输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=296
X264使用介绍
2010-08-08T10:11:29Z
<p>Lititude:/* 用mencoder输入 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=yv12 -of raw -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 - <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E5%8E%8B%E7%89%87%E6%96%87%E6%A1%A3&diff=295
压片文档
2010-08-06T08:51:01Z
<p>Lititude:/* 概念 */</p>
<hr />
<div>这是一篇压片教程,这篇教程试着在大类的页面里讲操作方法,在名词的页面里讲理论或更细的操作。<br />
<br />
请配合NMM-DOC的其他部分理解这些内容。<br />
<br />
== [[前言]] ==<br />
压片是一个EP的实践过程。压片有千万种理由,比如需要省硬盘空间而压片;比如为了移动设备而压片;比如为了爱而压片;比如纯粹的EP而已……无论出于什么目的,有一些原则是不会变的,有些弯也最好不要试图去绕。<br />
<br />
== [[压制概念|概念]] ==<br />
<br />
[[File:YV12.png|frame|right|YV12色彩空间示意图]]<br />
<br />
压制概念闲谈,请首先理解这些概念。<br />
<br />
[[封装]]<br />
<br />
[[视频]]:[[色彩]]、[[编码原理]]、[[fps]]、[[分辨率]]<br />
<br />
[[音频]]<br />
<br />
== [[播放器|播放]] ==<br />
介绍开源播放器和有关DirectShow的软件。<br />
<br />
[[MPC-HC]]<br />
<br />
[[mplayer]]<br />
<br />
[[VLC]]<br />
<br />
[[GraphStudio]]<br />
<br />
== [[Avisynth 2.5中文文档|AviSynth]] ==<br />
压片必要工具,EP党永远耕作的土地。<br />
<br />
[[avsp|工具]]<br />
<br />
[[源滤镜]]<br />
<br />
[[处理]]<br />
<br />
[[vfr处理]]<br />
<br />
== [[x264使用介绍|视频编码(x264)]] ==<br />
世界上最好的视频编码器。介绍x264的命令行界面用法,用起来很简单。<br />
<br />
[[X264使用介绍#x264的preset和tune系统|preset和tune系统]]<br />
<br />
[[参数解释]]<br />
<br />
[[X264使用介绍#64bit的x264|64bit的x264]]<br />
<br />
[[DXVA和psp]]<br />
<br />
== [[音频]] ==<br />
音频压制等操作。<br />
<br />
== [[封装]] ==<br />
和mkv、mp4有关的封装工具介绍。<br />
<br />
[[mkvtoolnix]]<br />
<br />
[[mp4box]]<br />
<br />
专题<br />
<br />
== [[DVDrip]] ==<br />
压片的核心课程。二区(日本)的DVD制作混乱,码率不足司空见惯。请特别恨P.A.Works。<br />
<br />
[[IVTC]]<br />
<br />
[[分辨率]]<br />
<br />
[[工具]]<br />
<br />
[[TIVTC]]和[[AAD]]<br />
<br />
[[mencoder]]<br />
<br />
== [[ts]] ==<br />
日本HDTV信号的处理方法,请先学习DVDrip。<br />
<br />
[[Trim]]和[[音频]]<br />
<br />
[[去台标]]<br />
<br />
[[480p和720p]]<br />
<br />
== [[BDrip]] ==<br />
和CPU过不去。</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=File:YV12.png&diff=294
File:YV12.png
2010-08-06T08:27:07Z
<p>Lititude:YV12色彩空间示意图</p>
<hr />
<div>YV12色彩空间示意图</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E5%8E%8B%E7%89%87%E6%96%87%E6%A1%A3&diff=293
压片文档
2010-08-05T17:44:29Z
<p>Lititude:</p>
<hr />
<div>这是一篇压片教程,这篇教程试着在大类的页面里讲操作方法,在名词的页面里讲理论或更细的操作。<br />
<br />
请配合NMM-DOC的其他部分理解这些内容。<br />
<br />
== [[前言]] ==<br />
压片是一个EP的实践过程。压片有千万种理由,比如需要省硬盘空间而压片;比如为了移动设备而压片;比如为了爱而压片;比如纯粹的EP而已……无论出于什么目的,有一些原则是不会变的,有些弯也最好不要试图去绕。<br />
<br />
== [[压制概念|概念]] ==<br />
<br />
压制概念闲谈,请首先理解这些概念。<br />
<br />
[[封装]]<br />
<br />
[[视频]]:[[色彩]]、[[编码原理]]、[[fps]]、[[分辨率]]<br />
<br />
[[音频]]<br />
<br />
== [[播放器|播放]] ==<br />
介绍开源播放器和有关DirectShow的软件。<br />
<br />
[[MPC-HC]]<br />
<br />
[[mplayer]]<br />
<br />
[[VLC]]<br />
<br />
[[GraphStudio]]<br />
<br />
== [[Avisynth 2.5中文文档|AviSynth]] ==<br />
压片必要工具,EP党永远耕作的土地。<br />
<br />
[[avsp|工具]]<br />
<br />
[[源滤镜]]<br />
<br />
[[处理]]<br />
<br />
[[vfr处理]]<br />
<br />
== [[x264使用介绍|视频编码(x264)]] ==<br />
世界上最好的视频编码器。介绍x264的命令行界面用法,用起来很简单。<br />
<br />
[[X264使用介绍#x264的preset和tune系统|preset和tune系统]]<br />
<br />
[[参数解释]]<br />
<br />
[[X264使用介绍#64bit的x264|64bit的x264]]<br />
<br />
[[DXVA和psp]]<br />
<br />
== [[音频]] ==<br />
音频压制等操作。<br />
<br />
== [[封装]] ==<br />
和mkv、mp4有关的封装工具介绍。<br />
<br />
[[mkvtoolnix]]<br />
<br />
[[mp4box]]<br />
<br />
专题<br />
<br />
== [[DVDrip]] ==<br />
压片的核心课程。二区(日本)的DVD制作混乱,码率不足司空见惯。请特别恨P.A.Works。<br />
<br />
[[IVTC]]<br />
<br />
[[分辨率]]<br />
<br />
[[工具]]<br />
<br />
[[TIVTC]]和[[AAD]]<br />
<br />
[[mencoder]]<br />
<br />
== [[ts]] ==<br />
日本HDTV信号的处理方法,请先学习DVDrip。<br />
<br />
[[Trim]]和[[音频]]<br />
<br />
[[去台标]]<br />
<br />
[[480p和720p]]<br />
<br />
== [[BDrip]] ==<br />
和CPU过不去。</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=292
X264使用介绍
2010-08-05T17:41:03Z
<p>Lititude:</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
x264.nl当前版本信息:{{X264ver}}<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=274
X264使用介绍
2010-07-31T08:41:45Z
<p>Lititude:</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://www.videolan.org/developers/x264.html<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。mencoder本身可以编译进libx264,和单独的x264效果一样,但是mencoder不能多线程,滤镜和编码全跑在一个线程上,因此会非常慢。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=273
X264使用介绍
2010-07-31T08:39:32Z
<p>Lititude:/* 获取x264 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://videolan.org/x264<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用[http://git.videolan.org/?p=x264.git;a=summary git提供源代码]。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*[http://sourceforge.net/projects/direct264/ roozhou的支持DirectShow输入的版本]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。mencoder本身可以编译进libx264,和单独的x264效果一样,但是mencoder不能多线程,滤镜和编码全跑在一个线程上,因此会非常慢。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=272
X264使用介绍
2010-07-31T08:34:14Z
<p>Lititude:/* 获取x264 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://videolan.org/x264<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用git提供源代码。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*[http://x264.fushizen.eu/ jeeb编译版]<br />
*[http://komisar.gin.by/ komisar编译版]<br />
*rack编译版,关注[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]的新帖<br />
*[http://vfrmaniac.fushizen.eu/x264/ VFR Maniac编译版]<br />
*[http://www.xvidvideo.ru/x264-video-codec/ xvidvideo.ru编译版]<br />
*MythCreator的编译版<br />
*roozhou的支持DirectShow输入的版本[http://sourceforge.net/projects/direct264/]。<br />
*还有doom9上的[http://forum.doom9.org/showthread.php?t=130364 Current Patches, Where to get them, How they affect speed/output]和doom10上的[http://doom10.org/index.php?topic=3.0 Getting the latest x264],都会有最新的编译版<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。mencoder本身可以编译进libx264,和单独的x264效果一样,但是mencoder不能多线程,滤镜和编码全跑在一个线程上,因此会非常慢。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=271
X264使用介绍
2010-07-31T06:23:05Z
<p>Lititude:/* H.264和x264 */</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://videolan.org/x264<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http://www.itu.int ITU(International Telecommunication Unite 国际通信联盟)]和[http://www.mpeg.org/ MPEG(Motion Picture Experts Group 运动图像专家组)]联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是[http://en.wikipedia.org/wiki/MPEG-4 MPEG-4]的一个组成部分--[http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC MPEG-4 Part 10],又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://x264dev.multimedia.cx/ Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用git提供源代码。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*jeeb编译版<br />
*komisar的<br />
*rack的<br />
*VFR Maniac的<br />
*xvidvideo.ru的<br />
*roozhou的支持DirectShow输入的版本[http://sourceforge.net/projects/direct264/]。<br />
*还有doom9上的[http://forum.doom9.org/ currentpatchs]和doom10上的[http://doom10.org/ Win32build]<br />
<br />
我们一般选择32位的最新版。<br />
<br />
此外,可以关注由[http://twitter.com/dgwxx @dgwxx]维护的twitter机器人[http://twitter.com/264bot @264bot],它每半小时检查一次x264.nl更新,报告32bit和64bit版本的更新。<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。mencoder本身可以编译进libx264,和单独的x264效果一样,但是mencoder不能多线程,滤镜和编码全跑在一个线程上,因此会非常慢。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E5%8E%8B%E7%89%87%E6%96%87%E6%A1%A3&diff=267
压片文档
2010-07-31T05:18:08Z
<p>Lititude:/* 视频编码(x264) */</p>
<hr />
<div>这是一篇压片教程,这篇教程试着在大类的页面里讲操作方法,在名词的页面里讲理论或更细的操作。<br />
<br />
请配合NMM-DOC的其他部分理解这些内容。<br />
<br />
== [[前言]] ==<br />
压片是一个EP的实践过程。压片有千万种理由,比如需要省硬盘空间而压片;比如为了移动设备而压片;比如为了爱而压片;比如纯粹的EP而已……无论出于什么目的,有一些原则是不会变的,有些弯也最好不要试图去绕。<br />
<br />
== [[压制概念|概念]] ==<br />
<br />
压制概念闲谈,请首先理解这些概念。<br />
<br />
[[封装]]<br />
<br />
[[视频]]:[[色彩]]、[[编码原理]]、[[fps]]、[[分辨率]]<br />
<br />
[[音频]]<br />
<br />
== [[播放器|播放]] ==<br />
介绍开源播放器和有关DirectShow的软件。<br />
<br />
[[MPC-HC]]<br />
<br />
[[mplayer]]<br />
<br />
[[VLC]]<br />
<br />
[[GraphStudio]]<br />
<br />
== [[Avisynth 2.5中文文档|AviSynth]] ==<br />
压片必要工具,EP党永远耕作的土地。<br />
<br />
[[avsp|工具]]<br />
<br />
[[源滤镜]]<br />
<br />
[[处理]]<br />
<br />
[[vfr处理]]<br />
<br />
== [[x264使用介绍|视频编码(x264)]] ==<br />
世界上最好的视频编码器。介绍x264的命令行界面用法,用起来很简单。<br />
<br />
[[X264使用介绍#x264的preset和tune系统|preset和tune系统]]<br />
<br />
[[参数解释]]<br />
<br />
[[X264使用介绍#64bit的x264|64bit的x264]]<br />
<br />
[[DXVA和psp]]<br />
<br />
== [[音频]] ==<br />
音频压制等操作。<br />
<br />
== [[封装]] ==<br />
和mkv、mp4有关的封装工具介绍。<br />
<br />
[[mkvtoolnix]]<br />
<br />
[[mp4box]]<br />
<br />
专题<br />
<br />
== [[DVDrip]] ==<br />
压片的核心课程。二区(日本)的DVD制作混乱,码率不足司空见惯。请特别恨P.A.Works。<br />
<br />
[[Telcine]]<br />
<br />
[[分辨率]]<br />
<br />
[[工具]]<br />
<br />
[[TIVTC]]和[[AAD]]<br />
<br />
[[mencoder]]<br />
<br />
== [[ts]] ==<br />
日本HDTV信号的处理方法,请先学习DVDrip。<br />
<br />
[[Trim]]和[[音频]]<br />
<br />
[[去台标]]<br />
<br />
[[480p和720p]]<br />
<br />
== [[BDrip]] ==<br />
和CPU过不去。</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=266
X264使用介绍
2010-07-31T04:55:48Z
<p>Lititude:</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://videolan.org/x264<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http:// ITU](International Telecommunication Unite 国际通信联盟)和[http://mpeg.org] MPEG(Motion Picture Experts Group 运动图像专家组)联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是MPEG4的一个组成部分--MPEG4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://multi Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用git提供源代码。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl 的编译版没有任何patch,即所谓纯净版。<br />
*jeeb编译版<br />
*komisar的<br />
*rack的<br />
*VFR Maniac的<br />
*xvidvideo.ru的<br />
*roozhou的支持DirectShow输入的版本。<br />
*还有doom9上的[http://forum.doom9.org/ currentpatchs]和doom10上的[http://doom10.org/ Win32build]<br />
<br />
我们一般选择32位的最新版。<br />
<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
视频的码率直接影响到了片子的编码质量。要想效果好,码率足够是最重要的必要条件之一。但是想实现更好的效果和控制文件的体积(码率)之间始终是一对矛盾。这就需要我们通过实践,在强大的编码器的帮助下总结出合适的码率,实现尽量好的效果。<br />
<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
这种方式可以精确的得到想要的平均码率,2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==<br />
<br />
如果用了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呢?<br />
<br />
方法是用'''pipe'''。用命令行工具(如ffmpeg、mencoder或avs2uv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。<br />
<br />
=== 用ffmpeg输入 ===<br />
<br />
先下载ffmpeg的Windows编译版,可以用static link版本。目前ffmpeg在Windows只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs(分辨率是1280x720)放在一个目录里。<br />
<br />
ffmpeg -i input.avs -pix_fmt yuv420p -an - |x264 [options] -o output.264 - 1280x720<br />
<br />
先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”,最后一定要指定分辨率。分辨率不能写错,不然编码速度极慢,而且画面出错。如果在编码时发现速度极慢,就要看看是不是分辨率搞错了。<br />
<br />
=== 用mencoder输入 ===<br />
<br />
mencoder有很多有价值的滤镜,用起来也很方便。mencoder本身可以编译进libx264,和单独的x264效果一样,但是mencoder不能多线程,滤镜和编码全跑在一个线程上,因此会非常慢。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里带就有mencoder。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
mencoder input.avs -vf fmt=i420p -nosound -o - |x264 [options] -o output.264 - 1280x720 <br />
<br />
mencoder部分不同,x264部分和用ffmpeg时一样。<br />
<br />
=== 用avs2yuv输入 ===<br />
<br />
avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。<br />
<br />
同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。<br />
<br />
avs2yuv input.avs -raw -o - |x264 [options] -o output.264 - 1280x720<br />
<br />
<br />
以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。<br />
<br />
== DXVA ==<br />
DXVA(DirectX Video Accelaration)通常被称为硬解,是在Windows上用显卡解码H.264等编码视频的方式。AMD的显卡方面,HD2xxx以上的系列都可以DXVA;nVidia的显卡方面,GeForce8000以上的系列都可以DXVA。<br />
<br />
符合一定条件的H.264编码的片子才能正常的DXVA。由于H.264的复杂性,用比较老的CPU解码720p和1080p通常比较吃力,因此720p和1080p的片子能否DXVA常常成为矛盾的焦点。为了让大多数人都能正常的看到片子,建议尽量使用能够DXVA的参数压制。<br />
<br />
随着显卡驱动程序的完善,DXVA(硬解) H.264视频的限制条件也越来越少。无论是A卡还是N卡,现在都可以DXVA L5.1@HiP,ref=16的片子,但是不能保证完全没解码错误,特别是在A卡上。由于DXVA的需求主要集中在720p和1080p上,SD的视频一般CPU都无压力,因此讲解一下针对高清片子的“安全DXVA”参数。<br />
<br />
<br />
[[待补充]]<br />
<br />
<br />
== PSP上的480p H.264编码的mp4片子 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=X264%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D&diff=265
X264使用介绍
2010-07-30T11:29:21Z
<p>Lititude:以内容'x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。 主页: http://videolan.org/x264 == H.264和x264 == H.264是[http:// ITU](Int…'创建新页面</p>
<hr />
<div>x264是一个开源的H.264视频编码函数库。是最好的有损视频编码器。<br />
<br />
主页: http://videolan.org/x264<br />
<br />
== H.264和x264 ==<br />
<br />
H.264是[http:// ITU](International Telecommunication Unite 国际通信联盟)和[http://mpeg.org] MPEG(Motion Picture Experts Group 运动图像专家组)联合制定的视频编码标准。从1999年开始,到2003年形成草案,最后在2007年定稿[[有待核实]]。在ITU的标准里称为H.264,在MPEG的标准里是MPEG4的一个组成部分--MPEG4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。<br />
<br />
H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。<br />
<br />
x264始于2003年,从当开源社区的MPEG4-ASP编码器[[Xvid]]小有所成时开始的,经过几年的开发,特别是[http://multi Dark Shikari]加入开发后,x264逐渐成为了最好的视频编码器。<br />
<br />
== 获取x264 ==<br />
<br />
x264的主页上只用git提供源代码。虽然官方网站不提供编译好的版本,但是有很多人在编译x264,特别是Win32平台的编译版。<br />
*http://x264.nl的编译版没有任何patch,即所谓纯净版。<br />
*jeeb编译版<br />
*komisar的<br />
*rack的<br />
*VFR Maniac的<br />
*xvidvideo.ru的<br />
*roozhou的支持DirectShow输入的版本。<br />
*还有doom9上的[http://forum.doom9.org/ currentpatchs]和doom10上的[http://doom10.org/ Win32build]<br />
<br />
我们一般选择32位的最新版。<br />
<br />
<br />
== 命令行界面的x264 ==<br />
<br />
我们下载到的x264.exe是一个命令行工具,不需要安装,随便放在哪里都能运行。双击x264.exe只能看到打开了一个黑色的窗口里在刷着什么,然后就没了。x264.exe需要在命令行里输入命令,没有GUI。<br />
<br />
不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的[http:// MeGUI],此外还有ripbot、staxrip等GUI。doom9上有[http://forum.doom9.org/一个版]都是各种GUI,一一试过来看看自己喜欢什么。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本篇教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。<br />
<br />
== 命令行的操作 ==<br />
按Win+R键调出运行,输入cmd,回车,出现黑底白字的窗口和几行字,其中有 “C:\Document and Settings\User\>”表示当前所在的目录,后面闪的光标代表等待输入内容。<br />
<br />
图<br />
<br />
假设x264.exe在E:\Encoder\文件夹,输入<br />
cd /D E:\Encoder<br />
<br />
回车<br />
<br />
图<br />
<br />
改变当前目录到E:\Encoder了。接下来,输入<br />
x264<br />
回车<br />
<br />
图<br />
<br />
<br />
接下来,不用截图说明会返回的信息了,而直接粘贴cmd里返回的字符。输入命令会以“>”提示,看到“>”就代表此行是输入命令并回车。<br />
<br />
我们看到,如果只运行x264,什么都不提供给他,x264会返回一个错误。他告诉我们缺少输入文件,并提示我门输入“x264 --help”会列出选项。照他说的,加--help试试。<br />
<br />
>x264 --help<br />
<br />
返回<br />
<br />
x264 core:84 r1416 fcf70c2<br />
Syntax: x264 [options] -o outfile infile [widthxheight]<br />
<br />
Infile can be raw YUV 4:2:0 (in which case resolution is required),<br />
or YUV4MPEG 4:2:0 (*.y4m),<br />
or Avisynth if compiled with support (yes).<br />
or libav* formats if compiled with lavf support (yes) or ffms support (yes).<br />
Outfile type is selected by filename:<br />
.264 -> Raw bytestream<br />
.mkv -> Matroska<br />
.flv -> Flash Video<br />
.mp4 -> MP4 if compiled with GPAC support (yes)<br />
<br />
Options:<br />
<br />
-h, --help List basic options<br />
--longhelp List more options<br />
--fullhelp List all options<br />
<br />
Example usage:<br />
<br />
Constant quality mode:<br />
x264 --crf 24 -o <output> <input><br />
<br />
Two-pass with a bitrate of 1000kbps:<br />
x264 --pass 1 --bitrate 1000 -o <output> <input><br />
x264 --pass 2 --bitrate 1000 -o <output> <input><br />
<br />
Lossless:<br />
x264 --crf 0 -o <output> <input><br />
<br />
Maximum PSNR at the cost of speed and visual quality:<br />
x264 --preset placebo --tune psnr -o <output> <input><br />
<br />
Constant bitrate at 1000kbps with a 2 second-buffer:<br />
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input><br />
<br />
Presets:<br />
<br />
--profile Force the limits of an H.264 profile [high]<br />
Overrides all settings.<br />
- baseline,main,high<br />
--preset Use a preset to select encoding settings [medium]<br />
Overridden by user settings.<br />
- ultrafast,veryfast,faster,fast,medium<br />
- slow,slower,veryslow,placebo<br />
--tune Tune the settings for a particular type of source<br />
or situation<br />
Overridden by user settings.<br />
Multiple tunings are separated by commas.<br />
Only one psy tuning can be used at a time.<br />
- psy tunings: film,animation,grain,psnr,ssim<br />
- other tunings: fastdecode,zerolatency<br />
<br />
Frame-type options:<br />
<br />
-I, --keyint <integer> Maximum GOP size [250]<br />
--interlaced Enable pure-interlaced mode<br />
<br />
Ratecontrol:<br />
<br />
-B, --bitrate <integer> Set bitrate (kbit/s)<br />
--crf <float> Quality-based VBR (0-51, 0=lossless) [23.0]<br />
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0]<br />
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]<br />
-p, --pass <integer> Enable multipass ratecontrol<br />
- 1: First pass, creates stats file<br />
- 2: Last pass, does not overwrite stats file<br />
<br />
Input/Output:<br />
<br />
-o, --output Specify output file<br />
--sar width:height Specify Sample Aspect Ratio<br />
--fps <float|rational> Specify framerate<br />
--seek <integer> First frame to encode<br />
--frames <integer> Maximum number of frames to encode<br />
--level <string> Specify level (as defined by Annex A)<br />
--quiet Quiet Mode<br />
<br />
<br />
这下返回了不少字符。x264先告诉我们他的版本号,再告诉我们他的基本用法是“x264 --output output.mkv input.avs”。还提示我们可以输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。<br />
<br />
接着输入 <br />
<br />
>x264 --fullhelp<br />
<br />
列出了所有选项。<br />
<br />
x264.exe的用法是,在命令行里输入形如<br />
x264 [--参数名 参数值 ...] --output 输出文件 输入文件 [宽x高]<br />
<br />
:其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号,输入文件后可以跟文件的分辨率(“宽x高”),有时也可以不指定分辨率。<br />
<br />
此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数的短参数都列在此参数的前面。<br />
<br />
实际命令实例:<br />
>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o psp.mp4 ep01.avs<br />
<br />
调用x264编码当前目录下的"ep01.avs"文件,输入"psp.264"。<br />
<br />
>"D:\encoder tools\x264.exe" --crf 18 --tune touhou --preset slower -I 24 -o "D:\touhou\out.mkv" "D:\touhou\yyc\yyc.avi"<br />
<br />
这个例子中,x264.exe、和输入文件都不在当前目录下,也不输出到当前路径,就要写完整的路径,如果有空格就需要在完整的路径左右加上引号。<br />
<br />
在Windows XP和Windows 7中,把文件拖拽到cmd里,cmd会自动把文件的完整路径写在命令行上的。<br />
<br />
== x264的输入输出文件类型 ==<br />
在加入了ffms/lavf后,x264可以直接输入几乎所有类型的片子,而不是像原来一样必须借助于avs。下面所讲的是输入输出的片子类型,除此之外的输入输出还有多pass中的stats文件、qp file、量化矩阵和tc file。<br />
<br />
*输入:<br />
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由[[ffms]]或[[ffmpeg|lavf]]打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。<br />
<br />
*输出:<br />
x264可以输出没有封装的H.264视频流,扩展名是.264;[[matroska]]视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。<br />
<br />
'''x264通过输出文件的扩展名判断输出文件类型。'''<br />
<br />
== x264的preset和tune系统 ==<br />
x264的参数繁多,开发者为了方便使用者、简化输入和提出编码建议,设计了一套快速调用参数的系统。'''如果没有特别的需要,请尽量使用preset和tune系统。'''这套开发者推荐的参数比各种道听途说的参数更合理。<br />
<br />
在使用了preset和tune以后,依然可以指定里面已经有的参数。手动指定的参数会覆盖preset和tune里的参数。<br />
<br />
=== --preset ===<br />
通过--preset的参数调节编码速度和质量的平衡。<br />
<br />
--preset的值有ultrafast、superfast、veryfast、fast、medium、slow、slower、veryslow、placebo。从快到慢,参数越来越EP。默认是medium。<br />
<br />
=== --tune ===<br />
通过--tune的参数值指定片子的类型,是和视觉优化的参数,或有特别的情况。<br />
<br />
--tune的值有<br />
*film:电影、真人类型;<br />
*animation:动画;<br />
*grain:需要保留大量的grain时用;<br />
*stillimage:静态图像编码时使用;<br />
*psnr:为提高psnr做了优化的参数;<br />
*ssim:为提高ssim做了优化的参数;<br />
*fastdecode:可以快速解码的参数;<br />
*zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。<br />
<br />
== 码率控制 ==<br />
x264有4种码率控制方式,分别是1pass bitrate、crf、qp和2pass bitrate。其中2pass bitrate包含pass bitrate。<br />
<br />
1pass bitrate和qp(恒定量化值)一般不推荐使用。<br />
<br />
=== crf ===<br />
--crf 23 (默认)<br />
<br />
一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。<br />
<br />
可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。<br />
<br />
crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。<br />
<br />
=== 2pass bitrate ===<br />
2pass代表需要做2次编码,第一遍编码x264先分析全片,得到一个stats文件和一个mbtree文件(默认使用mbtree)。第二遍编码以这两个文件作参考分配合理的码率。需要特定的码率(或文件大小)一定要用2pass(或多pass)编码。<br />
<br />
除了2pass,还有多pass模式,在之前分析的基础上再继续分析,理论上会使码率分配更加合理,但实际上2pass已经足够了。<br />
<br />
--bitrate 1000 (以1000kbps码率为例)<br />
x264 --bitrate 1000 --pass 1 --tune animation --preset slower --stats "1pass.stats" -o NUL input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output.264 input.avs<br />
<br />
:先输入第一行,等1pass跑完之后再输入第二行跑2pass。1pass主要为了得到1pass.stats和1pass.stats.mbtree两个文件,2pass需要这两个文件已完成最后的编码,最后输出文件。<br />
:默认情况下,1pass是以“快速”参数跑的,而不是以指定的参数跑。因此一般1pass会比2pass的速度快上很多。而这里1pass指定输出的文件名是NUL,在Windows里,这个文件名是保留的,因此不会有任何输出的以编码的文件。<br />
:尽量让1pass和2pass的视频一致,如果改变了视频,分析的结果就会变得比较不准确。<br />
<br />
此外,1pass可以用crf方式跑,而且可以输出编码的结果,也就是说先跑个1pass看看,如果大小和预想的偏差太多,就再跑个2pass。但由于1pass默认用“快速”参数跑,因此这里的1pass需要加上--slow-firstpass强制x264用我们给的参数跑。<br />
<br />
x264 --crf 20 --pass 1 --slow-firstpass animation --preset slower --stats "1pass.stats" -o output1pass.264 input.avs<br />
x264 --bitrate 1000 --pass 2 --tune animation --preset slower --stats "1pass.stats" -o output2pass.264 input.avs<br />
<br />
:1pass会输出3个文件:1pass.stats、1pass.stats.mbtree和output1pass.264。前两个是分析文件,后一个是编码的结果。如果对编码结果不满意,则继续用分析的结果跑2pass。<br />
:2pass必须用bitrate模式跑,不能用crf跑。<br />
<br />
== 64bit的x264 ==</div>
Lititude
https://www.nmm-hd.org/d/index.php?title=%E5%8E%8B%E7%89%87%E6%96%87%E6%A1%A3&diff=258
压片文档
2010-07-28T09:12:28Z
<p>Lititude:</p>
<hr />
<div>这是一篇压片教程,这篇教程试着在大类的页面里讲操作方法,在名词的页面里讲理论或更细的操作。<br />
<br />
请配合NMM-DOC的其他部分理解这些内容。<br />
<br />
== [[前言]] ==<br />
压片是一个EP的实践过程。压片有千万种理由,比如需要省硬盘空间而压片;比如为了移动设备而压片;比如为了爱而压片;比如纯粹的EP而已……无论出于什么目的,有一些原则是不会变的,有些弯也最好不要试图去绕。<br />
<br />
== [[压制概念|概念]] ==<br />
<br />
压制概念闲谈,请首先理解这些概念。<br />
<br />
[[封装]]<br />
<br />
[[视频]]:[[色彩]]、[[编码原理]]、[[fps]]、[[分辨率]]<br />
<br />
[[音频]]<br />
<br />
== [[播放器|播放]] ==<br />
介绍开源播放器和有关DirectShow的软件。<br />
<br />
[[MPC-HC]]<br />
<br />
[[mplayer]]<br />
<br />
[[VLC]]<br />
<br />
[[GraphStudio]]<br />
<br />
== [[Avisynth 2.5中文文档|AviSynth]] ==<br />
压片必要工具,EP党永远耕作的土地。<br />
<br />
[[avsp|工具]]<br />
<br />
[[源滤镜]]<br />
<br />
[[处理]]<br />
<br />
[[vfr处理]]<br />
<br />
== [[x264使用介绍|视频编码(x264)]] ==<br />
世界上最好的视频编码器。介绍x264的命令行界面用法,用起来很简单。<br />
<br />
[[preset和tune系统]]<br />
<br />
[[参数解释]]<br />
<br />
[[64bit的x264]]<br />
<br />
[[DXVA和psp]]<br />
<br />
== [[音频]] ==<br />
音频压制等操作。<br />
<br />
== [[封装]] ==<br />
和mkv、mp4有关的封装工具介绍。<br />
<br />
[[mkvtoolnix]]<br />
<br />
[[mp4box]]<br />
<br />
专题<br />
<br />
== [[DVDrip]] ==<br />
压片的核心课程。二区(日本)的DVD制作混乱,码率不足司空见惯。请特别恨P.A.Works。<br />
<br />
[[Telcine]]<br />
<br />
[[分辨率]]<br />
<br />
[[工具]]<br />
<br />
[[TIVTC]]和[[AAD]]<br />
<br />
[[mencoder]]<br />
<br />
== [[ts]] ==<br />
日本HDTV信号的处理方法,请先学习DVDrip。<br />
<br />
[[Trim]]和[[音频]]<br />
<br />
[[去台标]]<br />
<br />
[[480p和720p]]<br />
<br />
== [[BDrip]] ==<br />
和CPU过不去。</div>
Lititude