FFMPEG关于硬件加速的研究

1.研究目标

<1>ffmpeg如何支持硬件(GPU)加速; <2>ffmpeg硬件加速性能如何; <3>是用什么命令; 

2.平台信息

2.1.查看当前显卡信息

命令:
lspci |grep VGA
信息:
01:00.0 VGA compatible controller: NVIDIA Corporation GK106 [GeForce GTX 645 OEM] (rev a1)

解析:
GK106,是一个由英伟达公司制造的适配器图形处理和加速核心芯片。(BOARD:Quadro K4000,FAMILY:Kepler)

从NVIDIA支持的矩阵表中查找出GK106支持格式分别为:
NVDEC解码:MPEG-2 VC-1 H.264(AVCHD)
NVENC编码:H.264 (AVCHD) YUV 4:2:0

3.NVIDIA

3.1.NVIDIA参考资料

NVIDIA VIDEO CODEC SDK
NVIDIA支持的矩阵表
NVIDIA Linux的显示驱动
CUDA工具集
ffmpeg中应用nvidia介绍
ffmpeg应用nvidia

3.2.NVIDIA性能参数

从NVIDIA的video encode performance中查找到Quadro K4000:支持同时编码16路1920 X 1080 H.264 (AVCHD) YUV 4:2:0,支持高性能和高质量,以及低延时模式;

注意:目前所有的NVIDIA都不支持 4:2:2编码
支持的编码格式总集:
H.264 (AVCHD) YUV 4:2:0
H.264 (AVCHD) YUV 4:4:4
H.264 (AVCHD) Lossless
H.265 (HEVC) YUV 4:2:0
H.265 (HEVC) YUV 4:4:4
H.265 (HEVC) Lossless
H.265 (HEVC) 8k

支持的解码格式总集:
MPEG-2 VC-1
H.264(AVCHD)
H.265(HEVC)
VP8
VP9

3.3.NVIDIA显卡驱动

这里写图片描述
如果使用从nvidia官网下载的驱动安装失败,可能出现进入不了桌面的问题,解决办法:
apt install nvidia-340

4.ffmpeg

4.1.ffmpeg对NVIDIA GPU的支持

  • 支持h.264和hevc硬件加速编码; 支持h.264, hevc, VP9, VP8, MPEG2和MPEG4的硬件加速解码;
  • 可设置跟视频编码质量相关的参数,如:preset, rate等;
  • 可使用FFmpeg中的filters进行端对端1:n编码或1:n转码视频硬件加速通道;
  • 能添加自己编写的高性能CUDA filters;
  • 同时支持Windows和Linux support;

此外, NVIDIA 也为GPU的视频处理任务提供的插件功能.
GPU Resize:将一个输入转换为多个分辨率并行输出;
GPU Zero-copy:使能GPU-accelerated插件就可以避免在处理视频时,系统和GPU内存间的数据拷贝;

4.2.ffmpeg对NVIDIA GPU的支持步骤

  • 下载FFmpeg源码 (https://git.FFmpeg.org/FFmpeg.git) 下载NVIDIA的最新Video Codec SDK 将NVIDIA的头文件复制到ffmpeg的编译环境中;
  • 下载安装NVIDIA驱动(apt install nvidia-340)
  • 添加如下的configure命令(nv_sdk应包含cuda的库和头文件) :./configure
    –enable-nonfree
    –disable-shared
    –enable-nvenc
    –enable-cuda
    –enable-cuvid
    –enable-libnpp
    –extra-cflags=-Ilocal/include
    –extra-cflags=-I../nv_sdk

4.3.使用命令进行1:2转码测试:

ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -vsync 0 -i  input.mp4 –vf scale_npp=1920:1072 -vcodec h264_nvenc output0.264 -vf scale_npp=1280:720 -vcodec h264_nvenc output1.264 

相关内容推荐