Appearance
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.264 | H.264 幾乎全設備 Direct Play |
| TV 端確認使用 MPV、PS5、近年 Apple/Android | HEVC 10-bit | 保留 10-bit、節省 30–50% 空間 |
| 客戶端不確定 | H.264 | 相容性優先 |
| 重視硬碟空間、客戶端已知支援 HEVC | HEVC 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 方案)
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
環境參數
| 項目 | 值 |
|---|---|
| GPU | NVIDIA 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_nvenc | hevc_nvenc |
| Profile | high(8-bit) | main10(10-bit) |
| Pixel Format | yuv420p | p010le |
| CQ 推薦 | 24 | 26(+2 對應同品質) |
| MaxRate 推薦 | 8M | 6M(HEVC 效率較高) |
| Preset | p6 | p5(取速度甜蜜點) |
| Multipass | 未啟用 | qres(必開) |
| B-frame Ref | 不支援 | middle(HEVC 獨有) |
| MP4 Tag | 自動 | hvc1(Apple 相容必設) |
| 預估檔案大小 | 基準 | 約 60–70% |
| 編碼速度 | 基準 | 約 80–90% |
相關概念
- Cloudflare Tunnel x Synology NAS 架構指南 — 轉碼後的媒體透過 Cloudflare Tunnel 暴露給外部客戶端串流