编译支持cuda硬件加速的ffmpeg

本来以为很简单,因为印象中自己在windows机器上使用过。

目前的实在一个docker环境下的ubuntu系统里。

官方操作文档

按照官方操作文档Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述,步骤很简单:

1、安装nv-codec-headers的头文件。

bash 复制代码
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install && cd --

2、克隆ffmpeg源代码。

bash 复制代码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/

3、安装编译源代码需要的依赖库。

bash 复制代码
sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev

4、配置编译条件,进行编译安装。

bash 复制代码
./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared

5、进行测试使用。

可能出问题的坑

但是这里隐含了几个前提条件。

1、nv-codec-headers是有版本对应的,需要根据目标机器上的驱动版本,选择对应的版本。

查看目标机器上的驱动版本可以执行nvidia-smi查看。

nv-codec-headers里的README文件里写了匹配的版本信息。

2、目标机器需要安装CUDA toolkit,这个文档里有写,可以执行nvcc --version查看是否安装成功。

3、配置ffmpeg编译条件的时候,里面包含了两个目录:

/usr/local/cuda/lib64和/usr/local/cuda/include。要确保这两个目录里确实有需要的文件。

笔者就发现目标机器上的/usr/local/cuda/lib64是空的,然后通过:

find / -name 'libcuda*' 命令找到了实际存在libcuda.so文件的目录是:/usr/lib/x86_64-linux-gnu/。

这样就需要替换掉编译条件里的目录。

4、启动docker的命令里需要把宿主机的视频能力赋予docker容器。

bash 复制代码
--gpus 'all,"capabilities=compute,video,utility"'

参考文档:https://www.cnblogs.com/azureology/p/18290262

User Guide --- container-toolkit 1.10.0 documentation

最后所有依赖和路径设置正确以后。执行./configure的完整命令。会输出完整支持的编码解码器信息,注意看是否包含h264_nvenc。如果包含了就证明设置正确了。

相关推荐
腾渊信息科技公司11 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
Smoothcloud润云11 小时前
国内GPU算力租赁平台横向测评:资源、成本、稳定性三维对比
人工智能·ai·云计算·gpu算力·gpu
赵康14 小时前
AI 写代码之后,Code Review 会议怎么开
ai·llm·skill
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
TsingtaoAI14 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅
汤姆yu16 小时前
CodeGeeX 4完整安装与实操使用全指南
人工智能·windows·ai·智能体·视频模型
人间凡尔赛16 小时前
2026 AI Agent 多智能体协同编程实战指南:从 Kimi K3 到 GPT-5.6 深度解析
ai·agent·多智能体·编程实战·waic·gpt-5.6·kimik3
ApacheSeaTunnel17 小时前
Apache SeaTunnel AI CLI Benchmark:7 款大模型、100 个 ETL 任务实测,谁真正能跑起来?
大数据·ai·开源·大模型·数据集成·cli·seatunnel·技术分享·数据同步
兵叔物联17 小时前
基于FFmpeg的短视频自动剪辑工具
ffmpeg·音视频
大卫小东(Sheldon)17 小时前
小鹤音形词典:一个用 Rust 写的离线编码查询桌面工具
ai·rust