简易命令行使用教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
簡易命令行使用教程
以下均經過32位win xp sp3環境測試通過.其它環境自行測試(當然我覺得應該八九不離十就是了)
本文假定觀看者用過dos或者命令提示符,有最基本的dos命令行基礎.
名詞解釋:
vbr: variable bitrate rate可變碼率
cbr: constant ............固定碼率
vfr: variable frame rate可變幀率(注意是"幀率")
cfr: constant ..........恒定幀率
1.解碼環境搭建
雖然我覺得這個問題應該不大但是還是扯扯吧
正確轉碼的前提是正確解碼,所以有暴風影音或者迅雷看看什麽的全刪掉就行.刪的越乾淨越好.
avs官網在sourceforge上,搜索最新版下載即可(雖然貌似這個最新版也是幾年以前的了)
2.視頻壓制:x264簡介
x264的優點和應用廣泛程度不需要廢話.幾乎所有的壓制工具在壓制h264時到最後免不了調用x264或者x264的壓制函數庫,不唯天朝.(當然如果你說你是創價學會成員只使用h235編碼格式那就當我沒說好了(被拖走))當然那些商業視頻領域壓制h264的時候使用什麽商用encoder我們就不得而知了╮(╯_╰)╭
x264官網:x264.nl(很短是吧)在"encoder(x264.exe):"下面的表格中選取合適的x264版本下載(至於下載鏡像那就隨便選了):32位機子選32bit版,64位機子選64bit版.至於最下面的兩個10bit版——哈?你想壓制10bit?你是準備壓制出來給別人二壓呢,還是想上傳上去用flash看的時候在右邊出現一道紅邊呢.省碼率什麽的是浮雲.本來要不是因為10bit在h264的壓制標準下能夠在相同crf下取得更好的SSIM的話誰會去用那個理論上會比8bit高25%碼率的10bit...
好了扯遠了回到正題.下載下來的壓縮包中自行尋找x264.exe這個程序.x264全部功能都在這個exe程序中,其它的可以扔掉.
x264 --fullhelp 顯示x264全部幫助(當然是英文的).還有這些幫助文檔也可以被重定向到硬盤文件中:x264 --fullhelp >1.txt PS:txt不是所有的回車符都能正常顯示,所以輸出的txt推薦用寫字板看.
由於x264的幫助文檔都是萬惡的E文(廢話)於是這裏用中文(如果我寫的還是中文的話)簡單介紹一下幾個常用的壓制參數
壓制方式
最常用的不外乎這兩種:2pass方式和crf方式.2pass可以在vbr的前提下保證碼率為精確的某個值——說白了就是在給定碼率限制下合理分配碼率使用:因此恒定碼率模式可以完全去死了.當然作為代價編碼時需要兩次編碼:第一次pass1使用mbtree確定各處的碼率分配,第二次pass2進行實際編碼.(好吧我想上面這一段對你們來說絕逼廢話了)
crf方式則是恒定質量方式.就是編碼時每處的質量都是一樣的,根據每處的質量直接進行編碼.這樣的好處毫無疑問就是只需要一次encode,在其它條件相同的前提下比2pass能快30%-10%的速度左右吧(所以最速搬運神馬的
……)缺點就是最終出來的碼率誰都不知道(當然在編碼過程中x264會給出隨時的輸出碼率大小所以可以大致判斷碼率範圍).好在渣浪上限寬並且我們有后黑打法(但是對不允許用后黑的新番來說這句話等於沒說).crf另一個好處就是可以用在2pass轉碼的pass1第一次轉碼中,這樣第二次轉碼就可以直接拿第一次轉碼的結果來編碼(當然用腳趾頭想都知道這樣會比正統的2pass模式更慢……)
2pass模式需要調用兩次x264:
x264 --pass1 --bitrate 600 --ssim --stats "temp.stats" -o NUL "input.XXX"
x264 --pass2 --bitrate 600 --ssim --stats "temp.stats" -o "output.mp4" "input.XXX4"
--bitrate 600表示固定碼率600kbps,其它參數照著抄就是了(反正詳細的解釋我也不知道2333)"-o"是"--output"的簡寫.最後加上輸入文件.如果輸入文件是視頻文件,x264會按照ffms->lavf->directshow的順序嘗試解碼直到解碼成功為止,如果輸入是個avs,那麼就直接調用avisynth解碼.如果是其它文件,那麼後果自負.
crf模式只需要調用一次x264:
x264 --crf 23 -o "output.mp4" "input.XXX"
其中--crf後面的數字表示質量(具體怎麼回事我也不清楚233).網絡視頻壓制一般使用23-25左右的參數(少數使用26以上的參數).這樣的參數比下載用視頻使用的18-22左右的參數能夠省下不少碼率(基本--crf 21比--crf 23碼率會高至少50%左右),而且在綫看畫質基本可以接受(當然下載下來看之後還是能發現畫質差不少的)
這是最簡單的命令行調用了.其它參數不加就說明使用默認的參數.順便說下如果調用x264時如果不強制指出壓制方式和相應參數的話那麼就會使用--crf 23的參數壓制.
其它參數:
--preset:預設
預設是x264提供好的一組參數集合,指定一個預設就意味著指定了一大堆其它的基本參數設置,因此極其常用.當然預設中的基本參數設置會被用戶手動的參數設置給覆蓋.
用法:--preset {預設參數}
預設參數(在fullhelp中可以看到)有ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo這幾種,壓制速度從快到慢,高壓程度從低到高.默認為medium——在medium預設下其它一切參數.一般情況下medium也夠用了.當然想玩高壓也可以用更慢的預設一直到placebo.(不過說實話提高預設帶來的碼率節省比不上crf提高帶來的碼率節省.crf提高節省碼率立竿見影(當然畫質損失也立竿見影),而把preset從medium調到placebo碼率節省也不過30%-5%而已——尤其是靜態多的視頻提高預設帶來的碼率節省微乎其微.但是壓制速度降低這點是非常明顯的.veryslow預設通常要比medium預設慢上12-20倍左右.placebo么……貌似比veryslow預設還要慢上幾倍吧……求I7大神驗證).
--tune參數
--tune參數也是一群參數的集合,可以優化壓制后視
頻的表現程度,同樣會被用戶手動參數設置覆蓋.
常用的幾個參數: --tune animation, film, stillimage(從名字里就可以看到適合於什麼樣的視頻了)
PS: x264這裏有一個彩蛋:--tune touhou,在x264源代碼和x264幫助中都沒提到,是x264的開發者之一,某個該死的東方廚Dark Shikari加進去的(這個該死的東方廚已經不止一次用東方夢想夏鄉來展現x264的壓制能力,其中之一就是這個:http://x264.nl/developers/Dark_Shikari/Flash/lowbitrateanime.html).這個tune適合于壓制那些具有大量小的物體不規則運動的視頻.舉個例子?典型的例子就是東方正作的實況錄像——想想那些滿天飛的彈幕吧.
基本上preset和tune聯合使用就能應付大多數視頻了,下面是一些常用的基本參數:
-r --ref
決定最多可以使用的參考幀數.x264在壓縮的時候可以選擇多個參考幀進行壓縮.範圍1-16,默認3,推薦3-6.--ref參數越高,對視頻解碼的要求也越高.--ref 16的視頻對於很多老機子來說解碼十分吃力.
-b --bframes 允許最多P幀連續替換為B幀的個數
名詞解釋:
I幀:IDR幀,又稱關鍵幀,參考幀,即本身不參考其它幀,只是幀內部使用一定的壓縮來壓縮的幀.此外,視頻跳轉的時候只能跳轉到I幀,無法跳轉到其它幀.
P幀和B幀都是非參考幀,需要參考其它幀壓縮.兩者不同處在於P幀只能參考在它之前的幀,B幀可以參考前後的幀.
範圍1-無窮.默認3,推薦3-6.
--b-adapt
決定B幀替換P幀的算法.
0無差別替換,不推薦.1是快速替換,不過此時--bframes參數對碼率的節省作用微乎其微.2是優化替換,碼率節省最好,但是此時壓制速度也會越來越慢——bframes 1時就比--b-adapt 1慢很多,--bframes 6則已經是I7這樣CPU的專用了
默認1.
-I --keyint
最大I幀的間距.默認250.這個參數越大,碼率節省越好,但是也會使得拉進度條的時候進度條的跳躍越大.看情況決定
-i --min-keyint
最小I幀間距.越小越好,最好設到1,這樣就可以使I幀的插入沒有束縛,合理使用碼率.
--scenecut
控制額外插入的I幀的數量.默認40.這個數越大越容易額外插入I幀.視頻動態多建議提高此參數,動態少可以降低此參數.
--rc-lookahead
mbtree可用幀的數量
默認40,最大250.這個參數越大碼率越低,壓制速度倒不會明顯減少,但是內存使用會呈線性增長.32機子的極限內存4G下壓制1080P的時候最大只能開到100左右,再高就會吃光你的內存.
--fps
決定新視頻的幀率大小.默認視頻幀率不變.
自帶濾鏡參數和視頻分辨率調整等
x264自帶了視頻分辨率調整濾鏡:resize濾鏡.
--vf/--video-filter參數可以調用x264自帶濾鏡.使用方法:
--vf 第一個要加的濾鏡:各種濾鏡參數/第二個要加的濾鏡:..........
在編碼之前x264會按照給定的濾鏡的順序處理解碼
后的片子再壓制.
常用濾鏡:
1.crop切邊濾鏡
用法:
crop:left,top,right,bottom
2.字幕加載濾鏡:
使用VSFilter.dll加載字幕壓制
用法:僅僅加上"subtitle"字樣即可.此時需要使用額外的參數--sub "ass或srt字幕路徑"來加入字幕壓制(當然如果外部已經有--sub參數的話那麼默認這個濾鏡是開啟的,並且在所有濾鏡的最前面)
3.resize調整分辨率濾鏡:
用法:resize:[寬度,高度][,sar][,fittobox][,csp][,分辨率修改算法]
名詞解釋:
sar:像素比例(應該是這個吧?).簡單的說,比如你的視頻sar=4:3,那麼你視頻中的一個4*3的區域在實際顯示時就會拉伸到4*3的區域中顯示;再比如你的視頻sar=4:3,那麼你視頻中一個1440*1080的區域在實際顯示時就會拉伸到一個1920*1080的區域中顯示.
(似乎我剛才是不是說出了電視臺放送hdtv的真相……嘛算了反正11區電視臺又不會查我水錶)
注意ACfunPlayer目前不支持根據sar調整顯示大小!因此之前說的一個1440*1080,sar=4:3的視頻用現在的acplayer觀看的話其顯示大小會依舊是1440*1080的,從而導致比例失調.NicoPlayer和BiliPlayer都支持根據sar調整顯示大小,所以從nico拖下來的視頻有可能sar不是1:1,大家注意看一下如果不是1:1那麼就重新壓制成1:1吧……
(所以這就是爲什麽上面那個11區hdtv節省碼率的小把戲在ac行不通的原因)
此外,字幕組發佈的凡是"PSP用"的mp4,其分辨率均為720*480,非848*480的16:9.這樣的片子由於sar的關係在PC上放依舊是16:9的,但是直接上傳到ac上觀看就會比例失調.所以此時記得一定要老實壓制一遍!推薦改成704*396壓制(此時sar會自動調整為1:1)
fittobox在你源視頻的寬高比和目標分辨率的寬高比不相同時決定是只按照寬度(width),按照高度(height)或者根據寬度和高度(both)來壓縮視頻
sar參數決定輸出后的視頻的sar.
csp中參數有兩項:[顏色空間][:色彩深度]
顏色空間默認不變.不過現在視頻的顏色空間一般都是yv12的,不是這個顏色空間的強制轉換成這個顏色空間即可
色彩深度或者8bit或者16bit.一般8bit.
分辨率調整算法有很多,最常用的是lanczos算法,在速度和調整效果上都有不錯的表現.spline算法調整效果最優秀,但是速度最慢.
使用舉例:
--vf resize:512,288,,,,lanczos 使用lanczos算法將分辨率調整為512*288,其它參數默認
--sub "a.ass" --vf crop:0,30,0,30/subtitle/resize:960,720,4:3,both,yu12:8,spline
將源視頻上下切邊30像素大小后掛載"a.ass"字幕,最後使用spline算法將視頻分辨率改為960*720,sar設置為4:3,顏色空間設置為yu12,顏色深度為8bit.
重磅推薦:direct264
官方版x264的缺點:
1.只支持cfr處理,vfr輸入的視頻在輸出時會導致時間全部亂掉.典型表現就是封裝上音頻之後發現音頻和視頻不同步.
2.第
一條的直接結果就是x264不支持直接輸入rmvb(rmvb在某種意義上來說全是vfr,不信請用mpc打開觀看實時幀率)
3.優先使用lavf和ffms解碼沒有使用windows下更優秀的directshow解碼
因此x264的改進編譯版direct264/d264產生了
d264下載地址,更新日誌和使用方法:/bbs/read.php?tid=494982
(壯哉我大慢慢慢慢慢慢慢慢游)
dshow2raw.exe可以使用directshow將視頻解碼.d264運行時會自動優先使用dshow2raw進行解碼
常用d264新加參數:
--deldup 刪除重複幀,對一圖流等靜態多的視頻有奇效
例如--deldup 0.5就是刪重複幀時限定最低幀率為0.5
--------------------------------------
ffmpeg介紹
ffmpeg和mencoder都是非常萬能的存在.不過我們這裡僅會用到少數幾個功能.
語法: ffmpeg {參數1} -i 輸入1 {參數2} -i 輸入2 ..... -f {封裝格式} 輸出文件
例如:ffmpeg -vcodec copy -i "aaa.mp4" -acodec copy -i "aaa.m4a" -f flv "aaa.flv"
將aaa.mp4的視頻和aaa.m4a的音頻封裝到一個叫做aaa.flv的flv文件中.這是最常用的封裝方法
-vcodec和-acodec是強制制定編碼方式(因此可以不寫),copy就是複製視頻音頻流.ffmpeg中有x264的函數庫libx264,因此有一套參數可以用來在ffmpeg使用x264.可惜我不會,加之我們已經有d264了.
ffmpeg -vcodec copy -acodec copy -i "aaa.mp4" -f flv "aaa.flv"
這個則是修改封裝用的命令.
ffmpeg -i "aaa.rmvb" -f wav "aaa.wav"
注意到wav是沒有編碼的音頻.因此這條命令的意思就是將aaa.rmvb中的音頻解碼后輸出到aaa.wav中
------------------------------------
Nero AAC Encoder介紹
neroaacenc是目前最好的aac壓制工具.官網下載最新版,解壓出來的rar包中找到neroaacenc.exe即可.
常用參數:
-br 設定壓制的碼率.例如--br 192000設定輸出碼率為192kbps
-q 設定壓制的質量.V家曲子-q 0.5-1.0保險點.一般視頻0.24-0.32左右足夠.
兩個參數不可同時使用
-lc/-he/-hev2 指定編碼方式是lc-aac/he-aac/he-aac v2.默認-lc
輸出碼率在128kbps以上的音頻推薦-lc,64kbps以下的推薦-hev2,64-96的推薦-he
-if 輸入文件
-of 輸出文件
-ignorelength 這個參數的作用我也不清楚XDDD不過加上可以防止很多問題
--------------------------
音頻壓制:
使用ffmpeg+neroaacenc聯合壓制
當然direct264中有dshow2wav+CTAACEncoder.exe這個組合可以用來壓制音頻,但是我還是習慣用ffmpeg+neroaacenc(被拖走)
ffmpeg -i "input.XXX" -f wav - | neroaacenc -br 192000/-q 0.5 -if - -ignorelength -of "output.m4a"
注意到這條命令中的一個特殊符號"-",這個符號實際上代指的stdin/stdout.再注意一下"|"這個符號串接了兩條指令:ffmpeg和neroaacenc.因此這條指令的實際作用是將ffmpeg的輸出通過管道pipe到neroaacenc作為輸入
注意ffmpeg中的命令實際上是在解碼輸入
中的音頻部份.因此這條命令的實質就是使用ffmpeg解碼音頻并將其送給neroaacenc壓制成m4a格式的aac音頻
(畢竟,ffmpeg很萬能的.在ffmpeg面前neroaacenc自帶的音頻解碼功能就是渣)
----------------------------
混流封裝
ffmpeg -vcodec copy -i "aaa.mp4" -acodec copy -i "aaa.m4a" -f flv "aaa.flv"
這裏面順便再扯一下:音頻一定要是m4a的,否則後果自負.
完了(呼哧,總算完了……)