需要帮助让 Intel NUC 8i5 的硬件编码工作起来

大家好,我有几台 PC 一直想开启硬件编码:一台 NUC、一台 Beelink(芯片组相同)和一台旧 Dell 笔记本,但全都不行。

我想现在应该集中搞定 NUC。我试过列出的驱动,但装不上,因为 NUC 用的是 Iris Plus 655,驱动不兼容。

我又从 Intel 27 个驱动里试了 3 个,结果都无法启用 QSV,全部回退到 ffmpeg,看起来还是 CPU 在跑。

我想把从 tvheadend OTA 录制的 TS 流转成 HEVC/H265。
到现在完全没头绪,我已经用 MCEBuddy 很久了;现在电视更大,想要更高画质的编码,硬件编码势在必行。

2022 Winter Olympics E191.Biathlon, Cross-Country 2022-02-16.ts-Convert to MP4-2022-02-16T17-06-56.log (5.8 MB)

目前用的是最新测试版,但只要能搞定,让我干什么都行。
先谢谢大家!

根据你的日志,它正在使用硬件编码进行 HEVC 编码。你在最后取消了转换

2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Stream #0:0: Video: hevc (hevc_qsv) (hvc1 / 0x31637668), nv12, 1920x1072 [SAR 1:1 DAR 120:67], q=2-31, 1000 kb/s, 29.97 fps, 30k tbn, 29.97 tbc
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Metadata:
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → encoder : Lavc58.59.100 hevc_qsv
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Side data:
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → cpb: bitrate max/min/avg: 0/0/1000000 buffer size: 0 vbv_delay: N/A
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 160 kb/s
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Metadata:
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → encoder : Lavc58.59.100 aac
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Stream #0:2(spa): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 160 kb/s
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → Metadata:
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → encoder : Lavc58.59.100 aac
2022-02-16T17:27:42 MCEBuddy.AppWrapper.FFmpeg → frame= 30 fps=0.0 q=-0.0 size= 0kB time=00:00:01.00 bitrate= 0.4kbits/s dup=25 drop=0 speed=1.94x
2022-02-16T17:27:43 MCEBuddy.AppWrapper.FFmpeg → frame= 58 fps= 56 q=-0.0 size= 768kB time=00:00:01.89 bitrate=3313.8kbits/s dup=31 drop=0 speed=1.84x

這是我在 NUC 上使用的 Intel HEVC MKV 設定檔。一個使用 ffmpeg,另一個使用 Handbrake。個人覺得 Handbrake 的效果比較好。

[HEVC MKV Intel handbrake]
Description=HEVC in MKV to use Intel hardware encoding in Handbrake.
order=handbrake
DisableEncoderReordering=true
AllowAllCopyRemuxing=true
handbrake-UsingHardwareEncoding=true
handbrake-DisableSoftwareEncoderFallback=true
handbrake-general=-v=2
handbrake-video=--comb-detect=Default --decomb=Default --auto-anamorphic -e qsv_h265 --encoder-preset quality -q 26 --cfr
handbrake-audio=-E copy --audio-copy-mask ac3,eac3,truehd,dts,dtshd,mp3,flac --audio-fallback ffac3 -R auto
handbrake-audioac3=-E copy -R auto
handbrake-ext=.mkv
handbrake-audiodelay=skip

[HEVC MKV Intel ffmpeg]
Description=HEVC in MKV to use Intel hardware encoding in ffmpeg.
order=ffmpeg
DisableEncoderReordering=true
AllowAllCopyRemuxing=true
ffmpeg-UsingHardwareEncoding=true
ffmpeg-DisableSoftwareEncoderFallback=true
ffmpeg-general=-threads 0 -v verbose -hwaccel qsv
ffmpeg-video=-vf yadif=0:-1:1,hqdn3d -pix_fmt qsv -c:v hevc_qsv -preset slow -global_quality 26 -look_ahead 32 -vsync 2 -map 0:v -sn
ffmpeg-audio=-c:a copy -map 0:a
ffmpeg-audioac3=-c:a copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip

谢谢,那我是不是把这些复制到我的配置文件里?
谢谢,Eric

好的,它正在使用 HandBrake,我在看 GPU,确实在用,现在大约 30–35 fps,怎么才能提速?非常感谢你的帮助,已经比之前好多了。
我应该只设 1 个并发吗?目前设的是 2,但测试时我只跑 1 个。

谢谢,Eric

是啊,我現在看到了,哈哈,但它實在太慢了,而且還會退回 ffmpeg?
如果我用手 HandBrake 程式,速度就快非常多,所以我才會以為它沒在運作。
我正在想辦法讓它變快,也想知道 HandBrake 為什麼會失敗。
謝啦,Eric

是的,这些要放进你的 profiles.conf

我建议只跑 1 个。我也差不多 30–35 fps,测了各种情况,这已经是极限了。你可以试试 ffmpeg 配置,看会不会更快。确保在 BIOS 里把能分给显存的内存都分过去,我的最多只能给 1 GB。剩下能调的就是 HandBrake 配置里的 --encoder-preset 参数,可选 quality、balanced 或 speed。自己试一遍,找到你能接受的质量阈值,就用那个预设。另外还可以玩 -q 参数,数字越大质量越低,对速度影响有限,主要影响输出文件大小。

NCIS_ Hawai’i S01E13.Spies, Part 2 2022-01-24.ts-Convert to MP4-2022-02-17T08-32-16.log (1.8 MB)

所以我已經知道 HandBrake 失敗的原因了,是 HEVC 設定檔裡的品質設定;如果把 medium 拿掉就能正常運作,不過速度還是只有 30–35 fps。
當它改用 ffmpeg 時,我可以跑到 77 fps,比較好。
我暫時把 ffmpeg 設成設定檔裡的第一順位,這樣跑得快一點。我是否遺漏了什麼?我看到比我舊的 NUC 都能跑到 120 fps 以上。
設定裡有什麼會限制速度嗎?
我還得檢查記憶體設定,目前不在家,沒辦法進 BIOS 看。
謝謝,Eric

没错,在 Intel 版 Handbrake 里,HEVC 编码器的画质选项只有 speed、balanced、quality。因为 medium(相当于 balanced)并不是其中一项,所以它会报错并转去调用 ffmpeg,而 ffmpeg 确实把 medium 当作合法画质值。由于每个应用对视频/音频的编码、滤镜和处理方式都不同,我无法判断为何在你那边 ffmpeg 更快,甚至不确定它是否在做与 Handbrake 完全等效的操作。

我也无法解释为何某些 NUC 跑得快,除非知道它们传了什么参数、用的是什么软件。唯一能说的是,两款应用都有大量可调参数,你得自己花时间试出最适合的组合。两者文档都算齐全,网上也有大量调参经验分享。但这事儿永无止境——好不容易调到理想状态,一次驱动更新就可能前功尽弃。

当然,“最佳”本身就是主观的。