【问题标题】:GPU-accelerated video processing with ffmpeg使用 ffmpeg 进行 GPU 加速的视频处理
【发布时间】:2017-11-14 14:21:49
【问题描述】:

我想使用 ffmpeg 通过 NVIDIA GPU 加速视频编码和解码。

来自NVIDIA's website

NVIDIA GPU 包含一个或多个基于硬件的解码器和编码器(独立于 CUDA 内核),可为多种流行的编解码器提供完全加速的基于硬件的视频解码和编码。卸载解码/编码后,图形引擎和 CPU 可以腾出时间进行其他操作。

我的问题是:我可以使用 CUDA 内核对视频进行编码和解码吗,也许更快?

【问题讨论】:

  • 是的,您可以使用 cuda 内核对视频进行编码和解码,就像使用任何可编程处理器一样。您是否打算自己编写该软件?
  • 谢谢。我想同时转码很多视频,自己写编码/解码太难了。 CUDA Video Decoder API 似乎有帮助,对吗?
  • 当前的 NVIDIA 编码/解码支持仅通过 NVENC 和 NVDEC,它们是与 CUDA 没有直接关系并且与 CUDA 内核分开的硬件子系统。 NVIDIA 不再提供任何支持的库来加速使用 CUDA 的视频编码/解码。因此,您需要自己编写 CUDA 代码,或者找到执行此操作的 3rd 方库。如果您要获取 3rd 方库的链接,那么这个问题对于 SO 来说是题外话。除非你真的想自己做编程工作,否则这个问题对 SO 来说是题外话。
  • @llogan 为什么将旧问题标记为与最近的问题重复??
  • @llogan 你公开声明“这个问题已经被问过并且已经有了答案。如果这些答案不能完全解决你的问题,请提出一个新问题。”。这种说法是不正确的,但它确实创造了 OP 很懒惰并且没有进行适当研究的想法。所以我认为这很重要。如果这个标记只是作为一个更好的答案的链接,那么它的措辞很差。

标签: video ffmpeg nvidia


【解决方案1】:

FFmpeg 提供了一个硬件加速子系统,其中包括 NVIDIA:https://trac.ffmpeg.org/wiki/HWAccelIntro

为了支持使用 NVIDIA GPU 进行 GPU 辅助编码,您需要:

  • A ​supported GPU
  • 您的操作系统支持的驱动程序
  • NVIDIA Codec SDK
  • 使用--enable-nvenc 配置的ffmpeg(如果在配置时检测到驱动程序,则默认设置)

【讨论】:

    【解决方案2】:

    ​supported GPU上快速使用:

    CUDA

    ffmpeg -hwaccel cuda -i input output
    

    CUVID

    ffmpeg -c:v h264_cuvid -i input output
    

    使用 NVDEC 和 NVENC 进行完整的硬件转码:

    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -c:v h264_nvenc -preset slow output
    

    如果编译 ffmpeg 时支持 libnpp,它可用于将基于 GPU 的缩放器插入到链中:

    ffmpeg -hwaccel_device 0 -hwaccel cuda -i input -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv
    

    来源:https://trac.ffmpeg.org/wiki/HWAccelIntro

    【讨论】:

      【解决方案3】:

      正如 Mike 提到的,ffmpeg 封装了其中一些硬件加速。您应该先使用它,而不是先使用更底层的方法(NVIDIA 官方库)!

      table 表明,NVENC 可能是您的候选人。

      但是:要小心并做一些基准测试。虽然 GPU 编码器应该非常快,但与视觉质量相比,它们也比 CPU 编码器差。

      这里要检查的是:当目标是某个给定比特率的某些质量时,GPU 编码器是否与 CPU 编码器竞争?我会说不不不(除了非常高的比特率或非常差的质量),但这取决于您的用例。 GPU 编码不是只提供优势的灵丹妙药。

      【讨论】:

      • 我试过ffmpeg with hw accelerate,就像解码和转码一样,它的运行速度与我笔记本电脑上的软解码(i5-4200U cpu,740M gpu)几乎相同,但cpu负载更少。从video codec sdk 开始,我怀疑它可能只使用 NVENC 和 NVDEC,而不是 cuda 内核。所以我想利用 cuda 核心。
      • 如果有特殊硬件,为什么要使用 Cuda 内核?看...您没有提供有关用例的太多信息,而且您似乎缺少一些基础知识。要么投入更多,更精确(包括分析,ffmpeg 所说的),要么让你的生活更轻松:使用 CPU 和预设超高速或类似的东西用于你的编解码器(我们甚至不知道)。
      • 硬件编码器生成的输出质量通常比 x264 等优质软件编码器低得多,但通常速度更快且不使用太多 CPU 资源。 (也就是说,它们需要更高的比特率才能以相同的感知质量进行输出,或者它们以相同的比特率以较低的感知质量进行输出。)(来自:trac.ffmpeg.org/wiki/HWAccelIntro
      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2015-03-20
      • 2013-09-24
      • 2021-04-20
      • 2013-08-19
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多