樣例
我們要達到的視頻效果是這樣的
確定壓縮目標
bilibili不進行二壓的參數要求如下:
視頻碼率最高1800kbps(H264/AVC編碼)
音頻碼率最高192kbps(AAC編碼)
分辨率最大支持1920x1080
level≤4.1
關鍵幀平均至少10秒一個
色彩空間yuv420
位深8bit
聲道數≤2
采樣率=44100
(不滿足條件的視頻會被系統二次壓制)
FFMPEG壓制
這里先給出全部命令:
ffmpeg -i $argv[1] -vcodec libx264 -preset veryslow -profile:v high -level:v 4.1 -pix_fmt yuv420p -b:v 1780k -r 60 -acodec aac -strict -2 -ac 2 -ab 128k -ar 44100 -pass 1 -f flv /dev/null; and ffmpeg -i $argv[1] -vcodec libx264 -preset veryslow -profile:v high -level:v 4.1 -pix_fmt yuv420p -b:v 1780k -r 60 -acodec aac -strict -2 -ac 2 -ab 128k -ar 44100 -pass 2 -f flv $argv[2]
這里總共執行了兩條命令,下面詳細說一下。
-i $argv[1]
這里指定了目標視頻路徑,也就是要處理的視頻文件
-vcodec libx264
使用X264編碼器
-preset veryslow
使用h.264的最佳編碼,犧牲了編碼速度。因為b站1800的碼率如果不采用最佳編碼,會導致畫面極度模糊。
-profile:v high -level:v 4.1
設備兼容性,這里不需要修改
-pix_fmt yuv420p
色彩空間yuv420p,b站要求
-b:v 1780k
碼率采用1780,如果采用上限1800實際結果將有個可能超過這個值,從而被二壓
-r 60
視頻幀率為60FPS
-pass 1
說明當前處理為第一次處理,為了達到穩定的視頻目標參數我們需要進行兩次壓制,第二條命令就是第二次壓制
acodec aac -strict -2 -ac 2 -ab 128k -ar 44100
音頻參數,說明使用acc解碼器,雙聲道,128K碼率,44.1k采樣率,都是b站的上限數值
-f flv
視頻格式為flv
上傳視頻
經過本地的兩次壓制,上傳到b站后就不會被二壓,從而保證了60fps的幀率。