ffmpeg hwaccel 没有剩下的解码器表面

Posted

技术标签:

【中文标题】ffmpeg hwaccel 没有剩下的解码器表面【英文标题】:ffmpeg hwaccel no decoder surfaces left 【发布时间】:2021-06-04 22:15:52 【问题描述】:

最近我在 Windows 10 amd64 上原生编译了最新版本的 ffmpeg 4.3。 环境:CUDA11.0、NASM、VS2019、MYSY2 with mingw64。

我也用了补丁https://trac.ffmpeg.org/attachment/ticket/9019/0001-Patch-for-ticket-9019-CUDA-Compile-Broken-Using-MSVC.patch

编译特征是:

--enable-nonfree --enable-cuda-nvcc --enable-libnpp --enable-gpl --enable-libx264 --enable-cuda-llvm --enable-nvenc
--toolchain=msvc --extra-cflags=-I../nv_sdk --extra-ldflags=-libpath:../nv_sdk

我测试了 ffmpeg 的 cuda 加速。 CPU是AMD 3500x。 GPU 是 RTX 2060Ultra。

发出这个命令:

.\ffmpeg -hwaccel cuvid -i .\a.wmv -c:v hevc_nvenc -bf 4 -preset slow -c:a aac -b:a 256k myvideo.mp4

但收到此错误:

[wmv3 @ 000002632DFC5180] No decoder surfaces left
Error while decoding stream #0:0: Cannot allocate memory
[hevc_nvenc @ 00000263300B1740] Failed locking bitstream buffer: out of memory (10):
video encoding failed: Cannot allocate memory

我不确定我哪里出错了。

【问题讨论】:

我下载 gyan.dev ffmpeg。面临同样的问题 【参考方案1】:

尝试添加 -extra_hw_frames 2。

我在 4.4 版上也遇到了同样的问题。这是针对 4.1 报告的,但仅在某些情况下。有人在 https://trac.ffmpeg.org/ticket/7562 上建议了 -extra_hw_frames 2 解决方法,它对我有用。

【讨论】:

以上是关于ffmpeg hwaccel 没有剩下的解码器表面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ffmpeg 中使用硬件加速

在 RTX 3080 上使用 ffmpeg 在 h264 中编码失败

尝试使用 NVDEC 解码 4K 视频时出错

基于FFmpeg的Dxva2硬解码及Direct3D显示

ffmpeg使用硬件加速hwaccelcuvidh264_cuvidh264_nvenc

ffmpeg使用硬件加速hwaccelcuvidh264_cuvidh264_nvenc