ffmpeg 是适用于 Linux 和类 Unix 系统的免费开源视频转换软件。视频图片处理使用 GPU 能明显提高速度,缩减运行时间。本篇介绍如何编译安装 GPU 版 ffmpeg 及使用方法。以 Ubuntu 18.04 为例。
Nvidia 驱动和 GPU 加速库安装 想使用 GPU 加速计算,就需要 GPU 驱动和加速库。请参考我的另一篇博文安装: 深度学习的 GPU 环境的配置
实践中,我首先配置的 NVIDIA 驱动版本是:NVIDIA-Linux-x86_64-470.129.06.run,CUDA 加速框架是:cuda_11.1.0_455.23.05_linux.run,深度学习加速库是: cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz,编译安装 FFMPEG 后出现:Driver does not support the required nvenc API version. Required: 12.0 Found: 11.1
,然后重新安装 NVIDIA 驱动版本:NVIDIA-Linux-x86_64-525.60.13.run,解决问题。
编译安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mkdir ~/nvidia/cd ~/nvidia/git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd nv-codec-headerssudo make install cd ~/nvidia/git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/ sudo apt install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev pkg-config cd ~/nvidia/ffmpeg/./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared make -j $(nproc ) sudo make install rm -r ~/nvidia
安装后,默认将 ffmpeg, ffprobe 安装在 /usr/local/bin
目录下。为了便于区分 CPU 版的 ffmpeg,我常将 GPU 版更名:
1 2 3 cd /usr/local/binsudo mv ffmpeg ffmpeg-gpu sudo mv ffprobe ffprobe-gpu
例子 CPU 版 ffmpeg 使用方法请参考我的另一篇博文:FFmpeg 视频处理等相关 ,为了便于比较,这里给出一个转码视频格式为 H264 的例子:
1 ffmpeg -i input.mkv -c:v libx264 -c:a aac output-cpu.mp4
速度:
1 frame= 6761 fps=129 q=28.0 size= 59648kB time=00:04:42.51 bitrate=1729.6kbits/s speed=5.38x
GPU 版 ffmpeg 因为编码方式改变,所以转码方式如下:
1 ffmpeg-gpu -y -hwaccel cuda -i input.mkv -c:v h264_nvenc -c:a aac output-gpu.mp4
速度:
1 frame=29343 fps=261 q=31.0 size= 189184kB time=00:20:24.02 bitrate=1266.2kbits/s speed=10.9x
可见速度是 CPU 版的两倍左右。默认使用 GPU 0,查看使用情况:
查看支持的编码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ffmpeg-gpu -codecs ffmpeg-gpu -codecs | grep 264 ffmpeg version N-109541-g94aa70d757 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04) configuration: --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 libavutil 57. 43.100 / 57. 43.100 libavcodec 59. 56.100 / 59. 56.100 libavformat 59. 34.102 / 59. 34.102 libavdevice 59. 8.101 / 59. 8.101 libavfilter 8. 53.100 / 8. 53.100 libswscale 6. 8.112 / 6. 8.112 libswresample 4. 9.100 / 4. 9.100 DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_cuvid ) (encoders: h264_nvenc h264_v4l2m2m )
如果出现缺少 libavdevice.so.x,那么需要配置环境变量:
1 export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64/:/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
更多使用命令请参考官方网站ffmpeg
参考文献
NVIDIA
How to install FFmpeg with NVIDIA GPU acceleration on Linux
ffmpeg: error while loading shared libraries: libavdevice.so.58