FFmpeg 硬件加速介绍

目录

  1. 参考
  2. 硬件加速简介
  3. FFmpeg 硬件加速各环境支持情况
  4. FFmpeg命令行工具使用硬件加速

1. 参考

  • [1] trac.ffmpeg.org/HWAccelIntro
  • [2] 夏威廉/FFmpeg 硬件加速方案概览 (上)
  • [3] 夏威廉/FFmpeg 硬件加速方案概览 (下)
  • [4] 赵军/FFmpeg 硬件加速方案概览 (上)

2. 硬件加速简介

使用专用硬件(通常集成到GPU)对视频处理进行加速,比如解码、编码或filter等操作[1]。

优点:

  • 比软件处理速度快。
  • 减少CPU的负荷,更省电。
  • 避免数据拷贝。许多硬件解码器能够生成输出到硬件设备(比如显存)的surface,这意味渲染输出之前不需要额外的数据拷贝。在某些情况下,它还可以支持硬件设备的surface输入与编码器一起使用,以避免在转码时候的数据拷贝。

缺点:

  • 硬件编码器生成的输出质量通常比好的软件编码器低得多[1]。
  • 硬件加速方案依赖于各硬件和平台的支持,没有统一的方案。
  • 对于特定处理(比如编解码)硬件加速的支持和更新迭代速度慢。

关于硬件加速的详细介绍参见[2][3]。

3. FFmpeg 硬件加速各环境支持情况

硬件加速API在各系统和硬解环境的支持情况如下[1]。


hw_platform_api_available.PNG

FFmpeg实现的API的情况如下[1]。


ffmpeg_hw_accel.PNG

4. FFmpeg命令行工具使用硬件加速

  • -hwaccel选项启用硬件解码器。
    • 软件解码器会正常启动,如果它检测到一个硬件可解码的流,将尝试将所有重要的处理交给硬件。如果流在硬件中不可解码,那么将自动使用软件解码。
  • -hwaccel_device选项指定特定的硬件设备(比如有多个显卡可用)。
  • -codec:v选项设置特定的编解码器,适用于外部包装的编解码器。
    • 通常将它们命名为codec_api(例如:h264_cuvid),要求事先知道编解码器的名称。
    • 如果不支持不会回退到软件编解码。
  • 硬件filter可以像其他filter一样在filtergraph中使用。
    • 存在硬件filter与软件filter支持的格式不同的情况,需要使用hwuploadhwdownload filter在硬件surface和内存之间拷贝数据。

示例:
1. 使用NVENC进行h264编码:

ffmpeg -s 1280*720 -i input_yuv -c:v h264_nvenc -pixel_format yuv420p -preset default output.mp4

2. NVEDC进行h264解码

ffmpeg -hwaccel nvdec -i input.mp4 output_yuv

你可能感兴趣的:(FFmpeg 硬件加速介绍)