Skip to content

FFmpeg NVENC 硬體加速壓製(H.264 相容方案 / HEVC 平衡方案)

以 NVIDIA RTX 30 系列 GPU 硬體加速將動畫(HEVC/10-bit + ASS 字幕)轉碼為 MP4,依目標客戶端支援度選擇 H.264(最廣相容性)或 HEVC 10-bit(高效率保真)兩種策略。

概述

此文章涵蓋兩種 NVENC 壓製策略,依目標播放環境選擇:

H.264 方案(廣相容性優先):將 HEVC-10bit 來源轉為 H.264 8-bit MP4,目標是讓所有客戶端 Direct Play,包含老電視、PS4/PS5、行動裝置及 Jellyfin 網頁端。犧牲壓縮效率換取最大相容性。

HEVC 方案(效率保真優先):客戶端已確認支援 HEVC 解碼(如 MPV 播放器),則保留 10-bit 色深並使用 HEVC NVENC 編碼,在幾乎相同品質下將檔案縮小 30–50%。

兩種方案共同的設計選擇:

  • NVENC 而非軟體編碼:NVIDIA GPU 硬體編碼速度 10–20 倍於 CPU,可即時燒錄字幕
  • VBR + CQ 速率控制:在感知品質恆定的前提下讓編碼器動態分配位元率
  • ASS 字幕燒錄:用 libass 將字幕硬燒入畫面,不依賴客戶端字幕解析能力

核心內容

兩種方案的選擇依據

情境建議方案理由
老電視、PS4、Jellyfin 網頁端需支援H.264H.264 幾乎全設備 Direct Play
TV 端確認使用 MPV、PS5、近年 Apple/AndroidHEVC 10-bit保留 10-bit、節省 30–50% 空間
客戶端不確定H.264相容性優先
重視硬碟空間、客戶端已知支援 HEVCHEVC 10-bit同品質下小一半

H.264 方案

為什麼選 H.264 而非 HEVC(相容性情境)

Jellyfin 在客戶端無法 Direct Play 時必須軟體轉碼,會大幅增加伺服器 CPU 負載且造成延遲。H.264 High Profile 幾乎所有設備都支援 Direct Play,HEVC(尤其 10-bit)則需要相對新款的硬體解碼器。對涵蓋老設備的家庭媒體庫,廣泛相容性優先於壓縮效率。

編碼器相容性壓縮率Direct Play
H.264 (8-bit)最廣(老電視、PS4/PS5、所有手機)幾乎全部設備
HEVC (10-bit)有限(需硬體解碼支援)需相對新款設備

NVENC VBR + CQ 速率控制

-cq 24 是 1080p 動畫的建議起點(值越小品質越好、檔案越大)。-maxrate 8M 確保峰值不超過 8Mbps,適合 WiFi 串流。VBR + CQ 組合是 NVENC 的最佳實踐,等效 libx264 的 CRF 模式。

自適應量化(Spatial / Temporal AQ)

NVENC 的 AQ 對動畫大量平坦背景效果顯著,幾乎無效能損耗:

  • Spatial AQ-spatial_aq 1):對複雜紋理多分配位元,減少天空、牆壁的 Banding
  • Temporal AQ-temporal_aq 1):靜止場景少用位元,高動態場景多用

色彩空間明確標記

HEVC 來源常帶有 HDR 或 BT.2020 色彩空間 metadata。轉為 H.264 SDR 時若不明確標記,播放器可能誤判導致畫面過暗。明確設定 -colorspace bt709 -color_primaries bt709 -color_trc bt709 -color_range 1 告知播放器此為標準 BT.709 SDR TV Range 內容。

PowerShell 字幕路徑注意事項

ffmpeg subtitles 濾鏡的路徑語法在 PowerShell 下有雙層引號問題:

  • 外層:-vf "subtitles=..." 使用雙引號(PowerShell 需要展開變數)
  • 內層:filename='$InputSub' 使用單引號(ffmpeg 濾鏡語法,處理空格/特殊字元)

HEVC 方案

為什麼是 HEVC 10-bit 而非 8-bit(效率情境)

來源檔案本身為 HEVC 10-bit。若輸出降為 8-bit,動畫中常見的天空、漸層背景、淡色光影會在量化過程產生明顯色階條紋(banding),spatial AQ 也救不回來。RTX 30 系列(Ampere)原生支援 HEVC main10 編碼,速度與 8-bit 差距 < 5%,沒有理由不保留 10-bit。

路徑速度檔案大小Banding適用
HEVC main10 (p010le)略慢略大幾乎無本方案預設
HEVC main (yuv420p)略快略小動畫場景明顯不推薦

NVENC Preset 的速度/品質曲線

NVENC 的 p1–p7 是速度/品質光譜,p1 最快、p7 最慢。實測對於 1080p 動畫:

Preset相對速度品質(同 CQ)評語
p4(medium)100%基準NVENC 預設
p5(slow)~85%+顯著HEVC 方案推薦
p6(slower)~70%+小幅品質微升,速度損失大
p7(slowest)~55%+微幅CP 值低,不推薦

p5 是 HEVC NVENC 的甜蜜點:相對 p4 有顯著品質提升,相對 p6/p7 速度損失少。

Multipass:免費的品質提升

-multipass qres 啟用兩階段編碼:第一階段以四分之一解析度快速分析,第二階段以全解析度利用第一階段的位元率分配資訊實際編碼。

Multipass 模式速度損失品質提升推薦
關閉(預設)0%基準
qres~15%明顯本方案使用
fullres~30%微小於 qres過度,不值得

CQ 26:HEVC 的 1080p 動畫起點

HEVC 的 CQ 值需比 H.264 + 2 才能對應相同感知品質:

用途CQ 值品質預估 1080p 動畫 24 分鐘檔案大小
收藏級22接近視覺無損800 MB – 1.2 GB
平衡(推薦)26高品質,幾乎無感失真300 – 500 MB
節省空間30可見細節損失150 – 250 MB

B-frame Reference(HEVC 獨有)

-b_ref_mode middle 讓 HEVC 編碼器將中間的 B-frame 用作其他 B-frame 的參考幀,提升壓縮效率。H.264 NVENC 不支援此功能,是 HEVC 真正佔優勢的地方之一。配合 -bf 4 可進一步壓榨壓縮率。

-tag:v hvc1 不可省略

預設 NVENC 輸出的 HEVC tag 為 hev1,在 Apple 生態系(iOS Safari、macOS QuickTime、Apple TV)會直接無法播放。改為 hvc1 是 Apple 設備相容的硬性要求,且對其他平台無副作用。

MaxRate 6M:WiFi 串流防爆

HEVC 效率比 H.264 高 30–40%,原 H.264 方案 -maxrate 8M 對應 HEVC 約 5–6M。本方案取 6M 留餘裕給高動態場景(OP/ED、戰鬥場面),避免峰值卡死導致 block artifacts。

關鍵要點

H.264 方案:

  • CQ 24 是 1080p 動畫的推薦品質起點,電影/大螢幕可降至 19
  • -maxrate 8M 防止峰值超速,WiFi 串流必設
  • PowerShell 中 $var 只在雙引號中展開,單引號原文輸出
  • H.264 Profile High → Main 是排查舊設備播放問題的第一步

HEVC 方案:

  • CQ 26 是 1080p 動畫 HEVC 的推薦起點,動畫電影可降至 22
  • -multipass qres 是免費品質升級,僅犧牲 15% 速度
  • 保留 10-bit(-profile:v main10 -pix_fmt p010le)對來源即 10-bit 的動畫必設
  • -tag:v hvc1 是 Apple 設備相容硬性要求
  • -b_ref_mode middle 是 HEVC 獨有的免費壓縮率提升

實際應用

H.264 方案適用:

  • 目標設備涵蓋老電視、PS4/PS5、iPhone/Android
  • 透過 Cloudflare Tunnel / WiFi 串流,需控制峰值頻寬
  • 動畫來源為 WebRip HEVC-10bit + ASS 字幕,需轉為 Jellyfin 友善格式

HEVC 方案適用:

  • 目標客戶端確認支援 HEVC 解碼(MPV、PS5、近年 Apple 設備、近年 Android)
  • 重視儲存空間,希望檔案比 H.264 方案小 30–50%
  • 不需考慮 PS4、舊電視棒、Jellyfin Web 瀏覽器(此情境用 H.264 方案)

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
GPUNVIDIA RTX 3060(Ampere,RTX 30 系列)
作業系統Windows + PowerShell
字幕格式.ass(Advanced SubStation Alpha),libass 燒錄
輸出容器MP4

H.264 方案

核心指令(單一檔案)

powershell
$InputVideo = "[Nekomoe kissaten&LoliHouse] BEASTARS - 06 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv"
$InputSub   = "[Nekomoe kissaten&LoliHouse] BEASTARS - 06 [WebRip 1080p HEVC-10bit AAC ASSx2].ass"
$OutputName = "output_jellyfin.mp4"

ffmpeg -hide_banner -hwaccel cuda -i "$InputVideo" `
  -vf "subtitles=filename='$InputSub':fontsdir='Fonts'" `
  -c:v h264_nvenc `
    -preset p6 `
    -tune hq `
    -profile:v high `
    -rc vbr `
    -cq 24 `
    -b:v 0 -maxrate 8M -bufsize 16M `
    -spatial_aq 1 -temporal_aq 1 `
    -rc-lookahead 32 -bf 3 `
    -pix_fmt yuv420p `
    -color_range 1 `
    -colorspace bt709 -color_primaries bt709 -color_trc bt709 `
    -c:a copy `
    -movflags +faststart `
    "$OutputName"

品質微調表

需求情境參數修改預估位元率適用場合
極致畫質(收藏)-cq 19 -maxrate 14M -bufsize 28M電影、4K TV 大螢幕觀賞
標準平衡(推薦)-cq 24 -maxrate 8M -bufsize 16M中(CP 值最高)一般 1080p 動畫、日劇
節省空間(行動)-cq 28 -maxrate 4M -bufsize 8M手機/平板、硬碟空間吃緊
相容性優先(舊機)-profile:v main不變極舊電視棒、機上盒
音訊轉碼(5.1 → 立體聲)-c:a aac -b:a 192k微幅增加電視不支援 FLAC/5.1 聲道

HEVC 方案

核心指令(單一檔案)

powershell
$InputVideo = "[Nekomoe kissaten&LoliHouse] BEASTARS - 06 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv"
$InputSub   = "[Nekomoe kissaten&LoliHouse] BEASTARS - 06 [WebRip 1080p HEVC-10bit AAC ASSx2].ass"
$OutputName = "output_jellyfin_hevc.mp4"

ffmpeg -hide_banner -hwaccel cuda -i "$InputVideo" `
  -vf "subtitles=filename='$InputSub':fontsdir='Fonts'" `
  -c:v hevc_nvenc `
    -preset p5 `
    -tune hq `
    -profile:v main10 `
    -rc vbr `
    -cq 26 `
    -b:v 0 -maxrate 6M -bufsize 12M `
    -multipass qres `
    -spatial_aq 1 -temporal_aq 1 `
    -rc-lookahead 32 -bf 4 -b_ref_mode middle `
    -pix_fmt p010le `
    -color_range 1 `
    -colorspace bt709 -color_primaries bt709 -color_trc bt709 `
    -tag:v hvc1 `
    -c:a copy `
    -movflags +faststart `
    "$OutputName"

品質微調表

需求情境參數修改預估位元率適用場合
收藏級畫質-preset p6 -cq 22 -maxrate 10M -bufsize 20M -multipass fullres動畫電影、4K TV 大螢幕、長期保存
標準平衡(推薦)-preset p5 -cq 26 -maxrate 6M -bufsize 12M -multipass qres一般 1080p 動畫,CP 值最高
節省空間-preset p5 -cq 30 -maxrate 4M -bufsize 8M -multipass qres行動裝置、長期歸檔、硬碟吃緊
極速壓製-preset p4 -cq 28 -multipass 0大量批次處理,速度優先
8-bit 相容性備援-profile:v main -pix_fmt yuv420p略低客戶端意外不支援 10-bit 時
音訊轉碼(5.1 → 立體聲)-c:a aac -b:a 192k微幅增加電視不支援 FLAC/5.1 聲道

H.264 vs HEVC 對照速查

項目H.264 方案HEVC 方案
編碼器h264_nvenchevc_nvenc
Profilehigh(8-bit)main10(10-bit)
Pixel Formatyuv420pp010le
CQ 推薦2426(+2 對應同品質)
MaxRate 推薦8M6M(HEVC 效率較高)
Presetp6p5(取速度甜蜜點)
Multipass未啟用qres(必開)
B-frame Ref不支援middle(HEVC 獨有)
MP4 Tag自動hvc1(Apple 相容必設)
預估檔案大小基準約 60–70%
編碼速度基準約 80–90%

相關概念

來源