论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
运维.售后
›
运维.售后
›
Ubuntu上,ffmpeg怎样使用cuda硬件解码、编码、转码加速 ...
Ubuntu上,ffmpeg怎样使用cuda硬件解码、编码、转码加速
李优秀
金牌会员
|
11 小时前
|
显示全部楼层
|
阅读模式
楼主
主题
554
|
帖子
554
|
积分
1662
本文使用 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:这里先容了直播必要的装备规格和一些额外的链接。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
李优秀
金牌会员
这个人很懒什么都没写!
楼主热帖
什么是API密钥及其安全利用指南? ...
【Java结业计划】基于JavaWeb的在线购 ...
基于GLM生成SQL,基于MOSS生成SQL,其 ...
Docker Compose - 安装和基本使用 ...
mac安装java17(jdk17)
【云原生 | 从零开始学Kubernetes】二 ...
亲测有效,彻底解决msvcr100.dll丢失的7 ...
2024年最恰当高级网工的11款Linux ...
[Qt][Qt 网络][下]具体讲解
Linux体系(CentOS)下安装设置 Nginx 超 ...
标签云
存储
挺好的
服务器
浏览过的版块
数据仓库与分析
快速回复
返回顶部
返回列表