FFmpeg 实战:基于 Ubuntu 操作系统裸机部署具有 NVIDIA GPU 硬件加速编码能力的 FFmpeg
FFmpeg 实战:基于 Ubuntu 操作系统裸机部署具有 NVIDIA GPU 硬件加速编码能力的 FFmpeg
准备
-
正常运行 Ubuntu 操作系统的计算机一台。具体为:
-
已在主板的 PCIe x16 插槽上安装了 NVIDIA Tesla V100 计算卡。
注意事项:
安装形式不限,SXM2 转接 PCIe x16 或原生 PCIe x16 形式均可。 -
已设置主板 BIOS 中开启以下选项:
-
已启用 “Above 4G Decoding” 项。以提高 GPU 性能。
-
已将目标 PCIe 插槽的 CPU 总线分配为了 x16 速度的带宽。以提高 GPU 性能。
-
-
已安装 x86架构的、64位的、24.04 版本的Ubuntu Desktop 或 Ubuntu Server 操作系统。
-
-
已安装并配置好 NVIDIA GPU 驱动程序和 NVIDIA CUDA Toolkit 。
参见:人工智能实战:基于 Ubuntu 操作系统和 Llama.cpp 应用程序,使用 Tesla V100 GPU 推理通义千问 3.6 27B 大模型。
开始
了解生成具有 NVIDIA GPU 硬件加速编码能力 FFmpeg 的必要条件
想要编译出的 FFmpeg 具有完全的硬件加速编码能力,需要具备以下软硬件条件:
| 必要项 | 概述 | 推荐版本下载地址 | 预期结果 | 备注 |
|---|---|---|---|---|
| GPU 硬件 | 必须安装好 NVIDIA Tesla V100 GPU。 | - | - | - |
| GPU 驱动程序 | 适用于 NVIDIA Tesla V100 GPU 的驱动程序。 | 已含于 NVIDIA CUDA Toolkit 组件中,无需单独下载安装。 | 键入并执行 nvidia-smi 命令后能够正常输出 GPU 信息。 | 阅读人工智能实战:基于 Ubuntu 操作系统和 Llama.cpp 应用程序,使用 Tesla V100 GPU 推理通义千问 3.6 27B 大模型一文可知,NVIDIA CUDA Toolkit 12.9 Update 2 中自带的 NVIDIA GPU Driver 版本为 575.57.08。 |
| NVIDIA CUDA Tookit | 必须安装 CUDA Toolkit 且其版本必须与 NVIDIA Tesla V100 GPU 驱动程序兼容适配。 | CUDA Toolkit 12.9 Update 2 Downloads。 | 键入并执行 nvcc -V 命令后能够正常输出 NVIDIA NVCC 组件的版本信息。 | - |
| NVIDIA Video Codec SDK Header Files | 必须安装 NVIDIA Video Codec SDK 且其版本必须与 NVIDIA Tesla V100 GPU 驱动程序兼容适配。 | NVIDIA Video Codec SDK 12.2 GitHub 源码主页。 | - | 1. 务必注意阅读 NVIDIA Video Codec SDK 源码中的 README 文件,其中有写各个版本所支持的 NVIDIA GPU 驱动程序。 若版本用错了,后面转码时会报形如“Driver does not support the required nvenc API version. Required: XX.X Found: XX.X”的错。 2. 参见: 1. NVIDIA Video Codec SDK 产品主页。 2. 适用于 12.9 Update 2 版本 NVIDIA CUDA Toolkit 内 GPU 驱动程序的 NVIDIA Video Codec SDK。 |
安装依赖组件
-
打开终端窗口,键入并执行以下命令,以安装编译所必需的组件:
sudo apt-get install autoconf automake autotools-dev bison build-essential bzr cmake libaom-dev libboost-dev \ libbluray-dev libc6-dev libfdk-aac-dev libgmp-dev libmp3lame-dev libgnutls28-dev libnuma-dev libopencore-amrnb-dev \ libopencore-amrwb-dev libvo-amrwbenc-dev libopenmpt-dev libopus-dev libass-dev libprotobuf-dev libxml2-dev libftgl-dev \ libglew-dev libsdl2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsnappy-dev libshine-dev libsoxr-dev libspeex-dev \ libtheora-dev libtool libtwolame-dev libx264-dev libx265-dev libxvidcore-dev nasm pkg-config unzip yasm -y -
由于后续会在编译 FFmpeg 时启用 AviSynth 的相关功能,而软件源仓库中又没有现成可直接安装的库,故需要从源码编译安装。
-
打开终端窗口,键入并执行以下命令,以将最新版本的 AviSynth 源代码下载并保存到本机任意位置:
sudo git clone https://down.mxw.xx.kg/https://github.com/AviSynth/AviSynthPlus.git -
使用 cd 命令切换到源码根目录下,键入并执行以下命令,以编译并安装:
sudo mkdir avisynth-build && cd avisynth-build \ && sudo cmake ../ -DHEADERS_ONLY:bool=on && sudo make install
下载 NVIDIA Video Codec SDK 源码
打开终端窗口,键入并执行以下命令,以将兼容适配于 NVIDIA CUDA Toolkit 12.9 Update 2 中自带 NVIDIA GPU Driver 版本的(版本号为 575.57.08) 的、版本为 12.2 的 NVIDIA Video Codec SDK 源代码下载并保存到本机任意位置:
sudo git clone https://down.mxw.xx.kg/https://github.com/FFmpeg/nv-codec-headers.git -b 'sdk/12.2'
编译和安装 NVIDIA Video Codec SDK
打开终端窗口,使用 cd 命令切换到源码根目录下,键入并执行以下命令,以编译并安装:
sudo make install
成功安装的示例输出结果如下所示:
sed 's#@@PREFIX@@#/usr/local#' ffnvcodec.pc.in > ffnvcodec.pc
install -m 0755 -d '/usr/local/include/ffnvcodec'
install -m 0644 include/ffnvcodec/*.h '/usr/local/include/ffnvcodec'
install -m 0755 -d '/usr/local/lib/pkgconfig'
install -m 0644 ffnvcodec.pc '/usr/local/lib/pkgconfig'
由上可知:
NVIDIA Video Codec SDK 的相关头文件已安装到当前操作系统的头文件库中。
下载 FFmpeg 源码
打开终端窗口,键入并执行以下命令,以将最新版本的 ffmpeg 源代码下载并保存到本机任意位置:
sudo git clone https://down.mxw.xx.kg/https://github.com/FFmpeg/FFmpeg.git ffmpeg
编译和安装 FFmpeg
-
打开终端窗口,使用 cd 命令切换到源码根目录下,视实际情况,键入并执行以下命令,以编译并安装:
sudo sh configure --enable-shared --enable-static --enable-gpl --enable-nonfree --nvcc=clang --prefix="[ffmpeg的目标安装位置。一般设为 /usr/local/ffmpeg 即可]" \ --enable-avfilter --enable-avisynth --enable-gmp --enable-gnutls --enable-iconv --enable-libaom --enable-libass --enable-libbluray --enable-libfdk-aac \ --enable-libfontconfig --enable-libmp3lame --enable-libnpp --enable-libopus --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenmpt \ --enable-libshine --enable-libsnappy --enable-libspeex --enable-libsoxr --enable-libtheora --enable-libvo-amrwbenc --enable-libwebp --enable-libtwolame --enable-libxvid \ --enable-libxml2 --enable-zlib --enable-lzma --enable-pthreads --enable-sdl2 --enable-swscale --enable-version3 --enable-libx264 --enable-libx265 \ --disable-x86asm \ --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \ --nvccflags="-gencode arch=compute_70,code=sm_70 -O2" \ && sudo make -j$(nproc) && sudo make install示例命令如下所示:
sudo sh configure --enable-shared --enable-static --enable-gpl --enable-nonfree --nvcc=clang --prefix="/usr/local/ffmpeg" \ --enable-avfilter --enable-avisynth --enable-gmp --enable-gnutls --enable-iconv --enable-libaom --enable-libass --enable-libbluray --enable-libfdk-aac \ --enable-libfontconfig --enable-libmp3lame --enable-libnpp --enable-libopus --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenmpt \ --enable-libshine --enable-libsnappy --enable-libspeex --enable-libsoxr --enable-libtheora --enable-libvo-amrwbenc --enable-libwebp --enable-libtwolame --enable-libxvid \ --enable-libxml2 --enable-zlib --enable-lzma --enable-pthreads --enable-sdl2 --enable-swscale --enable-version3 --enable-libx264 --enable-libx265 \ --disable-x86asm \ --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \ --nvccflags="-gencode arch=compute_70,code=sm_70 -O2" \ && sudo make -j$(nproc) && sudo make install注意事项:
- 截至截稿时,NVIDIA 官方 Video Codec SDK 的部署教程版本为 13.1,部署时应遵照此教程。而不是网上搜索出来的、使用 13.0 或更早版本教程写出来的博客和经验贴。如果按照它们的方式部署,会一直卡在“nvcc not found”的错误上。因为新版早就不再且不必使用诸如 ``–enable-cuda-nvcc
、–enable-cuda-sdk、–enable-cuvid、–enable-libnpp、--enable-nvenc、--extra-cflags='-I/usr/local/cuda/include'、--extra-ldflags='-L/usr/local/cuda/lib64'或--nvccflags='-gencode arch=compute_70,code=sm_70 -O2'等参数了。 - 上述命令中的
--nvccflags="-gencode arch=compute_70,code=sm_70 -O2"参数实则不必加。但为了体现 Tesla V100 GPU 的 CUDA 硬件单元版本,提升可读性,就加上了。 - [老旧的 13.0 版 NVIDIA Video Codec SDK 官方部署教程](Using FFmpeg with NVIDIA GPU Hardware Acceleration)。
- [最新的 13.0 版 NVIDIA Video Codec SDK 官方部署教程](Using FFmpeg with NVIDIA GPU Hardware Acceleration)。
- configure 期间的日志文件输出,位于源码目录下 ffbuild 中的 config.log 文件内。
-
使用 cd 命令切换到 FFmpeg 安装目录下的 bin 目录中,键入并执行以下命令,以查看编译好的 FFmpeg 二进制可执行文件所引用的动态链接库的缺失情况:
ldd ffmpeg示例结果输出如下所示:
linux-vdso.so.1 (0x00007ffe9572c000) libavdevice.so.63 => not found libavfilter.so.12 => not found libavformat.so.63 => not found libavcodec.so.63 => not found libswresample.so.7 => not found libswscale.so.10 => not found libavutil.so.61 => not found libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe9c4f3e000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe9c4f22000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe9c4f02000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe9c4cd9000) /lib64/ld-linux-x86-64.so.2 (0x00007fe9c50a6000)由上可知:
此 ffmpeg 二进制可执行文件找不到 libavdevice.so.63、libavfilter.so.12、libavformat.so.63、libavcodec.so.63、libswresample.so.7、libswscale.so.10 和 libavutil.so.61 动态链接库的引用。 -
键入并执行以下命令,以在 FFmpeg 的安装位置下查找这些文件的所在位置:
sudo find . -name 'libavdevice.so.63'示例输出结果如下所示:
./lib/libavdevice.so.63由上可知:
这些动态链接库都在当前目录下的 lib 中。 -
使用 vi 命令编辑位于 /etc 目录下名为 ld.so.conf 的动态链接库加载配置文件,并在文件末尾另起一行,将此 lib 的绝对路径加入到配置中,然后保存并退出:
示例配置如下所示:
include /etc/ld.so.conf.d/*.conf /usr/local/ffmpeg/lib -
键入并执行以下命令,以刷新加载缓存:
sudo ldconfig -
再次使用 ldd 命令查看 ffmpeg 二进制可执行文件的动态链接库加载情况。
示例输出结果如下所示:
linux-vdso.so.1 (0x00007ffe1d1bd000) libavdevice.so.63 => /usr/local/ffmpeg/lib/libavdevice.so.63 (0x00007fa902d64000) libavfilter.so.12 => /usr/local/ffmpeg/lib/libavfilter.so.12 (0x00007fa902922000) libavformat.so.63 => /usr/local/ffmpeg/lib/libavformat.so.63 (0x00007fa902638000) libavcodec.so.63 => /usr/local/ffmpeg/lib/libavcodec.so.63 (0x00007fa9012ae000) libswresample.so.7 => /usr/local/ffmpeg/lib/libswresample.so.7 (0x00007fa901295000) libswscale.so.10 => /usr/local/ffmpeg/lib/libswscale.so.10 (0x00007fa90117b000) libavutil.so.61 => /usr/local/ffmpeg/lib/libavutil.so.61 (0x00007fa900f95000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa900eae000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa900e92000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa900e72000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa900c49000) libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fa900c33000) libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa900c07000) libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007fa900b04000) libsndio.so.7 => /lib/x86_64-linux-gnu/libsndio.so.7 (0x00007fa900af0000) libXv.so.1 => /lib/x86_64-linux-gnu/libXv.so.1 (0x00007fa900ae9000) libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa9009a9000) libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa900994000) libass.so.9 => /lib/x86_64-linux-gnu/libass.so.9 (0x00007fa90095c000) libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fa900912000) libxml2.so.2 => /lib/x86_64-linux-gnu/libxml2.so.2 (0x00007fa900730000) libopenmpt.so.0 => /lib/x86_64-linux-gnu/libopenmpt.so.0 (0x00007fa90056f000) libbluray.so.2 => /lib/x86_64-linux-gnu/libbluray.so.2 (0x00007fa900518000) libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fa900496000) libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007fa9002a7000) libwebpmux.so.3 => /lib/x86_64-linux-gnu/libwebpmux.so.3 (0x00007fa90029a000) libwebp.so.7 => /lib/x86_64-linux-gnu/libwebp.so.7 (0x00007fa90022d000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fa900202000) libopencore-amrwb.so.0 => /lib/x86_64-linux-gnu/libopencore-amrwb.so.0 (0x00007fa9001ec000) libsnappy.so.1 => /lib/x86_64-linux-gnu/libsnappy.so.1 (0x00007fa9001e2000) libaom.so.3 => /lib/x86_64-linux-gnu/libaom.so.3 (0x00007fa8ffc6f000) libfdk-aac.so.2 => /lib/x86_64-linux-gnu/libfdk-aac.so.2 (0x00007fa8ffb3e000) libmp3lame.so.0 => /lib/x86_64-linux-gnu/libmp3lame.so.0 (0x00007fa8ffac9000) libopencore-amrnb.so.0 => /lib/x86_64-linux-gnu/libopencore-amrnb.so.0 (0x00007fa8ffa9e000) libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007fa8ffa40000) libshine.so.3 => /lib/x86_64-linux-gnu/libshine.so.3 (0x00007fa8ff800000) libspeex.so.1 => /lib/x86_64-linux-gnu/libspeex.so.1 (0x00007fa8ffa20000) libtheoraenc.so.1 => /lib/x86_64-linux-gnu/libtheoraenc.so.1 (0x00007fa8ff7c8000) libtheoradec.so.1 => /lib/x86_64-linux-gnu/libtheoradec.so.1 (0x00007fa8ff7aa000) libtwolame.so.0 => /lib/x86_64-linux-gnu/libtwolame.so.0 (0x00007fa8ff785000) libvo-amrwbenc.so.0 => /lib/x86_64-linux-gnu/libvo-amrwbenc.so.0 (0x00007fa8ff769000) libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007fa8ff73c000) libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007fa8ff691000) libx264.so.163 => /lib/x86_64-linux-gnu/libx264.so.163 (0x00007fa8ff3d0000) libx265.so.199 => /lib/x86_64-linux-gnu/libx265.so.199 (0x00007fa8fe46b000) libxvidcore.so.4 => /lib/x86_64-linux-gnu/libxvidcore.so.4 (0x00007fa8fe358000) libsoxr.so.0 => /lib/x86_64-linux-gnu/libsoxr.so.0 (0x00007fa8fe2f1000) /lib64/ld-linux-x86-64.so.2 (0x00007fa902dff000) libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa8ffa16000) libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa8ffa0e000) libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fa8fe2d9000) libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007fa8fe2bd000) libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fa8fe1ee000) libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fa8fe126000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fa8fe0f5000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fa8fe0ec000) libicuuc.so.70 => /lib/x86_64-linux-gnu/libicuuc.so.70 (0x00007fa8fdef1000) libmpg123.so.0 => /lib/x86_64-linux-gnu/libmpg123.so.0 (0x00007fa8fde95000) libvorbisfile.so.3 => /lib/x86_64-linux-gnu/libvorbisfile.so.3 (0x00007fa8fde8a000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa8fdc5c000) libudfread.so.0 => /lib/x86_64-linux-gnu/libudfread.so.0 (0x00007fa8fdc51000) libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fa8fdb16000) libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007fa8fdaf5000) libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007fa8fd94b000) libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fa8fd933000) libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007fa8fd8eb000) libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007fa8fd8a3000) libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x00007fa8fd898000) libcairo.so.2 => /lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fa8fd770000) libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 (0x00007fa8fd763000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa8fd75c000) libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007fa8fd712000) libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007fa8fd705000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fa8fd5ca000) libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fa8fd5a2000) libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fa8fd565000) libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fa8fd557000) libicudata.so.70 => /lib/x86_64-linux-gnu/libicudata.so.70 (0x00007fa8fb939000) libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007fa8fb92c000) libpixman-1.so.0 => /lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fa8fb881000) libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fa8fb87a000) libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fa8fb86b000) libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fa8fb85e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa8fb7e8000) libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fa8fb7c5000)由上可知:
所有依赖的动态链接库都引用到了。 -
视实际情况,键入并执行以下命令,以为 FFmpeg 的相关二进制可执行文件创建软连接:
sudo ln -s [ffmpeg二进制可执行文件的位置] /usr/bin/ffmpeg \ && sudo ln -s [ffprobe二进制可执行文件的位置] /usr/bin/ffprobe \ && sudo ln -s [ffplay二进制可执行文件的位置] /usr/bin/ffplay示例命令如下所示:
sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg \ && sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe \ && sudo ln -s /usr/local/ffmpeg/bin/ffplay /usr/bin/ffplay -
键入并执行以下命令,已验证 FFmpeg 版本:
ffmpeg -version示例结果输出如下所示:
ffmpeg version N-125485-ga41f543113 Copyright (c) 2000-2026 the FFmpeg developers built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04.3) configuration: --enable-shared --enable-static --enable-gpl --enable-nonfree --nvcc=clang --prefix=/usr/local/ffmpeg --enable-avfilter --enable-avisynth --enable-gmp --enable-gnutls --enable-iconv --enable-libaom --enable-libass --enable-libbluray --enable-libfdk-aac --enable-libfontconfig --enable-libmp3lame --enable-libnpp --enable-libopus --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenmpt --enable-libshine --enable-libsnappy --enable-libspeex --enable-libsoxr --enable-libtheora --enable-libvo-amrwbenc --enable-libwebp --enable-libtwolame --enable-libxvid --enable-libxml2 --enable-zlib --enable-lzma --enable-pthreads --enable-sdl2 --enable-swscale --enable-version3 --enable-libx264 --enable-libx265 --disable-x86asm --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --nvccflags='-gencode arch=compute_70,code=sm_70 -O2' libavutil 61. 2.100 / 61. 2.100 libavcodec 63. 5.100 / 63. 5.100 libavformat 63. 3.100 / 63. 3.100 libavdevice 63. 2.100 / 63. 2.100 libavfilter 12. 2.100 / 12. 2.100 libswscale 10. 2.100 / 10. 2.100 libswresample 7. 2.100 / 7. 2.100 Exiting with exit code 0由上可知:
Ffmpeg 已成功安装。 -
分别键入并执行以下命令,以分别查看支持的所有 H.264、H.265(HEVC)编码器和解码器:
ffmpeg -encoders | grep "h264" ffmpeg -decoders | grep "h264"示例结果输出分别如下所示:
********************************** H.264 编码器 ***************************************** V....D libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264) V....D libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264) V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264) V..... h264_v4l2m2m V4L2 mem2mem H.264 encoder wrapper (codec h264) ********************************** H.264 解码器 ***************************************** VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 V..... h264_v4l2m2m V4L2 mem2mem H.264 decoder wrapper (codec h264) V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264) ----------------------------------------------------------------------------------------- ********************************** H.265 (HEVC) 编码器 ********************************** V....D libx265 libx265 H.265 / HEVC (codec hevc) V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc) V..... hevc_v4l2m2m V4L2 mem2mem HEVC encoder wrapper (codec hevc) ********************************** H.265 (HEVC) 解码器 ********************************** VFS..D hevc HEVC (High Efficiency Video Coding) V..... hevc_v4l2m2m V4L2 mem2mem HEVC decoder wrapper (codec hevc) V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)由上可知:
H.264 和 H.265(HEVC)的编解码器都能够正常启用。
效果展示
-
以下示例命令,是使用 NVIDIA GPU 的 NVENC 视频编码硬件单元,在尽可能小地损失原视频画质的情况下,将一个大小为 23.11GB 的影片转码压缩至 8.79 GB 大小:
./ffmpeg -hwaccel cuda -i "/home/stevejrong/demo_videos/Aliens_Romulus_2024.mkv" \ -map 0:v -map 0:1 -map 0:2 -map 0:8 \ -c:v hevc_nvenc -preset p7 -tune hq -b:v 8400k -rc vbr -rc-lookahead 32 -pix_fmt p010le \ -c:a:0 eac3 -b:a:0 448k \ -c:a:1 eac3 -b:a:1 768k \ -c:s copy \ -metadata:s:s:0 title="中英双语" \ -avoid_negative_ts 1 \ /home/stevejrong/demo_videos/Aliens_Romulus_2024_compressed.mkv转码过程中,可键入并执行以下命令,以循环显示 NVIDIA GPU 的负载情况:
watch -n 2 -d nvidia-smi示例结果输出如下所示:
Tue Jul 7 17:11:28 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 575.57.08 Driver Version: 575.57.08 CUDA Version: 12.9 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 Tesla V100-SXM2-16GB Off | 00000000:02:00.0 Off | 0 | | N/A 44C P0 53W / 300W | 1743MiB / 16384MiB | 31% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 401976 C ./ffmpeg 1739MiB | +-----------------------------------------------------------------------------------------+由上可知:
ffmpeg 进程正常调用 NVIDIA GPU 进行编码工作。同时可键入并执行以下命令,以循环打印输出 NVIDIA GPU 各硬件单元的使用率信息:
nvidia-smi dmon
- 截至截稿时,NVIDIA 官方 Video Codec SDK 的部署教程版本为 13.1,部署时应遵照此教程。而不是网上搜索出来的、使用 13.0 或更早版本教程写出来的博客和经验贴。如果按照它们的方式部署,会一直卡在“nvcc not found”的错误上。因为新版早就不再且不必使用诸如 ``–enable-cuda-nvcc
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)