FFMPEG 使用GPU加速转码

2023-03-24 15:53:00
admin
转贴
2391
摘要:视频转码时如果遇见视频比较大、时长很长的时候,转码压制需要等待很久且及占用cpu,所以就在想有没有什么办法可以加速转码进度呢 ,故本篇文章记录FFMPEG如何调用显卡对转换编码格式或者压制进行加速。

前言

视频转码时如果遇见视频比较大、时长很长的时候,转码压制需要等待很久且及占用cpu,所以就在想有没有什么办法可以加速转码进度呢 ,故本篇文章记录FFMPEG如何调用显卡对转换编码格式或者压制进行加速。


软硬编解码的区分:

软编码:使用CPU进行编码 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等


软硬编解码的区别:



 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。 硬编码:性能高,低码率下通常质量低于软编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。



简单来说硬解码就是 内存 - codec 电路 - 内存/显示 的过程所以速度会比软件编解码快



ffmpeg支持的硬件

通过命令 ffmpeg -hwaccels 可以查询系统支持的硬件加速器。


ffmpeg -hwaccels

 ----------------------------------------------

cuda 

dxva2

qsv 

d3d11va 

opencl 

vulkan


硬编码后缀解释

qsv:intel显卡的快速视频同步技术(quick sync video)
nvenc:nvidia显卡的硬件视频编码器(nvidia hardware video encoder)
cuvid:nvdec的旧称,只有解码端。
cuda: 同上
amf:amd显卡的amf硬件编码器(amd hardware encoder)


基本上所有的Intel 电脑都支持qsv方式。



编解码器支持


ffmpeg -codecs

后面可以跟 sls命令查询所需的编码,例如: ffmpeg -codecs | sls nvenc



ffmpeg -codecs | sls nvenc 

--------------------------------------------------------------- 

DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264 libx264rgb h264_amf h264_nvenc h264_qsv ) DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoder s: libx265 hevc_amf hevc_nvenc hevc_qsv )




查询系统支持的编解码格式,需要用到 ffmpeg -decoders 和 ffmpeg -encoders 两个命令。



查询编解码器选项


查询编码器hevc_nvenc的选项:ffmpeg -h encoder=hevc_nvenc

查询解码器 h264_qsv 的详细信息:ffmpeg -h decoder=h264_qsv 


PS:h264_qsv ,h264_cuvid,h264 :就是支持的解码方式

sls :作用相当于linux中的grep

h264_qsv:英特尔硬解码

h264_cuvid:英伟达硬解码


ffmpeg -encoders

sls :作用相当于linux中的grep


如以上有类似输出则证明是支持硬解码或者硬编码的。

硬件加速命令
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -s 1920x1080 output.mp4 

常用命令参数解释
-hwaccel cuvid:使用cuvid进行硬件加速
-c:v h264_cuvid:使用h264_cuvid进行解码
-c:v h264_nvenc:使用h264_nvenc进行编码(nvidia硬件加速x265)
-b:v 2000k:比特率,值越大约清晰。
-s 1920x1080:分辨率
-b:v 3500K:视频平均比特率为 3500K
-bufsize 6000K:缓存区大小 6000K,建议设定为 当前码率帧率5,也许这里的2pass是针对缓冲区的,缓存未来5s
-maxrate 5000K:最大码率为 5000K,每帧的最高码率不超过这个数值
-preset slow:预设方案是 slow,slow已经是最好的选项了
-pix_fmt p010le:输出的像素格式是 p010le 也就10bit,只有新的硬件支持








发表评论
评论通过审核后显示。
文章分类
联系我们
联系人: 北极星通公司
电话: 010-56545416
传真: 010-82896426
Email: support@bjsin.cn
QQ: 35338585
微信: Aoku2017 | QQ群:241759321
地址: 北京市中关村生命科学园创意园3-3-103