Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示,你自己编译或者其他源的版本可能会不同。

ffmpeg 的一些介绍,以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装(不需要编译安装或者brew)、使用ffmpeg转码的教程,以及如何使用硬件加速 - ZhongUncle’s CSDN》。

如果你了解转码的流程,那么直接跳过前两节,通过侧边栏跳转到“使用FFMPEG硬件加速转码”部分直接看命令。

转码的流程(解码、编码、转码的区别)

任何转码都分为解码、编码这样一个步骤。简单来说,解码就是把视频文件转换成显示的视频,编码就是把视频转换成视频文件。

关于解码和编码举 2 个例子:

  • 相机:相机就是通过把传感器的信号转换成某种视频格式,也就是编码,这样推流也好,存储也好,都好处理一些,毕竟与特特定传感器的信号格式无关了。
  • 看视频:看视频就是把传输来的视频格式解码成特定信号,传给显示器等设备,让你看到。

ffmpeg 如果没有任何特殊选项,默认是使用软件解码、编码。硬件加速解码就是利用某种专为某些格式解码、编码设计的芯片进行操作。

一个常识:特定设计的芯片要比 CPU 通用处理器快很多,功耗也小很多。

请添加图片描述

软、硬解码编码的区别

软件解码、编码就是利用 CPU 运行一个软件,然后由这个软件进行解码、编码的操作。这样的好处就是如果一个格式更新了,或者一些特殊类型的编码都可以实现。而硬件编码在制造芯片的时候就已经写死了,无法更改了,所以基本上更新一代,就多支持几个格式。比如 980 Ti 的编码器只支持 4:2:0 的 4K H.265 的格式,如下:

请添加图片描述

但是到 1080 Ti 的时候,就多支持了三种:

请添加图片描述

需要注意,虽然视频编解码器一般都是和 GPU 同时出现,但是这玩意不是用 CUDA 等光栅单元实现的,是单独的一部分。比如 Tesla A100 这种特别强的 GPU 并不支持硬件编解码加速,因为没有硬件编解码器。(也不是所有计算卡的都没有,比如 V100、P100 都有)

请添加图片描述

此外,这玩意是有数量的,不是说支持硬件加速,你上 10 条视频一起处理和单独处理 1 条的速度一样,后面会演示这个现象。

使用FFMPEG硬件加速转码

简单的开始

好了,在了解基础信息之后,可以开始转码了。下面是最简单的命令:

ffmpeg -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc output.mp4

其中:

  • 前面的-c:v h264_cuvid是用来解码的。如果你用过 Mac 上的硬件加速,会发现这种不太一样,它强制说明了解码器(如果不用这个会怎样呢,后面演示给你看)。
  • 后面的-c:v h264_nvenc是用来编码的。

此外,如果你看过官方文档,会发现和官方文档的使用方法不一样,如果使用官方文档中的命令,很容易转码的时候出现问题。

设置码率和帧率

如果使用上述的命令进行转码,那么码率和帧数很可能会不同(比如帧率 30 变 25,码率 6m 变 2m),所以我们要制定码率和帧数:

ffmpeg -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 6000k -r 30 output.mp4

其中:

  • -b:v 6000k表示码率是6000k
  • -r 30表示转码后的帧率为30帧。

此时转码速率为 16x,要比核显快很多。此时显卡情况如下:

请添加图片描述

不指定硬件解码器会怎样?

前面提到它强制说明了解码器,那么如果不用这个会怎样呢?

如果不使用硬件解码器,那么就需要使用 CPU 进行软解,所以 CPU 使用率会很高,但是转码速度并不会有太大区别(有些时候会快一些):

请添加图片描述

这种方式也有自己的使用场景:当你要修复一个视频的编码器的时候,最好用软解码,因为硬件解码器很可能无法正确识别已经有问题的编码。比如我有一个视频,用有的播放器看的时候,会无法看 11 分钟之后的内容,那么如果使用硬件解码器,会出现下面的问题:

[h264_cuvid @ 0x55ed4090d540] cuvid decode callback error
Error while decoding stream #0:0: Generic error in an external library

打开视频发现转码的是黑屏,但是不指定解码器就可以正确转码。

在只有一个编码器上进行多个作业会怎样?

前面提到编码器、解码器是有数量的。并不是多少个都一样快,比如上面我们发现 3060 转码是 16x,如果同时进行两个转码任务,那么会发现总和差不多也是 16x。

请添加图片描述
这个结果可能会让你很沮丧,但是你想哈,比如直播和录像的时候,你实际上只需要 1x 的速度啊,这样的话相当于你可以同时至多跑 16 个流(实际上会少一些,因为并不是每个任务都是恒定 1x 的,保险起见要留余量),这就很不错了。

编码质量

FFMPEG

转码除了修复编码问题,一般都是换编码格式(比如 h265 转 h264)和文件格式。
同编码同文件文件格式的转码较少,不过我也试了,质量非常不错,和软转没啥区别。

我之前写过一篇 macOS 上 ffmpeg 硬件加速转码的博客:《macOS上如何安装(不需要编译安装或者brew)、使用ffmpeg转码的教程,以及如何使用硬件加速 - ZhongUncle’s CSDN》,里面有个对比,是 mp4 转 mov 的同时,降低码率从 42m 到 10m,对比如下:

请添加图片描述
CUDA 硬件转码的情况如下:
请添加图片描述
会发现 3060 的质量要比 8 代酷睿的 QSV 质量好一些,真不错,就是功耗大。

OBS

硬件编码器是有个支持码率范围的,超过和过低都会有较大的画质损耗或者编码问题。

英伟达官方建议 OBS 直播设置的的分辨率、码率、帧数设置如下(下图是机翻的,“1440点”是“1440P”,也就是 2k):
请添加图片描述

在游玩燕云十六声的时候,使用 OBS 录屏(nvenc h264 编码)8000k码率的和软编码画质差不多。采用 40Mbps 编码的时候,要比软编码差一点,但差的不是很多。关于这部分我会单独开一篇博客,之前用的是 MX250 这种英伟达 GPU,编码速度和质量要比 QSV 差很多。这里简单列一下截图:

我这里是按照个人习惯设置的,并没有按照 Nvidia 的建议设置,因为我一开始不知道官方推荐值。

麦田这种事物比较密集的场景很适合看码率损耗(你还可以用色彩多的画面检查,这个更明显),如下,可以看到麦穗虽然已经无法看清,但是远观并不糊(下面的图二次压缩过,但是也够看出来损耗可以接受了):

请添加图片描述

请添加图片描述

请添加图片描述

希望能帮到有需要的人~

参考资料/扩展阅读

NVIDIA FFmpeg Transcoding Guide - Nvidia Developer Technical Blog:ffmpeg 中 cuda 硬件转码的一些技术介绍。

Using FFmpeg with NVIDIA GPU Hardware Acceleration:ffmpeg 中 cuda 硬件编码、解码的技术文档。

Video Encode and Decode GPU Support Matrix - Nvidia Developer :这里你可以查看哪些 GPU 支持什么编、解码器。

NVIDIA NVENC OBS Guide - Nvidia:这里英伟达介绍了如何使用 OBS 直播。

Broadcasting 101: A Beginner’s Guide to Live Streaming:这里介绍了直播需要的设备规格和一些额外的链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1572.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【端云一体化】云函数的使用

前言 为丰富HarmonyOS对云端开发的支持、实现端云联动,DevEco Studio以Cloud Foundation Kit(云开发服务)为底座、在传统的“端开发”基础上新增“云开发”能力,开发者在创建工程时选择合适的云开发工程模板,即可在De…

vLLM私有化部署大语言模型LLM

目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型&#x…

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux,最初学习时是一脸蒙圈,啥也不会,啥也不懂,做了很多乱七八糟,没有条理的笔记。不知…

蓝牙BT04-A的使用与相关AT指令

一、AT指令没有返回的问题及解决方案 检查指令格式: 确认指令格式是否正确,包括特定的命令和结尾的回车换行符(n)。 检查TX/RX连接: 确认TX(发送)和RX(接收)线是否连接正…

国产Docker可视化面板Dpanel的安装与功能解析

国产Docker可视化面板Dpanel的安装及功能介绍 Docker 可视化面板系统,提供完善的 docker 管理功能。 支持查看基本信息、运行状态统计、网络统计、磁盘统计、用量统计等功能 ​​ ​​ 容器管理: ​​ 创建/修改容器 ​​ 支持基本配置、环境变量、…

金融项目实战 06|Python实现接口自动化——日志、认证开户接口

一、日志封装及应用(理解) 🔴日志的作用: 记录程序运行的步骤和错误。 🔴日志的场景: 1、调试bug2、查看程序运行轨迹 🔴日志基本应用: # 1、导包 import logging # 2、调用日…

第423场周赛:检测相邻递增子数组 Ⅰ、检测相邻递增子数组 Ⅱ、好子序列的元素之和、统计小于 N 的 K 可约简整数

Q1、检测相邻递增子数组 Ⅰ 1、题目描述 给你一个由 n 个整数组成的数组 nums 和一个整数 k&#xff0c;请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c;并满足下…

vue 与 vue-json-viewer 实现 JSON 数据可视化

前言 接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据&#xff0c;使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件&#x…

开源项目stable-diffusion-webui部署及生成照片

参考链接 https://www.freedidi.com/13133.html 基础环境部署 python 官网链接 Python Release Python 3.10.6 | Python.org 下载 Python 3.10.6 版本安装包 下载好后双击 点击安装&#xff0c;这里需要选择一下&#xff0c;把环境变量加上。&#xff08;这里是默认安装到C盘…

宝塔面板 申请证书后 仍然提示不安全

证书显示有效&#xff0c;但是网站显示不安全 导致的原因是引入静态文件使用的是HTTP&#xff0c;查看方法为F12打开console控制台 可以看到静态文件全部都是HTTP 网站采用wordpress搭建&#xff0c;基于问题解决&#xff0c;其他方式搭建也是一样&#xff0c;处理掉所有的H…

14X505-1《火灾自动报警系统设计规范图示》中相关数据和总线制的个人理解

目录 内容简介一、设计容量1.1 设备总数or地址总数1.2 报警与联动合用总线怎么办1.3 10%余量 二、总线短路隔离器2.1 设备总数or地址总数2.2 短路隔离器计入设备数吗2.3 电源要隔离吗2.4 穿越没有设备的防火分区要加短路隔离吗2.5 思考&#xff1a;一个回路可以带几个短路隔离器…

PCB印刷电路板快速上手04电容元件

1.电容元件 电容&#xff1a;又叫电容器&#xff0c;是指容纳电荷本领的物理量。 电容元件是表征电路元件储存电荷特性的理想元件&#xff0c;在电路分析学科中是除电阻元件、电感元件以外的基本电路元件。 电容一般用通常用“C”表示&#xff08;Capacitance&#xff09; 电…

风水算命系统架构与功能分析

系统架构 服务端&#xff1a;Java&#xff08;最低JDK1.8&#xff0c;支持JDK11以及JDK17&#xff09;数据库&#xff1a;MySQL数据库&#xff08;标配5.7版本&#xff0c;支持MySQL8&#xff09;ORM框架&#xff1a;Mybatis&#xff08;集成通用tk-mapper&#xff0c;支持myb…

HarmonyOS NEXT开发进阶(六):HarmonyOS NEXT实现嵌套 H5 及双向通信

文章目录 一、前言二、鸿蒙应用加载Web页面2.1 加载网络地址页面2.2 加载本地H5页面 三、实现Web组件 H5 层与鸿蒙应用层进行相互通讯3.1 鸿蒙应用向 H5 页面发送数据3.2 H5页面向鸿蒙应用发送数据 四、拓展阅读 一、前言 随着HarmonyOS NEXT的快速发展&#xff0c;越来越多的…

OPT: Open Pre-trained Transformer语言模型

摘要 大规模语言模型通常需要数十万计算日的训练时间&#xff0c;展现了在零样本和小样本学习中的显著能力。鉴于其计算成本之高&#xff0c;这些模型在没有大量资本投入的情况下难以复现。对于那些通过API提供的少数模型&#xff0c;研究者无法获取完整的模型权重&#xff0c…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里&#xff0c;视觉内容无处不在&#xff0c;而创建和编辑这些内容的能力已经成为许多行业的核心技能…

ffmpeg 编译遇到的坑

makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加&#xff1a; --disable-htmlpages

CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)

目录 示例1 &#xff08;中间自适应 示例2&#xff08;中间自适应 示例3&#xff08;中间自适应 示例4 &#xff08;自适应成比 示例5&#xff08;左中定宽&#xff0c;右边自适应 示例6&#xff08;中间自适应 示例7&#xff08;中间自适应 示例8&#xff08;中间定宽…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…

20250112面试鸭特训营第20天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别&#xff1f; 特性TCPUDP连接方式面向连接&#xff08;需要建立连接&#xff09;无连接&#xff08;无需建立连接&#xff09;可靠性可靠的&#xff0c;提供确认、重传机制不可靠&#xff0c…