如何在Ubuntu中安装/编译NVENC?


Answers:


19

与FFmpeg一样,持续发展会多次改变目标的发布时间,nvenc和FFmpeg的确如此。分为三个阶段:

  1. 自己动手:在2016年8月27日之前,有必要跟踪自己的标头以构建nvenc。艰巨而又有些混乱。
  2. 内置到源代码中:2016年8月27日将所需的标头作为FFmpeg源代码的一部分并入,除了从git编译FFmpeg源代码或此时使用git剪切的“发行版”功能之外,没有其他要求。
  3. 使用nv-codec-headers:在2018年2月26日,NVidia头从FFmpeg源删除。创建了一个单独的git存储库,以保存这些标头的继续工作。目前,必须安装这些标头以及 git的FFmpeg才能访问nvenc和朋友。

需要两个步骤:

1.安装nv-codec-headers软件包

像以下终端命令这样的东西就足够了:

sudo apt-get install make git
mkdir $HOME/nv-codec-headers_build && cd $HOME/nv-codec-headers_build
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make && sudo make install

如果由于某种原因您改变了主意并希望完全删除已安装的文件以及构建目录,只需运行以下两个终端命令:

sudo rm -v /usr/local/{lib/pkgconfig/ffnvcodec.pc,include/ffnvcodec/*.h}
rm -rfv $HOME/nv-codec-headers_build

并且您的系统已被清理。但是,如果您希望继续使用以下步骤:

2.编译FFmpeg

使用此经过良好测试的指南:

nv-codec-headers会被自动地识别(无需额外./configure需要的选项)和nvenc将成功构建。

测试:

我已经在Bionic Beaver LTS上对此进行了测试,结果是:

andrew@ilium:~$ ffmpeg -encoders 2>/dev/null | grep nvenc
 V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
andrew@ilium:~$

而且,如果您看到与上述类似的图片,并且拥有受支持的图形卡,那么您就去对了:)

笔记:

  • 最新版本对应于Video Codec SDK版本9.1.23,并且需要NVidia驱动程序版本435.21或更高版本。
  • 较旧的版本:现在有nv-codec-headers的自动github副本,它也创建了非常适合使用较旧版本的标题的tarball 。如果希望头文件与您无法或不愿更新的NVidia驱动程序的旧版本同步,则非常有用。
  • FFmpeg硬件加速指南:FFmpeg FFmpeg通常用于硬件加速的Wiki指南,这是编译和使用nvenc的规范部分

非常感谢您提供详细的指南。我从您的测试部分获得了类似的输出,这很棒。除了nVidia驱动程序之外,我们是否还需要安装Cuda SDK才能使FFMPEG使用已安装的GPU?
金伯利W

@KimberlyW在我的系统上不是必需的,我刚刚测试过……
andrew.46

@ andrew.46我按照你的意思做了,但是我仍然没有vp9的硬件加速:/
Freedo

@Freedo不幸nvenc是H.264和HEVC编码...
andrew.46

1
@DPS哎呀!但是,不是我在此答案中给出的nv-codec-header的简单卸载?
andrew.46

0

@ andrew.46您的回应很好,谢谢。我的声誉低于最低要求,无法发表评论。如果可能,请使用以下信息扩大您的答复。

如果需要还原到的早期版本nv-codec-headers,请从https://github.com/FFmpeg/nv-codec-headers/releases下载并编译较早的版本。

如果ffmpeg根据最新nv-codec-headers版本进行编译,则可能有必要,但是您的图形驱动程序的版本尚未处理所需的最低CUDA API版本nv-codec-headers。症状是ffmpeg将无法对视频流进行代码转换。就我而言,nv-codec-headers需要CUDA API 9.1,而nvidia-driver我发布(测试)的最新版本仍是使用9.0的版本。

nv-codec-headers比直接从Nvidia下载最新的驱动程序并在发行版本的更新机制之外进行构建,恢复到早期版本可能更安全。


谢谢!我已将其添加到“注释”部分...
andrew.46
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.