问题标签 [nvenc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
994 浏览

gpu - nvenc:编码期间没有 i 帧

我正在使用 nvenc 将一系列帧编码为 GPU 上的 h.264 视频。我的例子是非常综合的,我只是重复相同的帧。编码工作正常,我正在研究发生了什么:

我注意到的一件事是,开始帧是 IDR 帧(NV_ENC_PIC_TYPE_IDR),其余帧都是前向预测帧(NV_ENC_PIC_TYPE_P)。我想这可能是因为每一帧都是一样的。因此,我生成了每个帧都是完全随机的帧。在这种情况下,它也是一样的。

所以,我的问题是配置中是否存在使所有帧为 P 帧并且没有 B 帧或 I 帧的配置。在什么条件下会生成这些帧?

0 投票
0 回答
491 浏览

video - 从文件中间解码 H264

我目前正在使用 nvenc 解码 H264 文件,我需要随机访问该文件。所以,我为测试目的所做的就是让每一帧都成为 IDR 帧。现在,如果我知道 H264 文件中帧的文件偏移量。仅仅寻找那个位置,读取为该帧写入的字节量并将其传递给解码器就足够了吗?我的理解是解码器应该能够只处理一个 IDR 帧并能够对其进行解码。那是对的吗?

0 投票
1 回答
14516 浏览

parameters - 如何在ffmpeg中指定nvenc使用的GPU

我正在使用 ffmpeg 可执行文件通过 nvenc 将 mpegts 流从 h264 转码为 h265,并且我的主板上安装了两个 nvidia 显卡:GeForce GTX 690 和 Tesla k-10。ffmpeg 中的 nvenc 是否有任何编解码器特定参数可以选择使用我想要的任何这些 GPU 进行编码?

0 投票
0 回答
941 浏览

c++ - NVENC Nvidia Encoder D3D11 图片尺寸错误等问题

先介绍几个基本信息:

操作系统:Win7 64Bit | 显卡:GTX970

我有一个暂存 ID3D11Texture2D ,我想对其进行编码。

我想直接通过nvEncRegisterResource使用纹理,但似乎我只能通过 D3D9 而没有 D3D11 纹理。否则我会得到一个NV_ENC_ERR_UNIMPLEMENTED

因此,我创建了一个输入缓冲区并手动填充它。

纹理的格式为DXGI_FORMAT_R8G8B8A8_UNORMDXGI_FORMAT_NV12格式可能仅从 Windows 8 开始。

输入缓冲区格式为NV_ENC_BUFFER_FORMAT_ARGB。这也应该是每个颜色通道 8 位。由于 alpha 值是互换的,我预计会出现错误的图片,但仍应对其进行编码。

到目前为止我的过程:

  • 创建 ID3D11Texture2D 渲染纹理
  • 创建 ID3D11Texture2D 暂存纹理
  • 使用 nvEncCreateInputBuffer 创建 NVENC 输入缓冲区
  • 使用 nvEncCreateBitstreamBuffer 创建 NVENC 输出缓冲区

:: 更新例程 ::

  • 渲染成渲染纹理
  • CopyResource() 到暂存纹理
  • 从暂存纹理填充 NVENC 输入缓冲区
  • 编码帧
  • 从 NVENC 输出缓冲区获取数据

如您所见,我每次更新只编码一帧。

到目前为止,一切正常,但如果我查看框架,图片大小是错误的。

在此处输入图像描述

那应该是 1280 x 720。如果我还尝试传递超过一帧,那么我会得到一个损坏的文件。

我知道在 H.264 中我的第一帧是 I 帧,接下来应该是 P 帧。

现在我的代码:

:: 创建输入缓冲区

:: 创建输出缓冲区

:: 填充输入缓冲区

:: 编码帧

:: 从输出缓冲区读取

m_width 和 m_height 始终为 1280 和 720。

为什么图像大小错误以及我如何用超过一帧填充输入缓冲区?

非常感谢您的帮助,

亚历山大

0 投票
0 回答
1025 浏览

gpu - 使用 NVENC 编码多个流 - 单线程还是多线程?

鉴于在进行 NVENC 调用时需要跨线程同步 cuda 上下文,使用多个线程编码多个流时是否存在真正的并发性 [每个线程处理单个流]?

我们在一个线程中做所有事情不是更好吗——节省互斥锁的系统调用等?

0 投票
1 回答
2641 浏览

c# - 如何在 Media Foundation (Windows 10) 中使用硬件 (nvenc) 编码

对不起我的英语不好。我对在 Windows 10 中使用 MF 进行硬件编码有疑问。我有 Nvidia gtx 650(带 nvenc)。我在 c# 中开发了将实时帧流编码为 h264 文件的应用程序。

我使用此代码(https://codereview.stackexchange.com/questions/136144/h-264-image-encoding-using-media-foundation-net)作为示例。我创建了 IMFSinkWriter 对象(sinkWriter),例如,使用 MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS=true

如示例所示,我为每个帧编码执行了以下步骤: 1. 创建 IMFMediaBuffer 对象(缓冲区)并将帧复制到那里 2. 创建 IMFSample 对象(样本)和 sample.AddBuffer(缓冲区) 3. 将样本写入 IMFSinkWriter 对象(sinkWriter)

结果是我 100% 的 CPU 负载(这不是硬件编码!!!)。如何使用相同的代码进行硬件编码?

0 投票
1 回答
2842 浏览

gpu - NVENC 会话限制

我正在使用 NVIDIA GPU (NVENC) 中的硬件编码器进行 H264 编码。我得到了正确的输出,但我无法启动超过 140 个编码流。(一个流执行一个视频编码)

我得到的错误是“NV_ENC_OUT_OF_MEMORY”。发生错误时应用程序的内存使用量远低于可用的总内存:Quadro M5000 中 8GB 中的 600MB (320X240) 2.5GB(640X480) 6GB(1280X710)。

对于比特流分配,NV_ENC_CREATE_BITSTREAM_BUFFER 的大小大于单个帧大小,并且 memoryHeap 类型为 CACHED。

以下是测试机配置:Debian Linux 8.5 Intel Xeon E5 @2.60 GHz Nvidia Quadro M5000 CUDA 7.5,驱动程序 352.39

任何解决方案的建议/方向将不胜感激。谢谢你的时间。

0 投票
1 回答
7246 浏览

ffmpeg - ffmpeg 完整的 nvidia 硬件转码与去隔行

我知道如果 ffmpeg 使用 libnpp 支持编译,您可以使用缩放进行完整的硬件转码,如下所示:

ffmpeg -hwaccel_device 0 -hwaccel cuvid -c:v h264_cuvid -i input -vf scale_npp=-1:720 -c:v h264_nvenc -预设慢速输出.mkv

是否可以应用一个由硬件处理的去隔行过滤器而不是缩放,就像上面示例中的缩放一样?libnpp 是否提供去隔行扫描?

0 投票
2 回答
2540 浏览

ffmpeg - 无法编译 ffmpeg 以支持 NVIDIA 硬件加速

我正在尝试编译 ffmpeg 以支持 NVIDIA 硬件加速。但我收到以下错误:

我按照 NVIDIA 开发者论坛上的说明安装了 CUDA。我使用的配置是:

我笔记本电脑上的 GPU 是 NVIDIA Corporation GM108M [GeForce 840M]。

0 投票
4 回答
11704 浏览

windows - ffmpeg 错误:在 Windows 中找不到 libnpp

我正在尝试使用 MinGW/msys 使用 nvidia 库在 Windows 中编译 ffmpeg 以进行硬件加速。尝试按照nvidias 网站上的说明进行操作(部分:使用 NVIDIA GPU 开始使用 FFmpeg/libav)。配置了--enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags=-Ilocal/include --extra-cflags=-I ../common/inc --extra-ldflags=-L../common/lib/x64 --prefix=ffmpeg但停在“错误:找不到 libnpp”。其中 common 文件夹是从NVIDIA Video Codec SDK下载的,但没有 npp 库或头文件。有什么解决办法吗?感谢您的建议。