Python 3.x 使用GPU将ffmpeg RTSP流传输到RGB24

Python 3.x 使用GPU将ffmpeg RTSP流传输到RGB24,python-3.x,ffmpeg,hardware-acceleration,Python 3.x,Ffmpeg,Hardware Acceleration,我已经成功地将RTSP流输出到RGB24管道,但我注意到,尽管使用了-hwaccel cuvid和-vcodec h264_cuvid,CPU使用率仍然很高(20-45%)(如果没有硬件加速,它可以高达100-300%;基于Linux上的“top”命令) 我目前使用的代码是: ffmpeg .input(*rtsp_add*, rtsp_transport='tcp', fflags='nobuffer', flags='low_delay', hwaccel='cuvid', vcodec='

我已经成功地将RTSP流输出到RGB24管道,但我注意到,尽管使用了
-hwaccel cuvid
-vcodec h264_cuvid
,CPU使用率仍然很高(20-45%)(如果没有硬件加速,它可以高达100-300%;基于Linux上的“top”命令)

我目前使用的代码是:

ffmpeg
.input(*rtsp_add*, rtsp_transport='tcp', fflags='nobuffer', flags='low_delay', hwaccel='cuvid', vcodec='h264_cuvid', vsync=0)
.output('pipe:', format='rawvideo', pix_fmt='rgb24')
.run_async(quiet=False, pipe_stdout=True)
当我使用-vcodec h264\u nvenc时,我发现了一系列错误,因为我认为它与RGB24不兼容。使用命令“ffmpeg-pix_fmts”,我注意到几乎没有任何东西属于“硬件加速格式”。我不介意在YUV420p、YUV444p、RGB24等中工作。。。这是否意味着如果我选择使用硬件编码,我将无法将图像输出到管道中


我更喜欢将输出写入管道,而不是将其写入物理文件并再次读取以操作数据以提高性能。输出到内存中的JPG或PNG的选项也很好。

不确定Python语法,但在命令行中,您必须从GPU下载一个GPU和CPU都支持的pix_fmt中的纹理。如果选择cuvid解码器,则输出格式可能是
cuda
,这是仅适用于GPU的格式。对于nvidia卡,最好的选择似乎是
nv12
格式。在
nv12
中将帧下载到CPU后,您可以将其转换为您喜欢的任何其他格式。实现这一点的命令行部分是
-vf“hwdownload,format=nv12”-pix_fmt rgb24
,作为输出文件之前的选项。不确定Python语法,但在命令行中,您必须以GPU和CPU都支持的pix_fmt从GPU下载纹理。如果选择cuvid解码器,则输出格式可能是
cuda
,这是仅适用于GPU的格式。对于nvidia卡,最好的选择似乎是
nv12
格式。在
nv12
中将帧下载到CPU后,您可以将其转换为您喜欢的任何其他格式。实现这一点的命令行部分是
-vf“hwdownload,format=nv12”-pix_fmt rgb24
,作为输出文件之前的选项。