Windows 下使用GPU加速ffmpeg处理任务

1. 按

由于GPU虽然速度快,但是质量不高,处理后的视频体积较大。而我主要是优化视频体积和质量的,因此在实际的场景中我几乎没有用过GPU进行加速,只是在测试时用了下。

2. ffmpeg下载

官网下载页:https://ffmpeg.org/download.html
建议下载编译好的版本,否则可能还需要自己编译,下载页面:https://ffmpeg.zeranoe.com/builds/
我一般比较喜欢下载最新版的(以日期命名的),当然还有个稳定版(以版本号命名的)的。
在这里插入图片描述

3. 英伟达(NVIDIA)GPU

英伟达的GPU需要先下载驱动(CUDA)

3.1. CUDA下载

CUDA是一个驱动程序,可以让GPU进行相关运算,因为我们开发应用程序一般不直接操控GPU,而是通过驱动来操作。
https://developer.nvidia.com/cuda-downloads
这里我选择版本的如下图:
当然也可以点击如下链接,直接转到我下载时的设置。
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
在这里插入图片描述
下载完了记得安装,那就不介绍了吧,毕竟都是开发软件的。

3.2. 命令

3.2.1. 查询命令

查询所下载的ffmpeg是否支持cuda,如果不支持(我下载的是支持的),那重新下载一下或者自行编译。

ffmpeg -hwaccels

在这里插入图片描述

3.2.2. 测试命令

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i 0.mp4 -c:v h264_nvenc -y 00.mp4

将当前目录下的0.mp4转成00.mp4

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i 0.mp4 -c:v h264_nvenc -r 15 -b 500k -y 00.mp4

将当前目录下的0.mp4转成00.mp4,并指定输出帧率为15(-r 15),比特率为500k(-b 500k)

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i <input> -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y <output>

-hwaccel cuvid:指定使用cuvid硬件加速
-c:v h264_cuvid:使用h264_cuvid进行视频解码
-c:v h264_nvenc:使用h264_nvenc进行视频编码
-vf scale_npp=1280:-1:指定输出视频的宽高,注意,这里和软解码时使用的-vf scale=x:x不一样

3.2.3. 多颗显卡命令

GPU转码效率测试
在配有两颗Intel-E5-2630v3 CPU和两块Nvidia Tesla M4显卡的服务器上,进行h264视频转码测试,成绩如下:

GPU转码平均耗时:8s
CPU转码平均耗时:25s

并行转码时,CPU软转的效率有所提高,3个转码任务并行时32颗核心全被占满,此时的成绩

GPU转码平均耗时:8s
CPU转码平均耗时:18s

不难看出,并行时GPU的转码速度并没有提高,可见一颗GPU同时只能执行一个转码任务。那么,如果服务器上插有多块显卡,ffmpeg是否会使用多颗GPU进行并行转码呢?
很遗憾,答案是否。
ffmpeg并不具备自动向不同GPU分配转码任务的能力,但经过一番调查后,发现可以通过-hwaccel_device参数指定转码任务使用的GPU!
向不同GPU提交转码任务
显卡0

ffmpeg -hwaccel cuvid -hwaccel_device 0 -c:v h264_cuvid -i <input> -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y <output>

显卡1

ffmpeg -hwaccel cuvid -hwaccel_device 1 -c:v h264_cuvid -i <input> -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y <output>

说明:
-hwaccel_device N:指定某颗GPU执行转码任务,N为数字

Linux下稍微麻烦一点儿,具体可参考:https://www.jianshu.com/p/59da3d350488

4. AMD GPU

AMD的GPU不需要额外下载东西,只要把ffmpeg编译好就能用。Windows版的ffmpeg官网提供了编译好的版本,因此Windows用户无需过多操心这个了,Linux如有需要,请参考:

4.1. 命令

将a.mp4转成b.mp4

ffmpeg -i .\a.mp4 -c:v h264_amf .\b.mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 15

打赏作者

COCO56(徐可可)

建议微信红包:xucoco56

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值