架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10041|回复: 4

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

[复制链接]
发表于 2019-11-7 21:08:29 | 显示全部楼层 |阅读模式
ffmpeg下载

官网下载页:
https://ffmpeg.org/download.html
建议下载编译好的版本,下载页面:
https://ffmpeg.zeranoe.com/builds/
我一般比较喜欢下载最新版的(以日期命名的),当然还有个稳定版(以版本号命名的)的。
QQ截图20191107210324.jpg


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
QQ截图20191107210435.jpg

下载完了记得安装,那就不介绍了吧,毕竟都是开发软件的。

命令

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


QQ截图20191107210536.jpg

测试命令

将当前目录下的0.mp4转成00.mp4
将当前目录下的0.mp4转成00.mp4,并指定输出帧率为15(-r 15),比特率为500k(-b 500k)
-hwaccel cuvid:指定使用cuvid硬件加速
-c:v h264_cuvid:使用h264_cuvid进行视频解码
-c:v h264_nvenc:使用h264_nvenc进行视频编码
-vf scale_npp=1280:-1:指定输出视频的宽高,注意,这里和软解码时使用的-vf scale=x:x不一样

多颗显卡命令

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


显卡1

说明:

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





上一篇:【实战】基于 Nginx 制作 Docker 镜像
下一篇:2000款logo样机
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-11-7 21:18:35 | 显示全部楼层
//参数说明
/*
    * -i filename(input) 源文件目录
    * -y 输出新文件,是否强制覆盖已有文件
    * -c 指定编码器
    * -fs limit_size(outinput) 设置文件大小的限制,以字节表示的。没有进一步的字节块被写入后,超过极限。输出文件的大小略大于所请求的文件大小。
    * -s 视频比例  4:3 320x240/640x480/800x600  16:9  1280x720 ,默认值 'wxh',和原视频大小相同
    * -vframes number(output) 将视频帧的数量设置为输出。别名:-frames:v
    * -dframes number (output) 将数据帧的数量设置为输出.别名:-frames:d
    * -frames[:stream_specifier] framecount (output,per-stream) 停止写入流之后帧数帧。
    * -bsf[:stream_specifier] bitstream_filters (output,per-stream)  指定输出文件流格式,
例如输出h264编码的MP4文件:ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
    * -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
    *
    */
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-11-8 15:07:05 | 显示全部楼层
ffmpeg.exe -hwaccel_device 1 -hwaccel cuvid -i C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A14.mp4 -y C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A16.avi

https://blog.csdn.net/Tosonw/article/details/90178195


nvcc --version

CUVID是基于CUDA的视频解码库,利用CUVID进行解码


Failed to create Direct3D device
Device creation failed: -1313558101.

ffmpeg版本必须对应同期显卡驱动才能正确启用硬件加速。


查看nvidia硬件加速编解码器:

.\ffmpeg.exe -codecs | sls nvenc
.\ffmpeg.exe -codecs | sls cuvid

其中前缀含义如下:

前缀含义
D….. = Decoding supported
.E…. = Encoding supported
..V… = Video codec
..A… = Audio codec
..S… = Subtitle codec
…I.. = Intra frame-only codec
….L. = Lossy compression
…..S = Lossless compression



ffmpeg.exe -hwaccel_device 1 -hwaccel cuvid -c:v h264_cuvid -i C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A14.mp4 -c:v h264_nvenc -y C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A16.avi

ffmpeg.exe -hwaccel cuvid -c:v h264_cuvid -i C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A14.mp4 -c:v h264_nvenc -y C:\Users\DELL\Desktop\VideoDemo\VideoDemo\bin\Debug\A16.avi


https://developer.nvidia.com/ffmpeg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-2-26 12:11:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-2-26 12:13:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-6-1 13:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表