问题标签 [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.
gpu - nvenc:编码期间没有 i 帧
我正在使用 nvenc 将一系列帧编码为 GPU 上的 h.264 视频。我的例子是非常综合的,我只是重复相同的帧。编码工作正常,我正在研究发生了什么:
我注意到的一件事是,开始帧是 IDR 帧(NV_ENC_PIC_TYPE_IDR),其余帧都是前向预测帧(NV_ENC_PIC_TYPE_P)。我想这可能是因为每一帧都是一样的。因此,我生成了每个帧都是完全随机的帧。在这种情况下,它也是一样的。
所以,我的问题是配置中是否存在使所有帧为 P 帧并且没有 B 帧或 I 帧的配置。在什么条件下会生成这些帧?
video - 从文件中间解码 H264
我目前正在使用 nvenc 解码 H264 文件,我需要随机访问该文件。所以,我为测试目的所做的就是让每一帧都成为 IDR 帧。现在,如果我知道 H264 文件中帧的文件偏移量。仅仅寻找那个位置,读取为该帧写入的字节量并将其传递给解码器就足够了吗?我的理解是解码器应该能够只处理一个 IDR 帧并能够对其进行解码。那是对的吗?
parameters - 如何在ffmpeg中指定nvenc使用的GPU
我正在使用 ffmpeg 可执行文件通过 nvenc 将 mpegts 流从 h264 转码为 h265,并且我的主板上安装了两个 nvidia 显卡:GeForce GTX 690 和 Tesla k-10。ffmpeg 中的 nvenc 是否有任何编解码器特定参数可以选择使用我想要的任何这些 GPU 进行编码?
c++ - NVENC Nvidia Encoder D3D11 图片尺寸错误等问题
先介绍几个基本信息:
操作系统:Win7 64Bit | 显卡:GTX970
我有一个暂存 ID3D11Texture2D ,我想对其进行编码。
我想直接通过nvEncRegisterResource使用纹理,但似乎我只能通过 D3D9 而没有 D3D11 纹理。否则我会得到一个NV_ENC_ERR_UNIMPLEMENTED。
因此,我创建了一个输入缓冲区并手动填充它。
纹理的格式为DXGI_FORMAT_R8G8B8A8_UNORM。DXGI_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。
为什么图像大小错误以及我如何用超过一帧填充输入缓冲区?
非常感谢您的帮助,
亚历山大
gpu - 使用 NVENC 编码多个流 - 单线程还是多线程?
鉴于在进行 NVENC 调用时需要跨线程同步 cuda 上下文,使用多个线程编码多个流时是否存在真正的并发性 [每个线程处理单个流]?
我们在一个线程中做所有事情不是更好吗——节省互斥锁的系统调用等?
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 负载(这不是硬件编码!!!)。如何使用相同的代码进行硬件编码?
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
任何解决方案的建议/方向将不胜感激。谢谢你的时间。
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 是否提供去隔行扫描?
ffmpeg - 无法编译 ffmpeg 以支持 NVIDIA 硬件加速
我正在尝试编译 ffmpeg 以支持 NVIDIA 硬件加速。但我收到以下错误:
我按照 NVIDIA 开发者论坛上的说明安装了 CUDA。我使用的配置是:
我笔记本电脑上的 GPU 是 NVIDIA Corporation GM108M [GeForce 840M]。
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 库或头文件。有什么解决办法吗?感谢您的建议。