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

ffmpeg - FFMPEG 视频从图像到 nvidia GPU 中的 mp4

我正在尝试使用 1070ti nvidia cuda 电源对从 .jpg 图像创建的 h264 .mp4 视频进行编码,并在每个图像之间进行交叉淡入淡出过渡。我可以使用标志 -c:v h264_nvenc 在 GPU 中渲染视频,我在 GPU 编码中看到了一个短暂的峰值,但是随着计算机 CPU 的长时间高负载,我想准备过渡图像。但是由于 -filter_complex,它发生在 cpu/ram 上的图像准备非常慢。这有效:

我正在尝试在 GPU 中完成所有工作,理论上我可以使用每个 -i 中的标志“-hwaccel cuvid -c:v mjpeg_cuvid”对 GPU 内存中的所有图像进行编码我收到以下错误:

有没有办法在应用了“淡入淡出”标志的情况下在 GPU 中加载图像?

提前致谢 !

0 投票
1 回答
3022 浏览

ffmpeg - 使用 NVENC 的 FFmpeg GPU 10 位 HEVC 编码

我正在使用 NVENC HEVC 编码器对一些 4K 10 位 YUV 测试序列进行编码。对于示例序列和配置,我使用以下命令。

我的目标是实现尽可能低的延迟;因此我将预设设置为低延迟高性能。但是,使用此命令我只能获得大约 15 fps 的编码速度。来自上述命令的 ffmpeg 输出的日志文件位于此处

我还尝试了不同的预设和不同的序列。我编码的所有 10 位序列的结果都相似。对于 1920x1080 10 位序列,我使用 HEVC 编码器获得大约 50-60 fps。但是对于 8 位序列,我在具有类似预设和速率控制模式的情况下获得了大约 450-500 fps 的更高吞吐量。在示例中,我使用 CBR 作为速率控制模式,但我也在 VBR 和恒定 QP 模式下测试并获得了类似的结果(在编码吞吐量方面)。

我的 10 位 HEVC 编码命令中是否缺少任何内容?我知道对于 10 位,由于位深度的增加,编码需要更长的时间。但是这种规模的吞吐量减少让我觉得我做错了什么。似乎 FFmpeg 在从 yuv420p10le(我的输入格式)转换为 p010le(NVENC 接受的 10 位格式)的编码器之前插入了一个 auto_scaler。这个缩放模块能否如此大幅度地降低编码器速度?

0 投票
1 回答
930 浏览

python - 每个 GPU 的 Nvenc 会话限制

我正在使用 Imageio,这是一个包装 ffmpeg 的 python 库,通过 nvenc 进行硬件编码。我的问题是我无法启动超过 2 个会话(我使用的是非 Quadro GPU)。即使使用多个 GPU。我查看了 NVIDIA 的支持矩阵,他们说每个 gpu 只有 2 个会话,但似乎是每个系统。

例如,我在一个系统中有 2 个 GPU。我可以使用环境变量 CUDA_VISIBLE_DEVICES 或设置 ffmpeg 标志 -gpu 来选择 GPU。我已经使用 Nvidia-smi cli 验证了 gpu 的使用情况。我可以在单个 gpu 上进行 2 个编码会话。或者 1 个会话分别在 2 个单独的 gpus 上工作。但我无法让 2 个编码会话在 2 个 gpus 上工作。

更奇怪的是,如果我添加更多 gpus,我仍然停留在 2 个会话中。我无法在第三个 gpu 上启动第三个编码会话。无论 gpus 的数量如何,我总是停留在 2。有想法该怎么解决这个吗?

0 投票
1 回答
1066 浏览

c++ - 使用 GStreamer 和 NVENC 编码 OpenGL 纹理?

我有一个将数据渲染成 rgba 纹理的 openGL 应用程序。我想使用 gstreamer 框架(使用 nvenc 插件进行 h264 编码)对其进行编码和流式传输。

我正在查看文档以解决这些问题:

  1. 如何将应用程序的现有 openGL 上下文导出到 nvenc 元素。
  2. 如何将纹理 ID 传递给来源?
  3. 同步将如何工作。即 nvenc 必须等待渲染完成,类似地,应用程序必须等待 nvenc 完成从纹理中读取。我假设它会涉及使用同步围栏或 glMemoryBarriers。

任何示例代码都会非常有帮助。

我确实想避免将任何纹理复制到 cpu 内存。Nvidia 的 NVENC sdk 提到它使用 CUDA 上下文进行调用,并且可以使用 cudaGraphicsGLRegisterImage 调用将 openGL 纹理导入到 CUDA 上下文中。所以我的期望是从应用程序到视频编码帧可以在没有任何副本的情况下完成。

0 投票
1 回答
50 浏览

ffmpeg - 某些三星机型不支持 ffmpeg 1080p50 50fps,导致错误

所以我使用 FFMPEG 使用 nvenc gpu 加速进行实时转码。我最近做了一些小的改进,将帧速率提高到 1080p50 而不是 1080p25。

我注意到这会在某些三星型号上引起“错误”消息。我想知道这是否是由于我的代码,我们可以提高兼容性还是电视无法播放 1080p50,我认为这真的很奇怪。

这是我使用的命令:

像 80% 的机型一样,samsung/lg/sony 可以播放,但有少量三星电视会出现流错误。我有一种感觉,这只是电视/应用程序无法播放的高帧率导致“流错误”。因为在更旧的 lg 模型上,流播放也很完美。它似乎不是一种格式或什么的......

0 投票
2 回答
6474 浏览

ffmpeg - FFMPEG NVENC HEVC 转 H264

我尝试将 HEVC 4k 广播转码为 1080p H264。HEVC 4K 到 HEVC 1080p 可以工作,但是当我尝试将 hevc 到 h264 时,我得到“没有找到支持 NVENC 的设备”

现在我想知道是否不可能将 HEVC 完全硬件转码为 H264?

使用的代码:

当我运行代码时:

[h264_nvenc @ 0x3bf42c0] 提供的设备不支持所需的 NVENC 功能 初始化输出流时出错 0:0 - 打开输出流 #0:0 的编码器时出错 - 可能参数不正确,例如 bit_rate、rate、width 或 height 转换失败!

不能将 HEVC 转换回 H264 吗?

日志:

0 投票
1 回答
1003 浏览

ffmpeg - ffmpeg缩放nvenc保持纵横比

我想将 mkv 文件完全硬件转码为 mp4 并放大/缩小保持纵横比的内容。

使用基于 CPU 的转码,您只需添加:

使用硬件(CUDA)-resize在解码端或-scale_npp编码端进行转码是可能的,但两者似乎都不能强制原始的宽高比。

例如,我想将 1920x800 文件升级到 1920x1080,同时用黑条填充其余文件,这样我就可以在黑条上覆盖字幕......

有了这个,我可以使用 GPU 功率而不是使用 cpu 来完全转码。有任何想法吗?

0 投票
0 回答
156 浏览

android - 将实时视频流从 PC 发送到本地 iOS 或 Android 应用程序的最简单方法是什么,并且延迟非常低

我正在尝试将实时视频源从 PC 发送到本机 Android 或 iOS 应用程序。连接将通过 wifi 进行。作为回报,应用程序会将其 SLAM AR 跟踪发送回 PC。PC 将更新其相机位置并发送新视频。本质上,它是通过 wifi 为 PC 上的平板电脑渲染 AR。

PC 客户端正在通过 WebRTC 运行带有像素流的 Unreal。这在浏览器中已经很好用了。但平板电脑必须始终运行 ARKit 或 ARCore,这在浏览器中不起作用。在 ARKit 或 ARCore 应用程序中嵌入浏览器不起作用,因为应用程序内的浏览器不完全支持 WebRTC。

所以它必须是支持 WebRTC 的原生视频播放器。以及一种将 WebRTC 流从 Unreal 发送到本机应用程序的方法。

那么从 PC 发送 h264 WebRTC 流的好方法是什么?我将如何在 iOS 或 Android 中构建一个可以接收 WebRTC 流的视频播放器?

0 投票
0 回答
164 浏览

android - NVEnc 编码和 MediaCodec 解码产生损坏的帧

我正在使用 Desktop Duplication API 捕获帧

预处理它们(RGB 到 NV12)

然后使用为 HEVC 提供的默认 NVEnc 对它们进行编码

直到这里一切正常,将输出保存到文件中表明一切正常。通过网络将它们发送到 Android 是另一回事。在我使用 MediaCodec 的 Android 上,我从解码器获取第一帧并将其用作 csd-0 以使用正确的配置文件配置异步解码器。在我的回调中,我有这个:

数据由 onReceiveMessage(byte[]) 设置。我得到的结果是彼此不匹配的框架,结果只是一团糟(见下面的截图)。它起作用的唯一方法是如果我强制 NVEnc 只发送 IDR 帧,这对网络来说很重。关于我做错了什么的任何想法?亡灵森林之书截图

0 投票
2 回答
2114 浏览

ffmpeg - 如何使用较旧的 NVEnc 编译 FFMpeg?

使用 NVEnc 运行 FFMpeg 时出现此错误。

我无法将驱动程序升级到最新版本,因为我受到 GKE 支持的限制。