当前位置: 首页 > news >正文

一文速通GPU版FFmpeg视频转码的安装使用

目录

写在前面

一、FFmpeg 版本

二、完整安装步骤

1. 安装编译依赖

2.安装nv-codec-headers SDK 12.0

3.如果需要 x264/x265(软件编码备用)

4. 下载 FFmpeg 6.0 源码

5. 配置编译选项

6. 编译并安装

三、 验证安装

1.查看FFmpeg版本

2.检查 NVENC 编码器是否可用

3.检查 CUVID 解码器是否可用

4. 检查 NVIDIA 硬件加速是否启用

5.试着转码一个视频

四、NVENC是什么

五、nv-codec-headers SDK是什么


写在前面

我有一张破显卡(P100),我要在这张显卡上用FFmpeg 进行视频转码。因为这张卡虽然破,也比纯CPU转码要快的多,配置如下:

显卡:Tesla P100 PCIe 16GB

显卡驱动:525.105.17

CUDA 版本:12.0

操作系统:Ubuntu 18.04.1

一、FFmpeg 版本

我的配置不高,但是FFmpeg 的 GPU 加速(NVENC/NVDEC)完全可用,只是不能使用最高版本的FFmpeg 。驱动 525.105.17 最高支持 Video Codec SDK 12.0,可以安装最高 FFmpeg 6.0+ 版本。

最终方案:编译 FFmpeg 6.0 配合 nv-codec-headers SDK 12.0 分支,以避免 "Driver does not support the required nvenc API version" 错误。

二、完整安装步骤

1. 安装编译依赖

sudo apt-get update sudo apt-get install -y build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev git pkg-config

2.安装nv-codec-headers SDK 12.0

wget -O nv-codec-headers-sdk-12.0.tar.gz "https://github.com/FFmpeg/nv-codec-headers/archive/refs/heads/sdk/12.0.tar.gz" tar -xzf nv-codec-headers-sdk-12.0.tar.gz cd nv-codec-headers-sdk-12.0 sudo make install

3.如果需要 x264/x265(软件编码备用)

a.安装依赖

sudo apt-get install -y libx264-dev libx265-dev libnuma-dev

b.如果libx264-dev找不到,用:

sudo apt-get install -y libx264-163 libx264-dev

4. 下载 FFmpeg 6.0 源码

先准备文件夹,我所有ffmpeg相关的文件都放在/mnt/ffmpeg目录:

cd /mnt/ffmpeg wget https://ffmpeg.org/releases/ffmpeg-6.0.1.tar.xz tar -xJf ffmpeg-6.0.1.tar.xz cd ffmpeg-6.0.1

5. 配置编译选项

./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --enable-cuvid --enable-nvenc --enable-ffnvcodec --enable-cuda --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared --enable-gpl --enable-libx264 --enable-libx265

关键参数说明:

  • --enable-cuda-nvcc:启用 CUDA 编译

  • --enable-cuvid:启用 NVDEC 硬件解码

  • --enable-nvenc:启用 NVENC 硬件编码

  • --enable-libnpp:启用 NVIDIA Performance Primitives(用于 GPU 滤镜如 scale_npp)

  • --extra-cflags=-I/usr/local/cuda/include:指向 CUDA 头文件

  • --extra-ldflags=-L/usr/local/cuda/lib64:指向 CUDA 库文件

6. 编译并安装

make -j$(nproc) sudo make install sudo ldconfig

三、 验证安装

1.查看FFmpeg版本

ffmpeg -version

2.检查 NVENC 编码器是否可用

ffmpeg -hide_banner -encoders | grep nvenc

3.检查 CUVID 解码器是否可用

ffmpeg -hide_banner -decoders | grep cuvid

4. 检查 NVIDIA 硬件加速是否启用

ffmpeg -hide_banner -hwaccels | grep cuda

5.试着转码一个视频

ffmpeg \ -hwaccel cuda \ -hwaccel_output_format cuda \ -i input_video.mp4 \ -vf "scale_npp=1920:1080" \ -c:v h264_nvenc \ -preset fast \ -b:v 4M \ -maxrate 6M \ -bufsize 8M \ -r 30 \ -c:a copy \ -y output_1080p_4m_gpu_video.mp4

四、NVENC是什么

上面提到了NVENC,NVENCNVIDIA Video Encoder的缩写,NVIDIA 的硬件视频编码器

简单地说,NVENC 是 NVIDIA 显卡上的一个独立硬件模块,专门负责视频编码,不占用 GPU 的 CUDA 核心

Tesla P100 有这个模块,所以可以用显卡硬件编码视频,而不是用 CPU 软编码。

方式命令占用资源速度质量
CPU 软编码-c:v libx264CPU 核心
GPU 硬编码-c:v h264_nvencNVENC 专用芯片够用

我们注意到表格中最后一列中:CPU 软编码质量更好。没错,同码率下 CPU 软编码(libx264)通常比 GPU 硬编码(h264_nvenc)画质更清晰,但差距在缩小。

原因说明
压缩算法更精细CPU 可以做更复杂的运动估计、帧间预测,找到更优的压缩方式
码率分配更智能复杂画面(如树叶、水波纹)给更多码率,简单画面省码率
B帧更多CPU 编码可以用更多 B帧(双向预测),压缩率更高
心理视觉优化x264 的 psychovisual 优化更成熟

但差距没那么大(特别是高码率时)

场景差距
低码率(<2Mbps 1080p)CPU 优势明显,GPU 可能有明显块效应
中等码率(4Mbps 1080p)差距较小,肉眼难分辨
高码率(>8Mbps 1080p)几乎看不出区别
HEVC(h265_nvenc vs libx265)GPU 差距更小,HEVC 本身压缩率高

所以,同码率下 CPU 更清晰,但 GPU 快 5-10 倍。如果 GPU 编码,码率给高一点(比如 CPU 用 3M,GPU 用 5M),画质就能追平,速度还是快很多。

五、nv-codec-headers SDK是什么

nv-codec-headers是 NVIDIA 视频编解码的头文件库,FFmpeg 编译 GPU 加速功能时必须用到。

简单的说,它是 NVIDIA 提供的接口定义文件.h头文件),让 FFmpeg 知道怎么调用显卡上的NVENC(硬件编码器)和NVDEC/CUVID(硬件解码器)。没有它,FFmpeg 编译时就找不到这些接口,GPU 编解码功能就启用不了。

为什么需要单独安装?

NVIDIA 的 Video Codec SDK 是闭源的,但头文件是开源的。FFmpeg 不能直接链接 SDK,只能通过这些头文件动态加载显卡驱动里的编码/解码功能。

版本必须匹配

nv-codec-headers 分支对应 NVIDIA SDK 版本适用 FFmpeg 版本
sdk/11.1Video Codec SDK 11.1FFmpeg 5.1, 6.0
sdk/12.0Video Codec SDK 12.0FFmpeg 6.0+
sdk/12.1Video Codec SDK 12.1FFmpeg 6.1+

六、CPU版FFmpeg

这是CPU版预编译的FFmpeg下载地址,可以下载直接用,不需要上面的一系列操作:FFbinaries - Download binaries for ffmpeg, ffprobe, ffserver and ffplay (cross-platform: Windows, Mac, Linux)

GPU版FFmpeg的安装就介绍到这里。

关注不迷路(*^▽^*),暴富入口==》 https://bbs.csdn.net/topics/619691583

http://www.cnnetsun.cn/news/4057202.html

相关文章:

  • 传统BIOS引导黑苹果实战:老硬件安装macOS Monterey完整指南
  • 基于大模型的PLC编程自动化:从自然语言到工业控制代码的智能生成
  • 无线传输模块概述
  • Python 快速上手(Java 开发者版)
  • 碰到文档色差别发愁,AI 导出鸭帮你搞定 DeepSeek 导出 pdf 颜色不一样怎么办的实操解决技巧
  • Gitee实战指南:从Git基础到团队协作的完整工作流
  • 微信聊天记录导出工具WeChatMsg:免费开源,永久保存你的每一句对话
  • AI如何重塑经济模式:从传统支柱解构到新价值创造
  • Unity-2D-Destruction 完全指南:免费开源 2D 精灵破碎工具,5 分钟实现爆炸破坏效果
  • 2024黑苹果安装指南:从硬件选型到OpenCore配置实战
  • Linux文件IO编程指南:系统IO与标准IO的核心区别与实战应用
  • 海纳斯新机开荒指南:系统设置调优、应用安装与卸载全攻略
  • 腾讯云部署OpenClaw对接钉钉机器人:AI智能体自动化办公实战
  • Linux内存优化实战:从free命令解读到性能调优全解析
  • TG地理围栏实战:构建毫秒级响应的实时位置监控系统
  • OpenClaw智能体框架实战:从零搭建AI自动化工作流
  • fflip 升级迁移指南:特性开关从 v2 到 v4 平滑升级避坑全攻略
  • 项目沟通管理:从理论到实践,打造高效团队协作的通信协议
  • git-sync 系统服务配置:使用 systemd 实现无人值守的定时备份
  • AudioBand常见问题排查清单:10个高频错误与解决方案
  • 打造类似Apple Music的动画效果:kavsoft-swiftui-animations中的音乐应用案例
  • 覆盖12+编程语言:palenight.vim 多语言语法高亮适配详解
  • PyQt-Frameless-Window 常见问题排查清单:从 DLL 加载失败到毛玻璃卡顿
  • MXFP8量化原理揭秘:NVIDIA-Nemotron-3.5-Lightning-30B-A3B-mxfp8如何把31B模型压缩到30GB
  • 深度解析North-Micro-Vision-Instruct-mxfp8架构:Cohere Compass的混合注意力与DeepStack视觉编码器
  • dsh-web-ui 安全使用指南:配对门、隧道与 SSH 的 6 条安全建议
  • ClimaX Docker部署实战:一条命令启动完整气象模型环境
  • QQ空间历史说说如何完整备份?GetQzonehistory三步导出教程
  • Python进阶 - os模块 遍历目录下的所有文件
  • PyCharm Python第三方库管理全攻略:从虚拟环境配置到高效安装避坑