张新栋 · 2020年12月24日

WIN10平台用Py基于N卡做视频编解码

首发:知乎
作者:糖心他爸

最近需要在PC平台做视频的编解码,需要同时支持多路的视频,在做方案预研的时候就没有往软解、软编的方案去想。我的PC中装配了Nvidia的显卡,于是考虑用硬编、硬解的方式来处理。

基于Nvidia的显卡,我们可以采用Nvidia提供的Video Codec SDK进行开发。网上review了一下大家的解决方案,看到了Nvidia的另外一套解决方案,VPF(video processing framework)。详细的介绍大家可以参考这篇blog。有了VPF,我们可以用py愉快的进行视频编解码的操作了。

官方提供的文档和网上搜到的资料比较少,不过想想如果能用py来做硬解硬编,后续很多想法验证会比较方便一些。于是花了几小时的时间把win10平台上编译测试的坑给趟了一遍。

1、电脑配置

电脑配置

2、软件依赖项

(1)VPF版本:偷懒了,直接从官网的master版本拉的最新的。github链接,VPF-Github

(2)Video Codec SDK:Video\_Codec\_SDK\_11.0.10,可以去Nvidia的官网下载

(3)Nvidia驱动:456.71

(4)Cuda版本:11.1

(5)DirectX-SDK和Vulkan-SDK:直接官网下载的最新版

(6)eigen版本:3.3.9

(7)ffmpeg版本:直接下载最新的prebuilt library,下载链接

3、编译流程

编译我们用的CMake和VS-2017,简单步骤我就跳过了,直接上CMake-gui的截图:

cmake配置

编译总结一句话,哪里飘红配哪里。configure完事后,generate生成项目。用vs-2017打开项目,将INSTALL模块设置为启动项,然后生成INSTALL的解决方案就可以啦。

4、VPF代码验证

VPF会编译生成PytorchNvCodec.cp37-win\_amd64.pydPyNvCodec.cp37-win\_amd64.pyd两个pyd文件,后续python调用的时候会使用到。最后把相关的动态库拷贝到当前文件夹下就可以啦(你也可以加到path里,我懒),所有文件如图所示:

接下来我们测试一下SampleDecode.py这个代码,代码里只有解码的部分,没有显示的部分。我们对该代码进行小小的修改,让其将编码后的数据用opencv的py接口进行渲染。这里需要注意的是,解码的图片数据格式为NV12,NV12数据的尺寸为(W,H + H * 0.5),BGR的尺寸为(W,H)。opencv-python的默认渲染格式为BGR,所以我们这里以转化成BGR为例。最后是核心修改的代码片:

后续就可以美滋滋的用python接口使用Nvidia显卡进行硬编、硬解了,美滋滋。试了一下,速度hin快,一路视频GPU利用率增加3%左右(测试视频的分辨率较低),后续打算尝试一下2080 TI最多可以支持几路解码。

推荐阅读

专注嵌入式端的AI算法实现,欢迎关注作者微信公众号和知乎嵌入式AI算法实现专栏

WX20200305-192544.png
更多嵌入式AI相关的技术文章请关注极术嵌入式AI专栏

推荐阅读
关注数
16444
内容数
1228
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息