问题标签 [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 投票
1 回答
703 浏览

opencv - 如何让 FFMPEG 从 OpenCV 获取帧并将它们流式传输到 HTTP 服务器

有一台相机以每秒 20 帧的速度拍摄。每帧为 4000x3000 像素。这些帧被发送到包含 openCV 的软件。OpenCV 将帧大小调整为 1920x1080,然后必须将它们发送到 FFMPEG 以使用 Nvidia Nvenc 编码为 H264 或 H265。编码后的视频随后通过 HTTP 传输到最多 10 台设备。

基础设施非常好(10 GB 局域网),配备最先进的切换器、路由器等......

现在,从 Nvme SSD 编码图像时,我可以获得 90 FPS。这意味着达到了所需的编码速度。

问题是如何将图像从 OpenCV 获取到 FFMPEG ?将在使用 MERN 堆栈制作的 webapp 上观看流(假设这是相关的)。

0 投票
1 回答
909 浏览

ffmpeg - 如何学习 h264_nvenc 编码器的有效质量?

我试图确定 h264_nvenc 视频编码器的各种 cq(“恒定质量”)值的最终产品质量。

要通过 ffmpeg 并以目标质量使用 h264_nvenc 编码器,我按照Nvidia 文档中的说明,链接锚的最后一段。

我指定了可变比特率控制模式 (rc=vbr_hq) 和目标质量 (cq=<some int>)。这应该足以测试 cq 的各种值。故事应该到此结束。

但是,对于任何 cq 值,它只会输出相同质量的超大尺寸视频。(使用 cq=1、cq=20 和 cq=51 都输出具有相同哈希的文件。)

根据文档,我还可以指定一个 maxBitRate (maxrate=<some size>)。如果我没有指定 maxrate,文档会指出:

如果未指定 maxBitRate,编码器将根据需要使用尽可能多的位来达到目标​​质量。

但这不是我观察到的行为。我看到编码器使用尽可能多的位,而不是需要的位。生成的视频的总比特率约为 100Mb/s。将源视频加倍。

如果我确实设置了最大速率,编码器会观察到它。但是,如果我必须为每个 cq 值正确设置比特率,那么 cq 值的意义何在?我只需设置 cq=1 并测试各种比特率,这将仅适用于特定视频。

是否有一些警告或输出表明比特率不足以达到我没有看到的目标质量?这至少可以让我暴力破解。

还是我误解了这些设置之间的关系?

0 投票
0 回答
115 浏览

ffmpeg - 使用 NVENC 的 ffmpeg 强调级别图

我正在尝试对视频中的不同区域设置不同的压缩级别。ffmpeg 有一个叫做“addroi”的东西,但这只是一个建议,并不能保证绝对的压缩水平。Nvidia NVENC 有一个叫做 Emphasis Level Map 的东西,我希望它能够实现每个区域的准确压缩级别。

我无法通过 ffmpeg 可执行文件找到如何执行此操作,因此我开始尝试使用 ffmpeg SDK 执行此操作。您知道如何通过 ffmpeg.exe 而不是使用 SDK 来执行此操作吗?

这是我在 NVIDIA 文档中所说的内容:

https://docs.nvidia.com/video-technologies/video-codec-sdk/nvenc-video-encoder-api-prog-guide/index.html#emphasis-map

0 投票
1 回答
546 浏览

ffmpeg - FFMPEG 拒绝通过 h264_nvenc 重新编码 vp9

使用 Windows,FFMPEG 在将 vp9/opus .webm 视频重新编码为 h264_nvenc/aac 时会引发错误。

问题在于尝试通过 h264_nvenc 重新编码,因为使用 libx264 工作得很好。

h264_nvenc 在重新编码 h264 时工作得很好。

0 投票
1 回答
590 浏览

video - 在没有 hwdownload 的情况下将 ffpmeg OpenCL 过滤器输出传递给 NVenc?

我正在尝试使用 ffmpeg 对 UHD HDR 视频流进行色调映射(和调整大小)。以下命令:

似乎工作(在 RTX 3080 上大约 200 FPS)。但是,我注意到它仍然使用一个 CPU 内核,而 GPU 使用率仅报告为 60-70%。当我只调整大小而不使用任何过滤器时,我得到大约 400FPS 和 100% GPU 使用率。

我怀疑最后的hwdownload,format=nv12,hwupload_cuda语句有问题,因为这增加了主内存的绕道。我尝试只使用hwupload_cuda而不使用hwdownload(如此处建议:https ://stackoverflow.com/a/55747785/929037在此答案末尾附近的过滤器示例中),但随后出现以下错误:

尝试使用hwmap导致

是否有可能避免这种额外的hwdownload

0 投票
2 回答
780 浏览

windows - gstreamer webrtc h264在浏览器中播放几帧后停止

我需要帮助来调试概率问题。我构建了一个 gstreamer 管道,将 NVENC 编码的 h264 比特流(仅限视频)流式传输到浏览器。浏览器很少正常播放。在大多数情况下,只有几帧被渲染然后图片被冻结。

NVENC 设置遵循“https://cloud.google.com/solutions/gpu-accelerated-streaming-using-webrtc”,它们是 h264 高配置和低延迟高质量和 NVENC_INFINITE_GOPLENGTH(一些设置已尝试,如 rateControlMode/enableVFR /sliceMode/repeatSPSPPS/outputAUD 但没有帮助)。在运行时,NVENC 将实时渲染的 opengl fbo 纹理编码为 h264 比特流,并通过 appsrc 将它们推送到 gstreamer。目前纹理大小为 512x512 并以 10/20/30 fps 的速度输入。

我使用gstreamer 1.18.2,管道定义为“appsrc name=nvenc_src do-timestamp=1!video/x-h264,stream-format=byte-stream,alignment=au!rtph264pay aggregate-mode=zero-latency!队列!应用程序/x-rtp,媒体=视频,编码名称=H264,有效负载=123!webrtcbin bundle-policy=max-compat name=backend_webrtc”。

gstreamer 部分代码遵循 sendrecv 示例(用 websocketpp 替换 libsoup 并删除 recv 逻辑)。

该应用程序构建为 MSVC 2019 32 位。浏览器解码器是 NVDEC。exe应用程序和js代码在同一台PC上运行(windwos 10,gtx1060,驱动版本460.89)。我在 Chrome(87.0.4280.88) 和 edge(87.0.664.66) 中尝试过。我还尝试在 android(chrome) 和 ios(safari) 中运行 js 代码并获得相同的结果。

可以得出结论,NVENC 生成了“正确的”h264 比特流。我将原始 h264 比特流转储到文件中。该文件在 VLC 中正常播放。我还尝试将转储的 h264 比特流推入 gstreamer。冻结的问题仍然存在。

图片冻结后,播放永远不会恢复。浏览器的“webrtc-internals”显示 bytes/headerBytes/packests_Received 保持增长,而 frameReceived/framesDecoded/framesDropped 保持不变。

由于按位相同的 h264 帧在不同的运行中表现不同,我猜 rtp 时间戳可能会导致问题。我尝试将appsrc 的do-timestamp 设置为0 并手动设置gstbuffer 的PTS,但它没有帮助。

0 投票
1 回答
300 浏览

javascript - 使用 WebRTC 的 GPU 加速流未连接 [ConnectionRefusedError: [Errno 111] Connection denied]

我正在尝试使用NVENC编码并获取该输出,使用 WebRTC 将其流式传输到另一台服务器,然后在那里对其进行解码。

我尝试使用 WebRTC 项目来关注这个 GPU 加速的流式传输

我想在不使用此处给出的Google Cloud上的 Kubernetes Engine 的情况下在本地运行它,但是 Docker 给我带来了很多麻烦。

这是在 selkies-vdi-cgc-docs\selkies-vdi-cgc-docs\images\gst-webrtc-app\ 中运行命令 python3 main.py 时引发的错误:

python3 main.py main.py:187: DeprecationWarning: 'warn' 功能已弃用,使用'warning' 代替 logging.warn(args) WARNING:root:Namespace(app_auto_init='true', app_ready_file='/var/run /appconfig/appready',coturn_auth_header_name='x-auth-user',coturn_web_uri='http://localhost:8081',coturn_web_username='DESKTOP-OAR3JEG',debug=False,enable_audio='true',enable_clipboard='true ', framerate='30', json_config='/var/run/appconfig/streaming_args.json', metrics_port='8000', server='ws://127.0.0.1:8080', uinput_js_socket='', uinput_mouse_socket= '') Traceback(最近一次调用最后):文件“main.py”,第 223 行,在 stun_server,turn_server = fetch_coturn(文件“main.py”,第 56 行,在 fetch_coturn conn.request("GET", parsed_uri.path, headers=auth_headers) 文件 "/usr/lib/python3.8/http/client.py", 第 1255 行,在请求中 self._send_request(method, url, body, headers, encode_chunked ) 文件“/usr/lib/python3.8/http/client.py”,第 1301 行,在 _send_request self.endheaders(body, encode_chunked=encode_chunked) 文件“/usr/lib/python3.8/http/client.py ",第 1250 行,在 endheaders 中 self._send_output(message_body,encode_chunked=encode_chunked) 文件 "/usr/lib/python3.8/http/client.py",第 1010 行,在 _send_output self.send(msg) 文件中 "/usr /lib/python3.8/http/client.py”,第 950 行,在发送 self.connect() 文件中“/usr/lib/python3.8/http/client.py”,第 921 行,在连接 self.sock = self._create_connection(文件“/usr/lib/python3.8/socket.py”,第 808 行,在 create_connection raise err File "/usr/lib/python3.8/socket.py", line 796, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection denied

这是针对屏幕捕获项目的,因此它必须是实时的,并且延迟尽可能低。所以任何帮助我开始这件事都会很棒!

我什至不确定我运行的是正确的 python 脚本。

如果我遗漏了什么,请原谅。

谢谢!

0 投票
1 回答
566 浏览

ffmpeg - 如何设置H264 NVENC编码参数输出高质量视频流?

  • 我用NVENC(nvEncodeAPI)接口硬件编码H264,然后RTMP流出来,用ffplay拉流看的时候发现画面明显失真:绿线变锐利了?文字颜色变浅和模糊,即使我将视频比特率提高到 3Mbps(720P)也没有改善。我也知道H264编码是有损的,会丢弃一些信息。
  • 然后我尝试调整 NV_ENC_CONFIG_H264_VUI_PARAMETERS 参数:将颜色空间设置为“pc,bt709”时,有一些小的改进。也许色彩空间设置有更大的改进潜力?对于NVENC编码,有没有更高的视频清晰度设置方案?不知道这里有多大的技术提升空间? 在此处输入图像描述 基于代码:https ://github.com/obsproject/obs-studio/blob/master/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
0 投票
1 回答
237 浏览

hevc - Rigaya 的 NVEnc 对没有视频或音轨的文件进行编码

我的源视频文件(1 小时 30 分钟的电影)可以在 PotPlayer 和 VLC 中播放:h264、8 位颜色和 7755kb/s 比特率。

我正在使用的 NVEnc 命令是这样的:

编码工作正常(我相信):

但是当我尝试在 PotPlayer 或 VLC 中播放它时,它说没有视频轨道,或者根本不播放。MediaInfo 也不显示任何视频、音频或字幕轨道,只显示文件名和文件大小。我错过了什么吗?

0 投票
1 回答
1482 浏览

video - 如何使用带有 Nvidia Acceleration (Nvenc) 的 FFMPEG 对字幕进行硬编码/刻录

所以我正在尝试使用 Nvenc 来加速视频编码。目的是有 1 个输入视频文件和 1 个输入字幕,并获得不同分辨率的多个输出,字幕硬编码或刻录到视频中。我尝试了多种方法,但不知道该怎么做。

这是我目前正在使用的命令:

这是输出:

编辑:取得了一些进展。我现在不再收到错误,但在查看输出时,没有刻录字幕。命令: