WSL2 Ubuntu24.04 支持硬件加速的ffmpeg编译指北
前情提要
在使用miguepf/auto-subtitle对umich课程进行自动添加字幕时,发现后处理的ffmpeg嵌字环节CPU占用异常之高,且GPU资源占用在5%左右,合理推断,应该是wsl中的ffmpeg没有调用nVidia显卡硬件加速而仅仅使用软解导致的资源利用不充分。为此,需要在本平台上重新编译能够使用gpu的ffmpeg(而不是使用apt中的预制ffmpeg),从而充分利用gpu进行编解码。
工具准备
安装cuda驱动
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
注意cuda-*-keyring.gpg应为上一步操作后终端输出中给出的真实文件名。
安装编译器和汇编器
sudo apt install build-essential yasm nasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev pkg-config
如果没有安装gcc,则还需要安装gcc:
sudo apt install gcc
开始编译
# 此处为安装路径,若无特殊需求无需改动
export FFMPEG_INSTALL="$HOME/.local/ffmpeg"
mkdir -p "$FFMPEG_INSTALL"
git clone https://github.com/FFmpeg/nv-codec-headers
cd nv-codec-headers
make PREFIX="$FFMPEG_INSTALL"
make install PREFIX="$FFMPEG_INSTALL"
cd ../
git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg/
cd ffmpeg
PKG_CONFIG_PATH="$FFMPEG_INSTALL/lib/pkgconfig" \
./configure \
--prefix="$FFMPEG_INSTALL" \
--pkg-config-flags="--static" \
--extra-cflags="-I$FFMPEG_INSTALL/include -I/usr/local/cuda/include" \
--extra-ldflags="-L$FFMPEG_INSTALL/lib -L/usr/local/cuda/lib64" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--enable-gpl \
--enable-nonfree \
--enable-cuda \
--enable-cuvid \
--enable-nvenc \
--enable-libnpp
# 此处数字为编译的线程数,建议与cpu核心数目保持一致
make -j 8
安装及设置
如果先前已经安装了预制的ffmpeg,则此处最好先卸载原先已经安装好的ffmpeg
sudo apt remove ffmpeg
然后再执行编译安装操作:
make install
最后,将安装的可执行文件目录添加到PATH中,在~/.profile文件末尾增添如下内容:
PATH="$HOME/.local/ffmpeg/bin:$PATH"
然后执行source命令使其生效:
source ~/.profile
不出意外,此时编译安装的全过程就已经完成了。
测试
ffmpeg
ffmpeg -hwaccel
若显示“Missing argument for option 'hwaccel'.”报错信息,则说明正在使用的ffmpeg是具备硬件加速能力的版本。进一步测试可以准备供转码用的视频,重命名为input.mp4,执行如下指令。
ffmpeg -y -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
参考文献
本文主要参考了wsl 使用支持 cuda 的 ffmpeg,其中编译及测试代码引自该文章。根据本机情况,本文在工具安装环节增添了一些软件包。感谢引用文章作者的辛劳。

浙公网安备 33010602011771号