如何解决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 周期。另一方面,我还受到将这些帧上传到上游消费者的速度(以及聚合数据量)的吞吐量的限制。所以这基本上是一种权衡:
- 我们希望尽快提取这些帧。
- 我们希望能提高图像大小的效率。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。