FFmpeg 解码视频到无损帧硬件加速 CUDA

问题描述

我有 1 秒 30 fps 的 H.265 编码视频进入服务器进行处理。服务器需要将视频解码为单独的帧(无损)。这些视频的发布速度非常快,因此性能至关重要。服务器有一个 H.265 兼容的 Nvidia GPU,我已经构建了 ffmpeg 支持 CUDA。以下是 ffmpeg 的配置输出:

ffmpeg version N-100479-gd67c6c7f6f Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Ubuntu 8.4.0-3ubuntu2)
  configuration: --enable-nonfree --enable-cuda-nvcc --enable-nvenc --enable-opencl --enable-shared
                 --enable-pthreads --enable-version3 --enable-avresample --enable-ffplay --enable-gnutls
                 --enable-gpl --disable-libaom --disable-libbluray --disable-libdav1d 
                 --disable-libmp3lame --enable-libopus --disable-librav1e --enable-librubberband
                 --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora
                 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264
                 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig
                 --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb
                 --enable-libopencore-amrwb --disable-libopenjpeg --enable-librtmp --enable-libspeex
                 --enable-libsoxr --disable-videotoolbox --disable-libjack --disable-indev=jack
                 --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64

我将视频解码为 PNG,并使用以下命令:

ffmpeg -y -vsync 0 -hwaccel cuvid -hwaccel_output_format cuda -hwaccel_device 0 -c:v hevc_cuvid \
       -i 0.mp4 -vf hwdownload,format=nv12 -q:v 1 -qmin 1 -qmax 1 -start_number 0 f%d.png

此命令成功利用硬件加速进行 H.265 解码。但是,PNG 编码是由 CPU 完成的。

CUDA 是否支持无损图像编码?格式不需要是 PNG,但它确实需要是无损的。 CUDA 有 nvJPEG Library,但 JPEG 是有损格式。 CUDA 中是否有类似的无损格式图像编码库(也与 ffmpeg 集成)?

编辑:一些更多的背景......

我目前正在使用 PNG,因为它们具有压缩能力。顺便说一句,这些图像的大小为 2560x1280。一方面,正是这种压缩消耗了 CPU 周期。另一方面,我还受到将这些帧上传到上游消费者的速度(以及聚合数据量)的吞吐量的限制。所以这基本上是一种权衡:

  1. 我们希望尽快提取这些帧。
  2. 我们希望能提高图像大小的效率。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...