硬件解码因参数无效而失败

想让它跑起来。我有一张 Quadro P1000 显卡,所有 CUDA 检测都通过,但运行时失败并回退到软件模式。日志文件已附上,我看到的错误是:

[mpeg2video @ 0000026adf73eb00] decoder->cvdl->cuvidCreateDecoder(&decoder->decoder, params) failed → CUDA_ERROR_INVALID_VALUE: invalid argument

提前感谢。Frontline_WHRODT_2019_05_14_21_59_00.wtv-Frontline-2019-05-15T07-06-32.9029270-04-00.log.zip (106.0 KB)

其實圖形驅動程式回報的錯誤與「解碼」有關,而非編碼。它仍在使用硬體編碼器:

2019-05-15T07:11:59 MCEBuddy.AppWrapper.FFmpeg → Stream #0:0: Video: hevc (hevc_nvenc) (Main) (hev1 / 0x31766568), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1–1, 2000 kb/s, 29.97 fps, 30k tbn, 29.97 tbc
2019-05-15T07:11:59 MCEBuddy.AppWrapper.FFmpeg → Metadata:
2019-05-15T07:11:59 MCEBuddy.AppWrapper.FFmpeg → encoder : Lavc58.42.100 hevc_nvenc

ffmpeg 對硬體解碼器的請求被顯示卡拒絕,因此失敗。可能有幾個原因,也許它沒有正確識別該使用哪種解碼器,或是該特定串流組態的 mpeg2 影像解碼不受支援。

由於原始影片是 mpeg2,而 mpeg2 的軟體解碼已經相當高效,你可能看不到明顯效能提升;反而可能因為需要把影像資料複製到顯示記憶體、解碼後再傳回 ffmpeg,再送回顯示卡編碼,而花費更多時間。通常 h.264 與 h.265 在硬體解碼上才會有最大幅度的加速。

若你仍想嘗試,可在設定檔的 ffmpeg-general 行加入以下參數,強制使用特定的硬體解碼器:

-c:v mpeg2_cuvid

這應該是 ffmpeg-general 行的最後一個參數。

謝謝你幫我看,Goose。既然它實際上似乎運作正常,那我就先不管它了。

Independent Lens_WHRODT_2020_03_30_21_59_00.wtv-Independent Lens-2020-03-30T23-43-56.7z.zip(142.0 KB)Goose,我又发现了一个问题。程序启动时,会疯狂调用 HandBrake,但随后报错并回退到 ffmpeg,速度就慢了很多。

我附上了两段转换日志,突出显示了这个问题。如有任何帮助,不胜感激。eNASCAR iRacing Pro Invitational Series_FS1HD_2020_03_29_12_59_00.wtv-NASCAR-2020-03-29T16-49-48.log(2.2 MB)

可能是來源影片資料損毀,或是您的顯示卡驅動程式有 Bug,無法處理該資料:

2020-03-30T23:52:19 MCEBuddy.AppWrapper.Handbrake → Encoding: task 1 of 1, 16.18 % (386.94 fps, avg 353.10 fps, ETA 00h06m30s)
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [23:52:20] 1048.345459s: Film → Video
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [23:52:20] 1048.879272s: Video → Film
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [h264_nvenc @ 00000000050d4dc0] Failed unlocking input buffer!: generic error (20)
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [23:52:20] encavcodec: avcodec_send_frame failed
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [h264_nvenc @ 00000000050d4dc0] Failed unlocking input buffer!: generic error (20)
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [23:52:20] encavcodec: avcodec_send_frame failed
2020-03-30T23:52:20 MCEBuddy.AppWrapper.Handbrake → [23:52:20] encavcodec: avcodec_send_frame failed

谢谢你的分享。是这样的,我最近不得不重建服务器,当我重新安装并重建 MCE 配置文件时,我取消了“选择最佳音频”并勾选了“多声道音频”。

我无法解释,但此后就再也没遇到这个问题。

我把这个经验分享出来,以防其他人也遇到类似情况。

或者也可能只是驱动程序损坏,重建服务器时顺带修复了。

你好!

我在使用這個命令時也遇到類似的錯誤訊息:

ffmpeg -re -hwaccel cuvid -hwaccel_output_format cuda -extra_hw_frames 10 -i rtmp://xxxxxxxxx -map 0 -c:v h264_nvenc -b:v 2M -maxrate 2M -qmin 34 -qmax 51 -g 60 -bf 3 -b_ref_mode middle -bufsize 1M -c:a aac -ar 44100 -ac 1 -flush_packets 0 -f mpegts “udp:xxx.xxx.xxx.xxxx:xxxx”

[h264 @ 0x5641628791c0] decoder->cvdl->cuvidCreateDecoder(&decoder->decoder, params) failed → CUDA_ERROR_INVALID_VALUE: invalid argument
[h264 @ 0x5641628791c0] Using more than 32 (37) decode surfaces might cause nvdec to fail.
[h264 @ 0x5641628791c0] Try lowering the amount of threads. Using 16 right now.
[h264 @ 0x5641628791c0] Failed setup for format cuda: hwaccel initialisation returned error.

請給我一些建議

敬上!

你为什么要在解码时使用 hwaccel?这很可能会因为总线和内存传输开销而拖慢转换速度。

嗨,Goose。

我同時有30個直播頻道在運行,伺服器有2張Quadro P5000 GPU,我正在使用hwaccel進行解碼以避免CPU過載。

乾杯!

由于上述原因,当你使用其他软件功能(如音频编码、滤镜等)时启用解码,很可能会拖慢速度并占用更多 CPU。建议不要启用。