问题标签 [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 回答
226 浏览

encoding - NVENC 上的 nvEncLockBitstream 性能低下

我正在尝试使用桌面复制 API 捕获我的桌面,使用 NVENC 对 D3DTexture2D 进行编码并通过本地网络发送它。在我到达需要锁定比特流并提取数据的部分之前,一切的性能都非常高。下面是使用的代码:

“NVENC_API_CALL(m_nvenc.nvEncLockBitstream(m_hEncoder, &lockBitstreamData));” 从桌面低负载下的 10 毫秒到我在高负载下全屏运行游戏时的平均 90 毫秒。我们的约束要求“实时”60fps,所以超过 16ms 的任何东西都太高了。有没有办法让它下来?

0 投票
1 回答
357 浏览

ffmpeg - NVEnc Directshow 过滤器 [NVIDIA 视频编码器过滤器]

我可以在 ffmpeg 中成功使用 h264_nvenc 使用 nVidia 录制我的视频源。但我需要暂停/恢复录制。ffmpeg似乎不可能。Suspend ffmpeg 进程暂停视频帧但文件继续。

所以我需要一个支持 h.264 nvenc 的 directshow 过滤器才能在我的应用程序中使用。我需要 .ax 或 .dll directshow 过滤器在 graphedit 中进行测试。我在网上什么都做不了。一些专家可以帮我获得一个directshow过滤器或一些线索吗?

0 投票
0 回答
1882 浏览

ffmpeg - H264_Nvenc 的最佳设置以最小化延迟?(FFMPEG)

我目前正在使用 Libavcodec 使用 H.264 对视频帧进行编码。因为我在这些视频帧被编码后进行流式传输,所以最大限度地减少延迟对我来说至关重要。我目前的设置是:

这些设置运行良好,但我正在尝试切换到基于硬件的编码以减轻 CPU 的工作负载。我目前有一个 NVIDIA GPU,所以我尝试使用以下设置h264_nvenc

问题是,我注意到延迟h264_nvenc明显大于延迟AV_CODEC_ID_H264(基于软件的版本)。我认为我的设置或设置h264_nvenc一定是错误的,因为基于 GPU 的编码应该比基于软件的编码更快。谁能指出我正确的方向?非常感谢!

0 投票
2 回答
912 浏览

ffmpeg - 如何在软件中解码像素格式 AV_PIX_FMT_CUDA 的 AVFrame?

我最近按照这个示例(https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/vaapi_encode.c)使用 NVENC 对 AVFrame 进行编码(通过将 AV_PIX_FMT_VAAPI 与 AV_PIX_FMT_CUDA 和 h264_vaapi 与 h264_nvence 等事物)。我现在正在尝试解码我​​编码的数据包并将其转换为 AV_PIX_FMT_YUV420P,如下所示:

我无法将 AV_PIX_FMT_CUDA 传入sws_ctx,因为它不受支持。我在网上找到的大多数示例都说要遵循这个 libav 示例(https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c)。这里的问题是我的解码计算机上没有 NVIDIA GPU,所以我不能像他们在这个例子中那样创建硬件设备。有人对如何将使用“h264_nvenc”编码为数据包的 AVFrame 转换为格式为 YUV420P 的 AVFrame 有任何建议吗?谢谢!

0 投票
0 回答
1344 浏览

encoding - 使用“ffmpeg hevc_nvenc”创建的文件无法在电视上播放。(使用 nvidia 的视频编解码器 SDK 9.1)

问题

  • 使用 hevc_nvenc 创建的文件不能在电视上播放。(三星智能电视,型号未知)与我的 ffmpeg 构建相关的内容如下。

FFmpeg 构建配置


ffmpeg 命令

  • 关于 FFmpeg 编码的命令

关于此命令的完整日志 -检查此完整日志

在命令中添加“-color_~”的原因如下。

  • 使用 nvidia 硬件加速器创建 bt2020 + smpte2084 视频后的 HDR 视频。(我正在学习制作HDR视频。我不确定这是否正确。)

如何使用 ffmpeg hevc_nvenc 制作视频并在电视上播放?


我做过的事情

这是我研究过的为什么它不起作用。- 标题信息未正确包含在生成的视频文件中。所以我用了一个叫nvhsp的程序在视频里面添加SEI和VUI信息。有关使用的命令和日志,请参见下文。

nvhsp是用于在原始视频中编写 VUI 和 SEI 位串的开源软件。nvhsp 链接

目标

  • 我想在通过 hevc_nvenc 编码视频时正常生成元数据。

  • 我想通过 hevc_nvenc 创建视频并在支持 10 位色深的智能电视上播放 HDR 视频。


额外的

  • ffmpeg hevc_nvenc 在生成的视频文件中不生成元数据是否正常?或者它是一个错误?

  • 请参考下图。(*'알 수 없음' 意思是“未知”)

    • 如果您需要更详细的文件信息,请查看此Gist 链接 (由 ffprobe 提供) hevc_nvenc 元数据
  • 但是,如果您在 libx265 中对文件进行编码,则会正确输入属性信息,如下所示。

    • 如果您需要更详细的文件信息,请查看此Gist Link libx265 元数据

但是,在使用 hevc_nvenc 时,所有信息都丢失了。

  • -show_streams -show_programs -show_format -show_data -of json -show_frames -show_log 56我在 ffprobe使用了选项
0 投票
1 回答
562 浏览

ffmpeg - ffmpeg - 如何为 h264_nvenc 编码器配置参考参数

我正在尝试用 h264_nvenc NVIDIA 编码器配置和替换 libx264 编码器。我想-x264-params ref=4用它的并行 nvenc 参数替换参数。我曾经ffmpeg -hide_banner -h encoder=h264_nvenc看到所有可用的选项,但找不到任何合适的替代品。有什么建议吗?

0 投票
1 回答
281 浏览

nvidia - NVENC ME-only 模式 OpenEncodeSessionEx() 失败并出现“invalid struct version”错误

我遇到了一个奇怪的行为,试图在 ME 模式下初始化 NVENC。OpenEncodeSessionEx()总是以 #15 失败 -"This indicates that an invalid struct version was used by the client."

参数结构如下:

我试图从不同的 C 和 Golang 环境中调用它,但无论我做什么,我都会得到那个错误。NVENC 样本的编码器刚刚崩溃(段错误)。解码器可以完美运行,而编码器则不能。

有谁知道,什么确切的条件可能会导致错误 #15 - NV_ENC_ERR_INVALID_VERSION

我使用 440.82 驱动程序将 Cuda 升级到 10.2 - 不走运。试图降级到 Cuda 10.0 - 还是一样。我使用1060tiGPU。

请任何人帮助我))

0 投票
1 回答
716 浏览

c++ - FFmpeg + cpp,如何获取处理 h264_nvenc 的 GPU 列表?

我正在编写要在具有多个 GPU 的 PC 上使用的应用程序,我正在尝试获取可以在 h264 中解码流的 GPU 索引列表,以在所有可用 GPU 之间平均分配所有新视频源。

我已经找到了如何在命令提示符下执行此操作,但我需要在 C++ 中编写属于它的行

我需要它动态地将它传递给 av_hwdevice_ctx_create(AVBufferRef**,char *int)

有谁知道如何做到这一点?

0 投票
1 回答
961 浏览

ios - 使用 VideoToolbox API (kVTVideoDecoderBadDataErr) 解码 H264 流

我的目标是使用 nvenc 对我的 Windows 机器的主帧缓冲区进行编码,并使用 VideoToolbox API 将其内容流式传输到我的 iPad

我用来编码 h264 流的代码基本上是https://github.com/NVIDIA/video-sdk-samples/tree/master/nvEncDXGIOutputDuplicationSample的复制/粘贴,唯一的变化是我没有写入文件,而是发送数据

对于解码,我使用https://github.com/zerdzhong/SwfitH264Demo/blob/master/SwiftH264/ViewController.swift#L71

当我将所有内容写入文件时,编码工作完美,我可以毫无问题地使用 h264->mp4 在线转换器,问题是解码器在函数 decompressionSessionDecodeFrameCallback 中给我错误 kVTVideoDecoderBadDataErr

所以对于我尝试过的:

  • 首先使用 h264 分析器,我发现帧顺序是:7/8/5/5/5/5/1 ...
  • 我发现 nvenc 确实只在一个数据包中编码帧 7/8/5/5/5/5
  • 我确实尝试使用序列(0x00 0x00 0x00 0x01)将此数据包分成多个,它分别给了我7/8/5帧
  • 如您所见,我只得到了一个 5 帧,大约 100KB,H264 分析器说有四个 5 帧(大概是 40KB、20KB、30KB、10KB)
  • 使用十六进制文件查看器,我看到分隔这 5 个帧的序列是 (0x00 0x00 0x01),尝试也将它们分开,但解压缩时出现完全相同的 VideoToolbox 错误

这是我用来分离和发送帧的代码:协议只是 PACKET_SIZE->PACKET_DATA 快速代码能够读取 NALU 类型,所以我相信这不是问题

可能与纹理格式有关,VideoToolbox 提到了 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,NVENC 代码提到了 YUV420 和 NV12,我不确定两者是否相同

这是我的格式说明:

0 投票
2 回答
5129 浏览

encoding - 编码时如何让FFMPEG使用更多GPU

所以情况如下

我每秒接收 20/30 的未压缩图像。格式是 PNG 或位图。每张照片的大小在 40 到 50 mb 之间(自未压缩以来都具有相同的大小)。

我想将它们编码为 265 无损视频并使用 FFMPEG 将它们流式传输到 http 服务器。输出视频是 1920x1080,所以有一些下采样。允许压缩,但除了下采样外,不允许丢失任何内容。

现在我仍处于测试阶段。我有一个 500 个样本图像。我试图尽可能有效地对它们进行编码。我正在使用以下命令:

ffmpeg -hwaccel cuvid -f image2 -i "0(%01d).png" -framerate 30 -pix_fmt p010le -c:v hevc_nvenc -preset lossless -rc vbr_hq -b:v 6M -maxrate:v 10M -vf scale=1920 :1080 -c:a aac -b:a 240k 结果.mp4

我有一个强大的现代 quadro GPU 和一个 6 核英特尔 CPU 和一个 Nvme 硬盘。

编码时GPU的使用率正好是10%,CPU大约是30-40%

如何将 GPU 使用率提高到 80%?我要运行代码的机器将至少有一个 quadro 4000(可能更强大),我想充分利用它