FFmpeg 是一个开放源代码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec — 这是一个用于多个项目中音频和视频的解码器库,以及libavformat — 一个音频与视频格式转换库。“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。
FFmpeg基础组件:
- 命令行应用程序
- ffmpeg:用于对视频或音频进行处理
- ffplay:一个简单的播放器,基于SDL与FFmpeg库
- ffprobe:用于显示媒体文件的信息
- 函数库
- libavutil:包含一些工具库
- libavcodec:包含全部FFmpeg音频/视频编解码库
- libavformat:包含demuxers和muxer库
- libavdevice
- libavfilter
- libavresample
- libswresample
- libpostproc:对于视频做前处理的库
- libswscale:对于影像作缩放的库
安装环境
- 操作系统:Ubuntu 20.04
- 显卡型号:Quadro RTX 4000
- 驱动版本:495.29.05
- CUDA版本:11.5
- Python版本:3.8.10
安装FFmpeg
安装依赖包
安装libx264和yasm:
sudo apt update sudo apt install -y libx264-155 libx264-dev sudo apt install -y yasm
下载和编译安装FFmpeg NVIDIA headers(ffnvcodec)
安装FFmpeg的NVIDIA头文件:
cd ~/Downloads 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
下载和解压源码包
从FFmpeg官网下载4.4.1的源码包:
cd ~/Downloads wget https://www.ffmpeg.org/releases/ffmpeg-4.4.1.tar.xz tar xvf ffmpeg-4.4.1.tar.xz
设置编译选项
cd ffmpeg-4.4.1 ./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-gpl --enable-libx264 --enable-cuda --enable-cuvid
编译和安装FFmpeg
make sudo make install
建立软链接
sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe
配置FFmpeg库
sudo bash -c 'cat << EOF > /etc/ld.so.conf.d/ffmpeg.conf /usr/local/ffmpeg/lib EOF' sudo ldconfig
检验安装
查看版本
ffmpeg -h
上述命令的输出,如下图所示:
列出GPU解码器
ffmpeg -decoders | grep cuvid
上述命令的输出,如下图所示:
列出GPU编码器
ffmpeg -encoders | grep nvenc
上述命令的输出,如下图所示:
使用方法
全CPU转码
全CPU转码h264视频(CPU解码器libx264)到h264(CPU编码器libx264):
ffmpeg -i test.mp4 -c:v libx264 -y test-cpu.mp4
全CPU转码整体速度如下:
frame= 6630 fps=128 q=-1.0 Lsize= 24373kB time=00:11:02.99 bitrate= 301.2kbits/s speed=12.8x
流映射关系:
Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (aac (native) -> aac (native))
全GPU转码
全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= 6630 fps=404 q=8.0 Lsize= 64463kB time=00:11:02.99 bitrate= 796.5kbits/s speed=40.4x
流映射关系:
Stream mapping: Stream #0:0 -> #0:0 (h264 (h264_cuvid) -> h264 (h264_nvenc)) Stream #0:1 -> #0:1 (aac (native) -> aac (native))
结论
可以看到用GPU转码,FPS在400帧左右。
确实速度比CPU快太多,可能在帧数统计上会有些许差异。
1 Comment
Bean Young
注意:apt安装的FFmpeg不支持CUDA加速,因此要自己编译安装才可以!
Add Comment