FFmpeg 硬件加速介绍

作者: smallest_one | 来源:发表于2019-03-31 20:46 被阅读107次

    目录

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

    1. 参考

    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 硬件加速介绍

        本文链接:https://www.haomeiwen.com/subject/lmsjbqtx.html