智能媒体生产 ICE 使用及实战|学习笔记

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 快速学习智能媒体生产 ICE 使用及实战

开发者学堂课程【视频云技术入门-1024程序员节创造营公益课智能媒体生产 ICE 使用及实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/902/detail/14332


智能媒体生产 ICE 使用及实战


目录:

一,时间线简介

二,Timeline 数据结构

三,制作卡点相册

四,代码实战

 

一, 时间线简介

时间轨道:

Track(轨道)

轨道是多个素材片段按照一定顺序组成的序列,轨道类型包含视频轨、音频轨、字幕轨,每种轨道可以包含多条,按照层叠顺序

福益,多条轨道可以同时播放。

Clip(素材片段)

Clip 是对一个片段的描述,标注了一个素材在时间线上的位置,在画布中的坐标、尺寸等信息。

Effect(特效)

特效包括转场、滤镜、特效,一个 Clip 可以包含多个 Effect。

 

二,Timeline 数据结构

VideoTrackClip

Type: lmage

关键信息:Duration、Timelineln、TimelineOutx、 Y、 Width、Height

Type: Video

关键信息:In、Out、Timelineln、TimelineOutx、 Y. Width、Height

SubtitleTrackClipType: Subtitle

关键信息:FileURL

AudioTrackClip

关键信息:MediaURL/Medialdln、Out、Timelineln、TimelineOut

Effect

关键信息:Type.Timelineln、TimelineOut

 

三,制作卡点相册

时间线分析:

视频轨

由多张图片组成的 Clip 序列,每个 Clip 按照顺序恰好落在节拍的开始结束。

音频轨

音频轨只有一个 Clip,即带节奏的背景音乐。

制作流程:

第一步:获取节奏信息

调用 SubmitlProductionJob 接口,提交节奏检测任务

调用 QuerylProductionJob 接口,获取任务状态,等待任务执行完成

第二步:封装时间线

读取智能任务结果

据节奏信息封装时间线

第三步:合成视频

调用 SubmitMediaProducingJob 接口,提交剪辑合成任务

调用 GetMediaProducingJob,等待合成任务完成

获取音乐节奏信息

提交智能生产作业 SubmitMediaProducingJob

参数名称

示例值

FunctionName

AudioBeatDetection(节奏检测)

lnput

oss://your-bucket.oss-cn-shanghai.aliyuncs.com/music.mp3

Output

oss://your-bucket.oss-cn-shanghai.aliyuncs.com/output.txt

输出:Jobld

查询智能生产作业 QuerylProductionJob

参数名称

示例值

Jobld

******85f8cf40c086daf6e971******

输出:Job 信息(包含智能任务结果)

封装时间线:

从音乐节奏信息到时间线

音乐节奏信息如下

{

“result" :"success"",

“BeatList":[ 0.04", "o.82", "1.61",“2.38",

-3.17."3.96","4.74",”5.53"~..].

“DownBeatList": [ "o.04", ""3.17-, "6.3".

-9.42-,“12.56-, -i5.7-.“18.83- ..]

}

时间线信息如下

{

“videoTracks" : [ {

"vidcoTrackciips" : [ {

MediauRE": "https : //your-bucket.oss=Cn-shanghai.aliyuncs.com/image.jpg","Type": "Image".

" Duration": -o.04”},{

""MediaURL":"https://your-bucket.oss-cn-shanghai.aliyuncs.com/image.jpg",“Type": “Image"".

-Duration-: -0.82”},{

""MediaURL": "https: //your-bucket.oss=Gn-shanghai.aliyuncs.com/image.jpg"“Type":“工mage".

Duration-:“ 1.61”},{

""MediaURL": "https: /lyour-bucket.oss=Cn-shanghai.aliyuncs.com/image.jpg","Type" : Image"".

Duration-: " 2.38-

1

1,

AudioTracks": [{

AudioTrackciips": [ {

"MediaURL": "https: //your-bucket.oss=Cn-shanghai.aliyuncs.com/music.mp3"

}]

}]

}

合成视频

提交剪辑合成作业 SubmitMediaProducingJob

参数名称

示例值

Timeline

{"VideoTracks":[...],"AudioTracks":[...]}

OutputMediaConfig 

{"MediaURL"."https://your-bucket.oss-cn-shanghai.aliyuncs.com/video.mp4"}

输出: Jobld 

查询剪辑合成作业 GetMediaProducingJob

参数名称

示例值

Jobld

****** 85f8cfA0r086daf6e971******

输出: Job 信息

添加转场效果

 

四,代码实战

第一步:提交节奏检测任务

//提交节检测任务

com.aliyun.mts20140618.Client client = createMpsClient();

SubmitIProductionJobRequest = new SubmitIProductionJobRequest();submitIProductionJobRequest.setFunctionName("AudioBeatDetection");

submitIProductionJobRequest.setInput("oss:;//oushu-test-shanghai.oss-cn-shanghai.alixunes.con/test.media/luffoato. VansinJapan.mp8 ) ;

submitIProductionJobRequest.setlutput( "oss://oushu-test-shanghai.oss-cn-shanghai.alixwncs.col/ionoduatico/isource)-{timestamp;.t )SubmitIProduction3obResponse submitIProductionJobResponse = cient.submitIProductionJob(submitIProdvctionJobRoquest);

//等任务完成

String jobId = submitIProductionJobResponse.body.jobId;String result;

while (true) {

QueryIProductionJobRequest = new QueryIProductionJobRequest();queryIProductionJobRequest.setJobId(jobId);

QueryIProductionJobResponse = client.queryIProduction.Job(queryIProductionJobRequest);System.out . println( "out : " +JSONObject.to3SONString(queryIProductionJobResponse.body));

if ("Success".equals(queryIProductionJobResponse.body.state)){

result = queryIProductionJobResponse.body.result;

break;

}

Thread.sleep( millis: 5888);

} 

第二步:根据节奏点的任务拼装出时间线

//获取节检测任务结果

string file = 130M0boject.,parseCbiject(00Mbject.yausebfjetoneslt).,gtString( toy "nat '. etoNSoMAray( twy "'renot ).getosSoDbject( inox a,).pestrung、 nl"ne ,;System.out.println( ""result file :" +file);

String resultcontent = get0bjectcontent(file);

System.out.println("result content : " +resultContent);

JSONArray beatList = 3SONObject.parseObject(resultContent).getJSONArray( key:"BeatList");

//封装时间线

String[] imageUrls = new String[]{

"httos://oushu-test-shanghai.oss-cn-shanghai.aliyuncs.com/test media/pno_pic1/1.ina"."https://oushu-test-shanghai.oss-cn-shanghai.aliyuncs.com/test_media/pro.pic1/3.jpg"."httos:l/oushu-test-shanghai.oss-cn-shanghai.aliyuncs.com/test media/pro pic1/6.jng".,httos:L/oushu-test-shanghai.oss-Cn-shanghai.aliyuncs.com/test media/pro pic1/7.1ipna","httos://oushu-test-shanghai.oss-cn-shanghai.aliyuncs.com/test media/pro pic1/8.ing","https://oushu-test-shanghai.oss-cn-shanghai.aliyuncs.com/test.media/pro.pic1/10.jp9","https:Lloushu-test-shanghai.oss-Cn-shanghai.aliyuncs.com/test medialpro pic1/13.jpg",

;

JSONArray videoTrackClips = new JSONArrayO;float transitionDur =0.3f;

for (int i =0;i< imageUrls.length; i++){

String url = imageUrls[il;

JSONObject obj = new JSONObjectO;

String duration = beatList.getString(i);obj.put( "MediaURL",url);

obj.put("Duration",Float.parseFloat(duration)+ transitionDur);obj.put("Type", "Image");

if (Float.parseFloat(duration) > transitionDur)i

obj.put("Effects",JSOMAIvay.panse(taxc “"[('Typel':Transition" , "SubTypel:'gneayzo.m(",  Duration)':" + transitionDu + })'>);

}

videoTrackClips.add(obj);

}

strtng tlmeLne = " (lVldoiracks):4(1 YdoincLiosl" " + vlooirocuios .tousNStelng() + ")],AMAudtofracks)" !fi1M wudoTraekCALpos " ![4/"MctoURL :/'ittosllushv-toSystem.out.println( "timeline : " +timeline);

}

第三步;拼装时间线合成任务

//提交合成任务

SubmitNediaProducingJobRequest submitNediaProducing3obRequest = new SubmitNediaProducing3obRequest();submitHediaProducingJobRequest.setTimeline(timeline);

String outpiptPath = IceUtil.getRandomoutputPathO;

String mediaURL = "https://oushu-test-shanghai.oss-cn-shanghai.aliyuncs .com/" + outputPath + ".mp6";

submitHNediaProducingJobRequest.setoutputNediaConfig(" A "NediaURLA": ""+mediaURL +"V , "Iiath\":1280, "Hedght\":720) ");client iceclient = TestclientInstance.getInstance().getIceclient(;

$ubnitlediaProducingpJobResponse subwitlediaProdcingJobResponse = iceCLient.submitNediaProdvcingJob(submithediaProdvcinglobRequest);

Systen ovt.p intu( fjo crate ,jold : ' o* sutaithdiolProducingloblesyos.boy .j oud  ", nwepnstid : " + stbitlediaProdvein otbespons.oy.getileoustd()  , med.

//等待合成任务完成

while (true){

GetWediaProducingJobRequest getMediaProducingJobRequest = new GetHediaProducingJobRequest();getNediaProducingJobRequest.setJobId(submitHediaProducingJobResponse.body.jobId);

GethediaProducingJobResponse getlediaProdvcing.obResponse m iceCLient. gethediaProducingJob(getMediaProducingJobRequest)System.out.pointin(“GetMediaProducingJobResponse : " + JS0NObject.to.7sONString( getMediaProdvcingJobResponse.body>);

String status = getHediaProducingJobResponse.getBody().getHediaProducingJob().getStatus();

if(""Success".equals(status)){

break;

,

Thread.sleep( millise :5888);

}

system.out.println("Produce succeed :" + mediaURL);

}

 

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
相关文章
|
SQL 安全 算法
【惊险揭秘】Django高手的十大安全秘籍:如何从零构建坚不可摧的Web堡垒?
【8月更文挑战第31天】《Django安全性指南:构建安全Web应用的十大关键步骤》介绍了在使用Django框架开发Web应用时,如何通过十个关键步骤提升应用安全性。从使用HTTPS、设置CSRF保护到限制密码复杂度、防止SQL注入,文章详细阐述了每一步的具体实施方法及示例代码,帮助开发者构建更加安全可靠的Web应用。
246 0
|
10月前
|
测试技术 Python
将秒换算成时、分、秒
本文介绍了使用Python将总秒数转换为小时、分钟和秒的格式的方法,包括定义转换函数和格式化输出函数,并提供了完整的代码实现及测试用例,帮助用户更友好地展示时间信息。
450 59
|
12月前
|
NoSQL Linux Redis
在 centos7 下重启/开启 redis 服务器
本文提供了一种在Centos 7操作系统下如何重启Redis服务器的步骤,包括停止Redis服务、确认停止成功以及重新启动Redis服务。
1021 2
在 centos7 下重启/开启 redis 服务器
|
机器学习/深度学习 自然语言处理 算法
视频字幕自动生成
8月更文挑战第12天
635 2
|
机器学习/深度学习 编解码 自然语言处理
视频字幕生成案例
8月更文挑战第3天
666 0
|
机器人
北大推出全新机器人多模态大模型!面向通用和机器人场景的高效推理和操作
【6月更文挑战第29天】北京大学研发的RoboMamba是新型机器人多模态大模型,融合Mamba SSM的高效推理与视觉编码器,提升复杂任务处理能力。通过微调策略,仅用少量参数即可快速习得操作技能,实现在通用及机器人场景的高效运行,推理速度提升7倍。尽管面临泛化和可解释性挑战,RoboMamba展示了多模态模型的新潜力。[论文链接:](https://arxiv.org/abs/2406.04339)
295 1
|
存储 前端开发 区块链
常见的 EVM 版本以及它们的区别
常见的 EVM 版本以及它们的区别
262 5
|
关系型数据库 MySQL 数据安全/隐私保护
mysql安装教程8.0.35
mysql安装教程8.0.35
|
存储 小程序 API
oss防盗链设置(Referer Configuration)
oss防盗链设置(Referer Configuration)
2572 5