使用ffmpeg壓縮60FPS視頻並上傳至Bilibili


樣例

我們要達到的視頻效果是這樣的

確定壓縮目標

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的幀率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM