Loading

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,其中编译及测试代码引自该文章。根据本机情况,本文在工具安装环节增添了一些软件包。感谢引用文章作者的辛劳。

posted @ 2024-12-03 19:42  kozumi  阅读(516)  评论(0)    收藏  举报