问题标签 [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.
encoding - NVENC 上的 nvEncLockBitstream 性能低下
我正在尝试使用桌面复制 API 捕获我的桌面,使用 NVENC 对 D3DTexture2D 进行编码并通过本地网络发送它。在我到达需要锁定比特流并提取数据的部分之前,一切的性能都非常高。下面是使用的代码:
“NVENC_API_CALL(m_nvenc.nvEncLockBitstream(m_hEncoder, &lockBitstreamData));” 从桌面低负载下的 10 毫秒到我在高负载下全屏运行游戏时的平均 90 毫秒。我们的约束要求“实时”60fps,所以超过 16ms 的任何东西都太高了。有没有办法让它下来?
ffmpeg - NVEnc Directshow 过滤器 [NVIDIA 视频编码器过滤器]
我可以在 ffmpeg 中成功使用 h264_nvenc 使用 nVidia 录制我的视频源。但我需要暂停/恢复录制。ffmpeg似乎不可能。Suspend ffmpeg 进程暂停视频帧但文件继续。
所以我需要一个支持 h.264 nvenc 的 directshow 过滤器才能在我的应用程序中使用。我需要 .ax 或 .dll directshow 过滤器在 graphedit 中进行测试。我在网上什么都做不了。一些专家可以帮我获得一个directshow过滤器或一些线索吗?
ffmpeg - H264_Nvenc 的最佳设置以最小化延迟?(FFMPEG)
我目前正在使用 Libavcodec 使用 H.264 对视频帧进行编码。因为我在这些视频帧被编码后进行流式传输,所以最大限度地减少延迟对我来说至关重要。我目前的设置是:
这些设置运行良好,但我正在尝试切换到基于硬件的编码以减轻 CPU 的工作负载。我目前有一个 NVIDIA GPU,所以我尝试使用以下设置h264_nvenc
:
问题是,我注意到延迟h264_nvenc
明显大于延迟AV_CODEC_ID_H264
(基于软件的版本)。我认为我的设置或设置h264_nvenc
一定是错误的,因为基于 GPU 的编码应该比基于软件的编码更快。谁能指出我正确的方向?非常感谢!
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 有任何建议吗?谢谢!
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 提供)
但是,如果您在 libx265 中对文件进行编码,则会正确输入属性信息,如下所示。
- 如果您需要更详细的文件信息,请查看此Gist Link
但是,在使用 hevc_nvenc 时,所有信息都丢失了。
-show_streams -show_programs -show_format -show_data -of json -show_frames -show_log 56
我在 ffprobe使用了选项
ffmpeg - ffmpeg - 如何为 h264_nvenc 编码器配置参考参数
我正在尝试用 h264_nvenc NVIDIA 编码器配置和替换 libx264 编码器。我想-x264-params ref=4
用它的并行 nvenc 参数替换参数。我曾经ffmpeg -hide_banner -h encoder=h264_nvenc
看到所有可用的选项,但找不到任何合适的替代品。有什么建议吗?
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 - 还是一样。我使用1060ti
GPU。
请任何人帮助我))
c++ - FFmpeg + cpp,如何获取处理 h264_nvenc 的 GPU 列表?
我正在编写要在具有多个 GPU 的 PC 上使用的应用程序,我正在尝试获取可以在 h264 中解码流的 GPU 索引列表,以在所有可用 GPU 之间平均分配所有新视频源。
我已经找到了如何在命令提示符下执行此操作,但我需要在 C++ 中编写属于它的行
我需要它动态地将它传递给 av_hwdevice_ctx_create(AVBufferRef**,char *int)
有谁知道如何做到这一点?
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,我不确定两者是否相同
这是我的格式说明:
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(可能更强大),我想充分利用它