Page tree
Skip to end of metadata
Go to start of metadata

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

  1. 注意:apt安装的FFmpeg不支持CUDA加速,因此要自己编译安装才可以!

Write a comment...