我在本文档中看到了对 nvidia NVENC 的支持,但它似乎令人困惑,有些是一步一步的吗?或者带有适用于 ubuntu 的 ffmpeg-nvenc 的 PPA?
答案1
与 FFmpeg 一样,持续开发会多次改变目标,nvenc 和 FFmpeg 也是如此。经历了 3 个阶段:
- 自己动手:2016 年 8 月 27 日之前,需要追踪自己的标头来构建 nvenc。这很费力,而且有点令人困惑。
- 内置于源中:2016 年 8 月 27 日看到了所需的标题纳入 FFmpeg 源的一部分,除了能够从 git 编译 FFmpeg 源代码,或者使用此时从 git 剪切的“发布”版本之外,没有任何要求。
- 使用 nv-codec-headers:2018 年 2 月 26 日,NVidia 标头从 FFmpeg 源中删除。一个单独的 git 存储库是为了继续使用这些标头而创建的。目前必须安装这些标头也FFmpeg 从 git 获取 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:
使用这个经过充分测试的指南:
- 在 Ubuntu、Debian 或 Mint 上编译 FFmpeg
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
将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 版本 11.0.10,并且需要 NVidia 驱动程序版本 455.28 或更新版本。
- 旧版本:现在有一个自动化的 nv-codec-headers github 副本,它还可以创建 tarball,非常适合使用旧版本标头。如果您希望标头与您无法或不愿意更新的旧版 NVidia 驱动程序同步,那么这非常有用。
- FFmpeg 硬件加速指南:FFmpeg Wiki 指南,介绍如何使用 FFmpeg 进行硬件加速,其中有编译和使用 nvenc...
答案2
根据 Focal 的更新日志,似乎现在已包含 nv-codec-headers。
ffmpeg(7:4.2.2-1ubuntu1)焦点;紧急程度=中等
使用外部 nv-codec-headers 构建 NVENC 加速视频编码。(LP:#1810649)
- debian/控制:
- 添加 BD libffmpeg-nvenc-dev
- debian/规则:
- 仅为 amd64 添加 --enable-nvenc
-- Martin Wimpress 2020 年 3 月 7 日星期六 08:39:35 +0000
- debian/控制:
答案3
@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 下载最新驱动程序并在发行版的更新机制之外构建它更安全。