解析:視頻編碼的本質(zhì)、CRF 質(zhì)量控制與硬件加速的取舍)
前言視頻轉(zhuǎn)碼是開發(fā)者和內(nèi)容創(chuàng)作者經(jīng)常遇到的需求。前端需要 Web 兼容的視頻格式后端需要壓縮用戶上傳的素材日常辦公中需要把大體積視頻壓到可傳輸?shù)拇笮 andBrake 是這一領(lǐng)域最成熟的開源工具。它底層基于 FFmpeg封裝了 x264、x265、VP9、AV1 等主流編碼器并提供了圖形化的參數(shù)控制和預(yù)設(shè)系統(tǒng)。本文從編碼原理、參數(shù)配置、性能優(yōu)化和工具選型四個(gè)角度做技術(shù)拆解。一、視頻編碼的本質(zhì)視頻編碼的核心思想是用算力換空間。一段未壓縮的 1080p30fps 視頻每幀 1920×1080×3 字節(jié)RGB每秒 30 幀一分鐘的原始數(shù)據(jù)量約為 11GB。編碼器做的事情就是把這個(gè) 11GB 壓到幾十 MB。編碼器使用了三種主要技術(shù)幀內(nèi)壓縮。對(duì)于單個(gè)畫面I 幀利用相鄰像素之間的相似性做壓縮。把畫面分成 8×8 或 16×16 的宏塊對(duì)每個(gè)宏塊做離散余弦變換DCT將空間域信息轉(zhuǎn)換到頻域。人眼對(duì)高頻細(xì)節(jié)不敏感編碼器會(huì)優(yōu)先丟棄高頻分量。幀間壓縮。對(duì)于連續(xù)的多個(gè)畫面大部分內(nèi)容在相鄰兩幀之間是相同的。編碼器不存儲(chǔ)完整畫面而是存儲(chǔ)這一幀相對(duì)于上一幀變化了哪些宏塊運(yùn)動(dòng)向量 殘差數(shù)據(jù)。P 幀只引用前一幀B 幀可以同時(shí)引用前后兩幀——B 幀的壓縮效率最高但計(jì)算量最大。熵編碼。對(duì)上述壓縮結(jié)果做無損壓縮——用更短的編碼表示常見模式用更長的編碼表示罕見模式。H.264 使用 CABAC上下文自適應(yīng)二進(jìn)制算術(shù)編碼比上一代的 CAVLC 效率更高。HandBrake 的編碼器參數(shù)CRF、預(yù)設(shè)速度等本質(zhì)上就是在控制這三種技術(shù)的應(yīng)用程度和精度。二、CRF 質(zhì)量控制HandBrake 最核心的參數(shù)HandBrake 默認(rèn)使用 CRFConstant Rate Factor作為質(zhì)量控制模式。CRF 的核心思想給定一個(gè)畫質(zhì)目標(biāo)值編碼器根據(jù)每一幀的實(shí)際畫面復(fù)雜度自動(dòng)決定分配多少碼率。H.264 編碼器的 CRF 刻度CRF 值效果適用場(chǎng)景0無損文件極大后期制作中間文件18肉眼無損存檔級(jí)畫質(zhì)20-22高質(zhì)量體積合理日常使用推薦23-25良好體積明顯減小Web 上傳/傳輸26-28可接受畫質(zhì)開始下降移動(dòng)端低碼率30畫質(zhì)明顯劣化一般不推薦CRF 值每增加 6碼率約減半畫質(zhì)下降約一倍。從 20 到 26文件大小能減小一半以上但畫質(zhì)損失在日常觀看場(chǎng)景下通常可以接受。H.265 的 CRF 刻度與 H.264 不同——同樣的畫質(zhì)水平需要更高的 CRF 值。經(jīng)驗(yàn)法則H.265 的 CRF 值比 H.264 大 2-4 個(gè)單位是等效的。如果 H.264 用 CRF22 滿意H.265 大約用 CRF24-26。為什么不用固定碼率ABR固定碼率的思路是反過來的——先定好每秒用多少數(shù)據(jù)編碼器在這個(gè)限制下盡可能優(yōu)化畫質(zhì)。ABR 適合需要精確控制文件大小的場(chǎng)景如光盤刻錄、帶寬受限的流媒體但缺點(diǎn)明顯簡(jiǎn)單的畫面如靜態(tài) PPT 錄屏用了不必要的碼率復(fù)雜的畫面如高速運(yùn)動(dòng)場(chǎng)景碼率又不夠。CRF 更適合創(chuàng)作者場(chǎng)景——你不知道最終文件會(huì)有多大但你關(guān)心畫質(zhì)好不好。三、編碼速度預(yù)設(shè)算力與壓縮效率的權(quán)衡HandBrake 的編碼速度預(yù)設(shè)從Ultra Fast到Placebo共 10 個(gè)級(jí)別。預(yù)設(shè)越慢編碼器對(duì)每一幀的分析越深入壓縮效率越高同等畫質(zhì)下文件更小。x264 編碼器的預(yù)設(shè)與壓縮效率的關(guān)系預(yù)設(shè)編碼速度相對(duì)體積同畫質(zhì)典型場(chǎng)景Very Fast基準(zhǔn) ×4100%快速出片F(xiàn)ast基準(zhǔn) ×295%一般使用Medium基準(zhǔn)90%默認(rèn)推薦Slow基準(zhǔn) ×0.785%高質(zhì)量存檔Very Slow基準(zhǔn) ×0.380%極致壓縮數(shù)據(jù)含義以Very Fast為體積基準(zhǔn) 100%Slow能在同等畫質(zhì)下將體積再壓縮 15%但編碼時(shí)間是Very Fast的約 5.7 倍。實(shí)際選擇經(jīng)驗(yàn)日常使用Medium速度快且壓縮效率合理手機(jī)拍的家庭視頻Slow源文件已經(jīng)很大值得多花點(diǎn)時(shí)間壓縮大量視頻批處理Fast速度優(yōu)先Placebo別用。名字已經(jīng)暗示了——比 Very Slow 多花一倍時(shí)間體積再小不到 2%四、H.264 vs H.265 vs AV1編碼選型建議三種主流編碼的對(duì)比編碼壓縮效率編碼速度解碼兼容性專利費(fèi)推薦場(chǎng)景H.264基準(zhǔn) 100%快近乎 100%有通用兼容H.265約 200%慢H.264的 30-50%80%有高質(zhì)量存檔AV1約 250%極慢H.264的 5-10%60%無未來流媒體選 H.264 的理由兼容性第一。任何設(shè)備、任何瀏覽器都能播。適合需要廣泛分發(fā)的視頻。選 H.265 的理由相同畫質(zhì)文件減半。適合個(gè)人存檔——NAS 里的電影、手機(jī)錄制的長視頻。代價(jià)是編碼時(shí)間更長且部分較老設(shè)備不支持硬解。目前不推薦 AV1編碼效率確實(shí)最高但 HandBrake 的 AV1 編碼速度慢到不實(shí)用——一部 2 小時(shí)電影可能需要 6-10 小時(shí)才能完成。雖然 AV1 是未來方向但當(dāng)前的生產(chǎn)力工具場(chǎng)景還輪不到它。五、硬件加速編碼優(yōu)勢(shì)與代價(jià)HandBrake 支持四種硬件編碼器NVENCNVIDIA 顯卡QSVIntel 核顯 QuickSyncVCEAMD 顯卡VideoToolboxApple Silicon硬件編碼的核心優(yōu)勢(shì)是速度。同等條件下硬件編碼比純 CPU 軟編碼快 2-5 倍。但代價(jià)是畫質(zhì)。硬件編碼器的設(shè)計(jì)目標(biāo)是實(shí)時(shí)編碼游戲錄像、直播推流它在分析每一幀時(shí)做的優(yōu)化遠(yuǎn)不如軟件編碼器細(xì)致。同等碼率下x265 slow 的輸出畫質(zhì)明顯優(yōu)于 NVENC HEVC。適用場(chǎng)景判斷追求最小體積/最高畫質(zhì)→ x265 Slow軟編碼追求編碼速度→ NVENC/QSV硬件加速折中方案→ x264 Medium軟編碼速度可接受、兼容性最好六、HandBrake 與 FFmpeg 的關(guān)系HandBrake 是 FFmpeg 的上層封裝。從技術(shù)棧角度FFmpeg 編碼庫libx264, libx265, libvpx 等 容器處理MP4, MKV, WebM 等 濾鏡縮放, 裁剪, 去隔行等HandBrake 圖形界面 預(yù)設(shè)系統(tǒng) 隊(duì)列管理 調(diào)用 FFmpeg 庫用哪個(gè)取決于場(chǎng)景用 HandBrake 的情況需要圖形界面不想敲命令行利用預(yù)設(shè)系統(tǒng)快速選擇目標(biāo)設(shè)備單個(gè)或少量文件的交互式轉(zhuǎn)碼用 FFmpeg 的情況自動(dòng)化批處理腳本需要精確控制每個(gè)參數(shù)服務(wù)端環(huán)境下無 GUI需要用到 HandBrake 未暴露的 FFmpeg 功能如復(fù)雜濾鏡鏈兩者不是競(jìng)爭(zhēng)關(guān)系——HandBrake 的預(yù)設(shè)系統(tǒng)本質(zhì)上是對(duì) FFmpeg 命令行參數(shù)的模板化。如果你會(huì) FFmpeg可以在 HandBrake 中導(dǎo)出預(yù)設(shè)對(duì)應(yīng)的命令行參數(shù)二次定制。七、總結(jié)HandBrake 的技術(shù)價(jià)值在于把視頻編碼這個(gè)復(fù)雜領(lǐng)域做成了可交互的圖形工具。CRF 質(zhì)量控制讓用戶不需要了解碼率就能得到合理的結(jié)果預(yù)設(shè)系統(tǒng)讓每種設(shè)備都有優(yōu)化的配置模板。對(duì)于開發(fā)者而言HandBrake 的生產(chǎn)力體現(xiàn)在從手機(jī)/相機(jī)導(dǎo)出的素材統(tǒng)一轉(zhuǎn)碼為編輯友好的格式批量壓縮錄屏文件用 CRF22 Slow 把 3GB 壓到 500MB 而畫質(zhì)不變將 MKV 封裝轉(zhuǎn)換為 MP4 以適配移動(dòng)端播放編碼參數(shù)的選擇沒有銀彈但理解 CRF、預(yù)設(shè)速度和編碼器差異這三個(gè)核心概念后你能針對(duì)任何視頻場(chǎng)景找到最優(yōu)的配置方案。安裝包和更多編碼參數(shù)說明可在 handbrake.ijinshan.com 獲取參考。