我更新一下看看。我在之前版本的配置文件里确实试过cq。ffmpeg的文档写得不太清楚,但NVidia关于他们扩展的文档提到了crf和cq用于恒定质量。不管怎样,大多数转码任务,我一小时长的片子大概10分钟就能搞定 ![]()
你可以查询 ffmpeg 以获取每个编码器的可用选项列表,以下是 h264_nvenc 显示的输出
如你所见,有两个选项:-cq(我们想要的恒定质量)和 -qp(不是我们想要的,因为它是恒定量化参数,基本没用)。
你可能还需要设置 -rc vbr,但你可以分别尝试加与不加,然后告诉我效果如何。
-rc E..V… 覆盖预设的码率控制(-1 到 INT_MAX)(默认 -1)
constqp E..V… 恒定 QP 模式
vbr E..V… 可变码率模式
cbr E..V… 恒定码率模式
vbr_minqp E..V… 带最小 QP 的可变码率模式
ll_2pass_quality E..V… 针对画质优化的多遍编码(仅适用于低延迟预设)
ll_2pass_size E..V… 针对恒定帧大小优化的多遍编码(仅适用于低延迟预设)
vbr_2pass E..V… 多遍可变码率模式
-rc-lookahead E..V… 码率控制前瞻帧数(-1 到 INT_MAX)(默认 -1)
-surfaces E..V… 并发表面数(0 到 64)(默认 32)
-cbr E..V… 使用 CBR 编码模式(默认 false)
-2pass E..V… 使用两遍编码模式(默认 auto)
-gpu E..V… 选择使用哪块支持 NVENC 的 GPU。第一块为 0,第二块为 1,依此类推。(-2 到 INT_MAX)(默认 any)
any E..V… 选择首个可用设备
list E..V… 列出可用设备
-delay E..V… 将帧输出延迟指定帧数(0 到 INT_MAX)(默认 INT_MAX)
-no-scenecut E..V… 启用前瞻时设为 1 以禁用场景切换自适应 I 帧插入(默认 false)
-forced-idr E..V… 强制关键帧时,强制为 IDR 帧(默认 false)
-b_adapt E..V… 启用前瞻时设为 0 以禁用自适应 B 帧决策(默认 true)
-spatial-aq E..V… 设为 1 启用空域 AQ(默认 false)
-temporal-aq E..V… 设为 1 启用时域 AQ(默认 false)
-zerolatency E..V… 设为 1 表示零延迟操作(无重排延迟)(默认 false)
-nonref_p E..V… 设为 1 启用自动插入非参考 P 帧(默认 false)
-strict_gop E..V… 设为 1 以最小化 GOP 间码率波动(默认 false)
-aq-strength E..V… 启用空域 AQ 时,指定 AQ 强度。强度范围 1(弱)到 15(强)(1 到 15)(默认 8)
-cq E..V… 在 VBR 码率控制的恒定质量模式下,设置目标质量等级(0 到 51,0 表示自动)(0 到 51)(默认 0)
-aud E..V… 使用访问单元定界符(默认 false)
-bluray-compat E..V… 蓝光兼容性变通(默认 false)
-init_qpP E..V… P 帧初始 QP 值(-1 到 51)(默认 -1)
-init_qpB E..V… B 帧初始 QP 值(-1 到 51)(默认 -1)
-init_qpI E..V… I 帧初始 QP 值(-1 到 51)(默认 -1)
-qp E..V… 恒定量化参数码率控制方法(-1 到 51)(默认 -1)
感謝以上資訊——我原本是從 NVidia 的開發者網站拉取指令,看起來那裡只暴露了 FFMPEG 的一部分功能。我還從某些日誌注意到,hevc_nvenc 是這個編碼器的新名稱,而 nvenc_hevc 已被棄用。
所以我會試著把編碼設定檔改成這樣:
[----------------------]
[MKV HEVC Constant Quality]
Description=WARNING: Handbrake Constant Quality encoding (25) with Nvidia HEVC.
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v hevc_nvenc -cq 25 -rc vbr -map 0:v
ffmpeg-audio=-acodec ac3 -ab 192k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 384k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=--decomb --denoise="weak" --loose-anamorphic --verbose=2 -T -O
handbrake-video=--start-at duration:3 -e x265 -q 18
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=true
調整 -cq 數值,看看品質是否會改變。
尝试极端值,比如5或40
我试过18及以下——此时压缩率的节省非常有限(1.3GB文件只省300MB)。23似乎是HEVC CQ的最佳平衡点。
如果我對這裡的概念理解正確,以最後一個設定檔為例。
如果我將 -cq 設為更大的整數,壓縮效率會降低(即檔案變大)。
這會讓編碼變快嗎?或者會直接降低影片品質嗎?
![]()
是的,没错。它也是非线性尺度。数字越大,文件越大。如果你了解 HandBrake 或 H.264,CQ20 在 HEVC 中相当于 CQ23。谢谢!Will。
文件复杂度较低,因此编码/解码会稍微容易一些。不过,你会注意到画质的差异。如果你经常录制体育或其他高速运动的画面,建议偏向较低的设置。祝你好运!
首先,這個 H265 設定檔真的很棒,使用 Quadro 顯示卡作為硬體編碼來源時表現非常出色!
其次,我一直在嘗試用這個設定檔,並想用 ffmpeg 建立一個 H264 版本的專用編碼器,但在語法上遇到了一些問題,導致無法順利處理,不知道你或其他人有沒有在這方面做過實驗?
我之所以想這麼做,是為了建立一個速度更快、但品質穩定的設定檔,專門用來處理不需要長期儲存的節目,像是體育節目、《危險邊緣》這類會看個一兩次就刪掉的內容,這樣可以節省夜間轉碼的時間,跟那些需要長期儲存的電視劇、電影等檔案區分開來。
谢谢——我完全理解试图解码 ffmpeg 命令的痛苦,文档太……简洁了。
你需要把 HEVC_nvenc 换成 h264_nvenc。记住,265 和 264 的恒定质量值不同。265 的“默认”值是 23,而 264 的默认值是 20。
希望能帮到你!Will。
謝啦夥伴,我試過了,但不管怎麼調語法,它似乎總是退回 handbrake CLI 選項。我讀了一大堆你說的「簡潔」文件,真的夠簡潔!然後找到一堆關於 h264_nvenc 編碼器選項的資訊,這些選項看起來跟目前版本 ffmpeg 裡的 HEVC 編碼器選項不太一樣。
明天有空時我可以貼幾個測試用的 profile 副本,如果你願意幫忙一起排查讓 profile 正常運作的話。目前我是靠修改內建的 h264 profile(基於 libx264 編碼器),這的確能利用硬體加速,但我想打造一個純粹基於硬體編碼器的 profile,就像你為 HEVC 做的那樣。
很乐意帮忙。首先,请打开命令行并运行“FFMpeg.exe -codecs”。这将显示 FFMpeg 中可用的编解码器。
关于 Handbrake 的备用方案,我知道较新版本的 Handbrake 支持 nvenc,但不确定是否可以直接替换 handbrakecli.exe。我会再深入了解一下。
谢谢!Will。
谢谢兄弟,感激不尽。
关于 Handbrake 回退,最新版 GUI 已经支持 NVENC,性能相当不错!不过这里的“回退”指的是纯 CPU 的 x264 编码,没有任何硬件加速。
明天我会再测试一些命令行选项并补充细节。
谢谢!
更新:(新用户在同一线程 3 小时内只能回复三次,抱歉
)
语法已经搞定,看来之前是太累了没写对。只要把 HEVC 换成 h264,其余保持不变即可:
[MKV H264 NVENC Constant Quality]
Description=nVidia H264 NVENC Constant quality, varible bitrate
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v h264_nvenc -cq 27 -rc vbr -map 0:v
ffmpeg-audio=-acodec libfdk_aac -ab 128k -map 0:a
ffmpeg-audioac3=-acodec libfdk_aac -ab 320k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=–decomb --denoise=“weak” --loose-anamorphic --verbose=2 -T -O
handbrake-video=–start-at duration:3 -e x265 -q 18
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=true
这样就能顺利跑 NVENC 主编码器了。
顺便问一句,你知道怎么把参数改成固定码率(CBR)而不是现在的 VBR 质量模式吗?有几个场景我需要手动控制码率。
您可以從這裡下載 HandBrakeCLI 1.2 版:HandBrake
它整合了 nvenc_h264 與 nvenc_h265。也許可以試著讓 Handbrake 做同樣的事……
我一直在测试更新后的 HandBrakeCli,它支持 NVENC,你是否了解相关选项,或者是否可以通过 MCEBuddy 的配置文件指向一个导出的 .json 文件进行配置?
你应该可以传给它一个从 Handbrake 导出的 json 配置文件。先调整好你想要的设置,然后试试这个预设。
看起来有个选项叫 --preset-import-gui,应该正好能完成这个操作 ![]()
嘿,兄弟,HandBrakeCli 的文档比 ffmpeg 好用太多了。
我折腾了一下参数,用 H265 得到了相当不错的效果。
因为有很多来自有线频道的交错视频源,我得不断微调去交错(decomb)参数,还要在几块显卡的 NVENC 引擎和 CPU 之间找到平衡。
下面这个配置能让 I7-8700K + nVidia 1060 的引擎跑到 90% 负载:CPU 负责去交错,NVENC 负责视频编码,帧率在 240–300 fps,CPU 跑满滤镜;如果关掉滤镜能冲到 400+ fps。
[Handbrake Cli 1.2.0 H265 - Quality 28]
Description=nVidia NVENC HW (H265) Quality Setting 28 + Decomb
order=handbrake
FixedResolution=true
PreConversionCommercialRemover=false
UniversalCommercialRemover=false
handbrake-general=--loose-anamorphic --comb-detect=fast --decomb=mode=7 --verbose=2 --format av_mkv --subtitle 1,2,3
handbrake-video=--start-at duration:0 --encoder nvenc_h265 --encoder-preset slow --encoder-level 4.1 --quality 28 --vfr
handbrake-audio=--aencoder copy:aac --audio 1,2,3
handbrake-audioac3=--aencoder copy:ac3 --audio 1,2,3
handbrake-ext=.mkv
handbrake-audiodelay=skip
把 NVENC preset 调到 medium 时,由于 CPU 是瓶颈,开滤镜几乎没提速;理论上可以另开一个不带去交错的任务来把多余的编码能力吃满。关掉滤镜后,1060 能冲到 550+ fps,P400 能到 400+ fps。
正考虑给那台 I5-8400(最终要扛下所有活的 Plex 服务器)换张 P2000,这样既能解锁无限并发编码流做直播转码,也能继续跑后台的 MCEBuddy 任务。
嗨 Anders,
我的機器跑出來的效能跟你差不多,不過你的處理器比較新一些。我會試試你分享的 Handbrake 設定檔──多謝!
我把 MCEBuddy 和 Plex Server 裝在同一台機器上──i7 7700、16GB RAM、GTX 1060 與 SSD。唯一的外部資源就是 NAS,所有 Plex 錄影與媒體都存在那裡。這樣的組合對我來說相當順手──一小時的 HD 節目用我的設定檔壓大約 10 分鐘,H265 節省空間的效果很棒。
以前我用 Core i5,但發現超執行緒對整體效能影響很大。不過那是 PMS 還沒內建硬體加速之前的事了;現在或許可以跑更低功耗的 CPU,除了去交錯/去梳紋的部分可能還是要點效能。
感謝分享!Will。
Mail](Outlook) for Windows 10