我有大约 1400.mp4视频文件,我必须重新编码所有内容才能使用mp4盒将其转化为短跑
CPU:Intel® Core™ i7-6700 四核 Skylake
GPU:GeForce® GTX 1080
内存:64GB
Ubuntu 18.04
运行apt-get install ffmpeg后,我无法使用-c:v h264_nvenc,我收到如下错误:未知编码器‘h264_nvenc’
我阅读了网络上的每一个指南,以便在我的服务器上正确安装 nvidia 编解码器,但是旧指南并不适用于我的服务器。
您能帮我找到一种新的、正确的安装方法吗?
谢谢。
答案1
在您的案例中,您需要从源代码构建 FFmpeg。使用下面显示的示例。有关您可以使用当前一代支持 NVENC 的 NVIDIA GPU 实现的受支持和可用的硬件加速功能,请参阅这回答。
对于构建:
FFmpeg 使用 NVENC 和 Ubuntu 18.04LTS 上所有可用的基于 CUDA 的过滤器构建:
构建平台:Ubuntu 18.04LTS
目标:生成一个 FFmpeg 版本,该版本可以利用 NVENC 和 Ubuntu 18.04LTS+ 上所有可用的基于 CUDA 的过滤器。该版本将以 为前缀/opt
。
确保平台是最新的:
sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade
首先安装基线依赖项(包括 OpenCL 标头+)
sudo apt-get -y install autoconf automake build-essential libass-dev \
libtool libssl-dev \
pkg-config texinfo zlib1g-dev cmake mercurial libbz2-dev rtmpdump librtmp-dev libunistring2 libunistring-dev opencl-headers ocl-icd-*
创建工作区:
sudo mkdir -p /opt/ffmpeg
mkdir -p ~/ffmpeg_sources
安装 CUDA 10 SDK:
确保您拥有最新的驱动程序:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update && sudo apt-get -y upgrade
在 Ubuntu 18.04LTS 桌面上,这对于当前的设备驱动程序来说应该足够了:
sudo apt-get install nvidia-kernel-source-430 nvidia-driver-430
在 Ubuntu 18.04LTS 服务器系统上,这将执行:
sudo apt install nvidia-headless-430 nvidia-utils-430 libnvidia-common-430 libnvidia-encode-430 libnvidia-decode-430 libnvidia-fbc1-430
我们保持设备驱动程序为最新版本,以便通过ffnvcodec
驱动程序版本检查。最好先确认最新的驱动程序版本。请通过检查此处的存储库来确认:https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
首先获取 SDK 二进制安装程序:
cd ~/ffmpeg_sources
wget -c -v -nc https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.168_418.67_linux.run
chmod +x ./cuda_10.1.168_418.67_linux.run
./cuda_10.1.168_418.67_linux.run
您会发现我们正在使用二进制安装程序。这对于使用无头系统(没有 X)的用户最有用,因为它将安装 CUDA 而不会引入不必要的依赖项。
您也可以使用 NVIDIA 为 Ubuntu 提供的官方 CUDA 存储库,但我不推荐它,因为它引入了许多不必要的软件包。
确认 CUDA 库的库配置文件也存在且设置正确:
/etc/ld.so.conf.d/cuda.conf
内容应该是:
/usr/local/cuda/lib64
完成后,加载新配置:
sudo ldconfig -vvvv
现在,设置 CUDA 的环境变量:
编辑/etc/environment
文件并附加以下内容:
CUDA_HOME=/usr/local/cuda
现在,将以下内容附加到 PATH 变量中:
/usr/local/cuda/bin:/opt/ffmpeg/bin
完成后,记得获取文件:
source /etc/environment
然后继续。
关于 NVENC 启用:
请注意对第三方标头的包含进行了更改影响新版本,此问题已通过以下方式修复:
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/nv-codec-headers
cd nv-codec-headers
make
sudo make install PREFIX="/opt/ffmpeg_build"
构建一个可用的 FFmpeg 二进制文件,以 /opt/ffmpeg 为前缀:
根据需要添加额外的组件:
(a). 构建并部署nasm: 纳什是 x264 和 FFmpeg 使用的 x86 优化汇编程序。强烈推荐,否则您的最终构建可能会非常慢。
请注意,我们现在已经从 Yasm 切换到 nasm,因为这是 x265、x264 等当前采用的汇编程序。
cd ~/ffmpeg_sources
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
tar xzvf nasm-2.14.02.tar.gz
cd nasm-2.14.02
./configure --prefix="/opt/ffmpeg_build" --bindir="/opt/ffmpeg/bin"
make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
make -j$(nproc) distclean
(b). 静态构建并部署 libx264:此库提供 H.264 视频编码器。请参阅H.264 编码指南了解更多信息和使用示例。这需要使用 来配置 ffmpeg --enable-gpl --enable-libx264
。
cd ~/ffmpeg_sources
git clone http://git.videolan.org/git/x264.git
cd x264/
PATH="/opt/ffmpeg/bin:$PATH" ./configure --prefix="/opt/ffmpeg_build" --enable-static --enable-shared
PATH="/opt/ffmpeg/bin:$PATH" make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install VERBOSE=1
make -j$(nproc) distclean
(c). 构建并配置 libx265:此库提供 H.265/HEVC 视频编码器。请参阅H.265 编码指南了解更多信息和使用示例。
cd ~/ffmpeg_sources
git clone https://bitbucket.org/multicoreware/x265_git.git
cd ~/ffmpeg_sources/x265/build/linux
PATH="/opt/ffmpeg/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install VERBOSE=1
make -j$(nproc) clean VERBOSE=1
(d). 构建并部署 libfdk-aac 库:这提供了 AAC 音频编码器。请参阅AAC 音频编码指南了解更多信息和使用示例。这需要配置 ffmpeg --enable-libfdk-aac
(并且--enable-nonfree
如果您还包括--enable-gpl
)。
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="/opt/ffmpeg_build" --disable-shared
make -j$(nproc)
sudo make -j$(nproc) install
make -j$(nproc) distclean
(e). 构建并配置 libvpx:
cd ~/ffmpeg_sources
git clone https://github.com/webmproject/libvpx
cd libvpx
./configure --prefix="/opt/ffmpeg_build" --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
--enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-better-hw-compatibility --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only --cpu=native --as=nasm
time make -j$(nproc)
sudo time make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
(f). 构建 LibVorbis:
cd ~/ffmpeg_sources
git clone https://github.com/xiph/vorbis.git
cd vorbis
autoreconf -ivf
./configure --enable-static --prefix="/opt/ffmpeg_build"
time make -j$(nproc)
sudo make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
现在将新的库路径添加/opt/ffmpeg_build/lib
到您的 ldconfig:
sudo su
echo /opt/ffmpeg_build/lib > /etc/ld.so.conf.d/ffmpeg.conf
然后运行:
sudo ldconfig -vvvv
然后继续。
(g). 构建 FFmpeg:
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/FFmpeg -b master
cd FFmpeg
PATH="/opt/ffmpeg/bin:$PATH" PKG_CONFIG_PATH="/opt/ffmpeg_build/lib/pkgconfig" ./configure \
--pkg-config-flags="--static" \
--prefix="/opt/ffmpeg" \
--bindir="/opt/ffmpeg/bin" \
--extra-cflags="-I/opt/ffmpeg_build/include" \
--extra-ldflags="-L/opt/ffmpeg_build/lib" \
--enable-cuda-nvcc \
--enable-cuvid \
--enable-libnpp \
--extra-cflags="-I/usr/local/cuda/include/" \
--extra-ldflags=-L/usr/local/cuda/lib64/ \
--enable-nvenc \
--enable-libass \
--disable-debug \
--enable-libvorbis \
--enable-libvpx \
--enable-opencl \
--enable-gpl \
--cpu=native \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--enable-openssl \
--enable-librtmp \
--extra-libs="-lpthread -lm -lz" \
--enable-nonfree
PATH="/opt/ffmpeg/bin:$PATH" make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
hash -r
由于我们添加/opt/ffmpeg/bin
到了系统路径,因此您可以直接调用FFmpeg。
答案2
在 (f). 构建 LibVorbis:
https://git.xiph.org/vorbis.git改成https://github.com/xiph/vorbis.git
并添加基线依赖项:
libogg-dev,需要 LibVorbis
答案3
在 (c) 中:构建和配置 libx265
替换hg clone https://bitbucket.org/multicoreware/x265
为git clone https://bitbucket.org/multicoreware/x265_git.git
适合我。
在安装 NVEnc 时,你可以 git clone 其他版本以适合你的 cuda 版本。例如https://github.com/FFmpeg/nv-codec-headers/tree/sdk/9.0