根据进阶班作业贴:【CANN训练营2022年度第一季】【进阶班】【媒体数据处理精讲与实战】课程资源及作业发布专用帖_昇腾论坛_华为云论坛
大作业2题目如下:
开发媒体数据处理的应用,应用的输入为视频码流、输出为 JPEG 图片,且 JPEG 图片与视频的分辨率不同。
根据作业提示,转换的思路如下:
原始MP4视频=》H264/H265视频=>使用dvpp的vdec解码成yuv图片(多张)-》使用dvpp的进行resize缩放-》使用dvpp的jpege将yuv图片编码=》JPEG图片(多张)
下面看看如何实战:
一、准备MP4视频文件
先去搞个MP4过来。
张小白手头有一个:黑寡妇.2021.BD1080p.中英双字.mp4
打开格式工厂FormatFactory官网:
http://www.pcfreetime.com/formatfactory/CN/index.html

下载,安装:

耐心等待安装完毕:

点击下一步:

点击立即体验:

进入主页面:

点击->MP4

点击添加文件,选择刚才的MP4文件。

点击右上角的输出配置:
可以看到视频编码为 H264,这种格式按理说 dvpp是能解析的吧。。

由于影片长达2个多小时,只截取1分钟的片段,点击文件右边的“选项”按钮:

根据预览画面,选中 31:18到32:18之间的影像进行剪辑:

点击确定:

点击页面中的开始,进行转换:

很快就转换成功了。
打开MP4文件看看:

确实是1分钟时长。且可以播放。
那么H264格式的视频已经准备好了。我们可以试vdec,看看能不能解出成YUV吧。
二、视频解码VDEC的样例尝试
接着我们来看dvpp的vdec的文档:

按理说刚才做好的1分钟视频是应该支持的。到底行不行呢?
再看看具体说明:昇腾社区-官网丨昇腾万里 让智能无所不及

这个图的流程示意很清楚了,下面也有具体的解释,就不一一说明了。大概的意思是:
循环处理输入视频流,调用aclvdecSendFrame进行视频解码,然后判断是否触发回调。一直到视频流结束为止。
查看对用的sample仓代码吧:samples: CANN Samples - Gitee.com
主代码在此:
cplusplus/level2_simple_inference/0_data_process/vdec/src/main.cpp · Ascend/samples - Gitee.com
我们编译试试:
cd /home/HwHiAiUser/samples/cplusplus/level2_simple_inference/0_data_process/vdec
cd scripts
bash ./sample_build.sh

记住,现在编译的样例代码。
运行样例代码试试:
bash ./sample_run.sh

去output目录看看:

本文详细记录了从MP4视频文件转换为JPEG图片的完整过程,涉及视频解码(VDEC)、图像缩放(RESIZE)和编码(JPEGE)。通过ffmpeg转换MP4为H264流,然后使用DVPP的VDEC进行解码,生成YUV图片,接着调整代码实现每一帧保存为单独的H264文件,最后通过VDEC、RESIZE和JPEGE处理得到不同分辨率的JPEG图片。整个过程中,遇到并解决了文件重复、分辨率不匹配等问题。
最低0.47元/天 解锁文章
714

被折叠的 条评论
为什么被折叠?



