Ubuntu上安装ffmpeg-cuda加速

前言

FFmpeg 是一个开放源代码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。
在这里插入图片描述

FFmpeg基础组件:
(1)命令行应用程序

  • ffmpeg:用于对视频或音频进行处理
  • ffplay:一个简单的播放器,基于SDL与FFmpeg库
  • ffprobe:用于显示媒体文件的信息

(2)函数库

  • libavutil:包含一些工具库
  • libavcodec:包含全部FFmpeg音频/视频编解码库
  • libavformat:包含demuxers和muxer库
  • libavdevice
  • libavfilter
  • libavresample
  • libswresample
  • libpostproc:对于视频做前处理的库
  • libswscale:对于影像作缩放的库

在这里插入图片描述

安装

基础版安装

无需CUDA加速的基础版本安装可以查阅:
Ubuntu上安装ffmpeg

CUDA支持版安装

(0)提前安装并配置好CUDA环境

-------软硬件信息--------------------
操作系统:Ubuntu18.04
Nvidia 显卡:RTX 2080Ti
Nvidia 驱动版本:440.82
CUDA 版本: 10.1
Python 版本:3.6.10
-----------------------------------

(1)官网下载安装包:
在这里插入图片描述
(2)解压

tar -xvf ffmpeg_4.2.2.orig.tar.xz

(3)安装yasm

sudo apt  install -y yasm

(4)设置编译项
添加cuda和cuvid使能:

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc  --enable-gpl --enable-libx264 --enable-cuda --enable-cuvid

(5)下载并编译安装 FFmpeg NVIDIA headers (“ffnvcodec”)

git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
(# 有多个分支,根据GPU驱动版本可能需要切换分支,本文采用git checkout sdk/9.1)
make
sudo make install

在这里插入图片描述

(6)编译、安装FFmpeg

make
sudo make install

(7)建立软链接

sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg
sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe

(8)配置ffmpeg依赖环境

sudo vi /etc/ld.so.conf
在其中添加路径:/usr/local/ffmpeg/lib

sudo ldconfig#更新环境变量

(9)版本查看

ffmpeg

在这里插入图片描述

检验和使用

检验

(1)列出gpu解码器:

ffmpeg -decoders | grep cuvid

在这里插入图片描述
(2)列出gpu编码器:

ffmpeg -encoders | grep nvenc

在这里插入图片描述

使用

(1)全CPU转码h264视频(CPU解码器libx264)到h264(CPU编码器libx264)

ffmpeg -i test.mp4 -c:v libx264 -y test-cpu.mp4

全CPU转码整体速度如下:

frame= 1056 fps= 21 q=-1.0 Lsize=    5509kB time=00:00:42.14 bitrate=1070.8kbits/s dup=2 drop=0 speed=0.84x

流映射关系:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))

可以看到用全CPU转码,FPS在20左右。

(2)全GPU转码h264视频(GPU解码器h264_cuvid)到h264(GPU编码器h264_nvenc)

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i test.mp4 -c:v h264_nvenc  -y test-gpu.mp4

全GPU转码整体速度如下:

frame= 1061 fps=847 q=18.0 Lsize=   10870kB time=00:00:42.40 bitrate=2100.1kbits/s dup=7 drop=0 speed=33.9x

流映射关系:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (h264_cuvid) -> h264 (h264_nvenc))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))

可以看到用CPU转码,FPS在850左右。
确实速度比CPU快太多,可能在帧数统计上会有些许差异。

(3)全GPU转码mpeg4(如mp4v)视频(GPU解码器mpeg4_cuvid)到h264(GPU编码器h264_nvenc)

ffmpeg -hwaccel cuvid -c:v mpeg4_cuvid -i test-mp4v.mp4 -c:v h264_nvenc  -y test-mp4v-gpu.mp4

(4)CPU解码GPU编码方式转码

ffmpeg -i test.mp4 -c:v h264_nvenc  -y test-gpu.mp4

转码整体速度如下:

frame= 1056 fps=628 q=18.0 Lsize=   10869kB time=00:00:42.20 bitrate=2110.0kbits/s dup=2 drop=0 speed=25.1x

流映射关系:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_nvenc))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))

在这里插入图片描述

参考资料

[1] Ubuntu上安装ffmpeg
[2] FFmpeg官网
[3] Ubuntu下x264库编译安装
[4] 使用GPU硬件加速FFmpeg视频转码
[5] NVIDIA VIDEO CODEC SDK - Get Started
[6] Github FFmpeg/nv-codec-headers
[7] ERROR: cuvid requested, but not all dependencies are satisfied: cuda/ffnvcodec
[8] Using GPU hardware to speed up FFmpeg video transcoding and pit draining
[9] Ubuntu 16.04下编译ffmpeg支持CUDA下的cuvid vnenc和NPP
[10] Use FFmpeg to Decode H.264 Stream with NVIDIA GPU Acceleration
[11] NVIDIA FFmpeg Transcoding Guide
[12] H.264 Video Encoding Guide
[13] FFmpeg 维基百科
[14] FFmpeg nvenc issue: Driver does not support the required nvenc API version. Required: 9.1 Found: 9.0 - Video Technologies / Video Codec and Optical Flow SDK - NVIDIA Developer Forums
[15] FFmpeg | NVIDIA Developer

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracelessLe

❀点个赞加个关注再走吧❀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值