1. 概述
1.1 方案介绍
随着5G的发展,视频内容几乎成为了业务的标配,伴随着直播、短视频等场景的飞速发展,业务对视频生产的效率、质量也越来越高。
智能媒体生产ICE(Intelligent Cloud Editing)是2021年5月正式商业化的一款云产品,主打视频生产能力,通过组织剪辑需要的时间线结构,即可在云端对用户的音视频素材进行剪辑,可以理解ICE就是一款API版的iMovie。
本篇从常见需求入手,介绍如何使用ICE将OSS上的音视频文件,剪辑成想要的内容。
1.2 目标读者
业务场景中需要对音视频文件做剪辑(裁剪、拼接、加字幕贴纸、ASR识别、文字转语音等)的开发者,且音视频素材存储在阿里云对象存储OSS。
1.3 相关概念
1、时间线Timeline
用过Premiere或iMove的同学肯定对这个界面不陌生,这是一个剪辑工程,可以将多个图文、音视频素材合成为一个视频。一个剪辑工程通常会包含多个轨道,每个轨道包含多个片段(音视频、图片、字幕等),片段之间可能还会有转场、特效。我们能用一个数据结构来清晰的描述他,在ICE中,我们称之为Timeline。用户组装好一个Timeline,就可以提交剪辑任务合成视频了。
2、OSS地址
ICE Timeline可以直接使用对象存储OSS上的音视频文件作为素材。引用素材的OSS地址即可,OSS地址格式:http://[bucket].oss-[region].aliyuncs.com/[object].mp4
。地址中包含了Bucket、Region、Object信息,使用的OSS素材和ICE区域必须在相同region。
1.4 产品优势
1、高并发+高性能
智能媒体生产ICE依托于媒体处理服务MPS,可以从容应对高并发、大文件、实时性高的业务场景。针对很多长视频场景,ICE也做了合成速度优化。
2、低成本
自建剪辑服务成本高,针对一些低频的剪辑场景,自建服务投入产出比极低。
ICE依据成片时长计费,用户即用即取,且能保证高性能和高可用性。
3、参数简单+易上手
我们可以使用ffmpeg做基础的音视频剪辑,但当需求越来越复杂,特别是多轨合成时,ffmpeg命令就会变的越来越难懂,越来越难维护。ICE的Timeline符合大家对剪辑工程的理解,Json格式,直观易懂,能完整表达多样复杂的剪辑场景,易于扩展。同时,ICE还对很多场景做了Timeline简化,用户不用拼完整的Timeline参数,由ICE进行补全。
举个例子:
比如我们要把两个10秒的视频拼接起来,在剪辑中的完整描述应该是把第一个视频的0~10秒放到轨道的0~10秒,把第二个视频的0~10秒放到轨道的10~20秒。但在ICE中提交合成时,用户无需设置视频的出入点、尺寸等信息,ICE会在合成过程中自动获取视频的Duration并进行合成。
如下,简化后的Timeline更一目了然,用户可以更多关注在关键字段上。
这是一段完整的提交剪辑任务的代码:
String timeline = "{\"VideoTracks\":[{\"VideoTrackClips\":[{\"MediaURL\":" +
"\"http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4\",\"Out\":10}]}]}";
String mediaURL = "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-output.mp4";
String outputMediaConfig = "{\"MediaURL\":\"" + mediaURL + "\",\"Width\":1280,\"Height\":720}";
SubmitMediaProducingJobRequest request = new SubmitMediaProducingJobRequest();
request.setTimeline(timeline);
request.setOutputMediaConfig(outputMediaConfig);
iceClient.submitMediaProducingJob(request);
Timeline是剪辑工程的描述,OutputMediaConfig是成片的输出信息,如:目标OSS地址、尺寸、码率等。尺寸和码率也可以不填,ICE根据用户输入素材进行推测。当任务执行完后,视频就合成完了。可以查看提交合成作业接口文档,查看更多参数配置。
接下来从一些常见场景入手,列举ICE Timeline中常用参数
2. 常见剪辑场景
2.1 截取片段
截取视频5~10s的部分,合成为一个新视频。
注意
如果设置的Out超过了视频时长,则实际的Out以视频时长为准
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"In": 5,
"Out": 10
}
]
}
]
}
2.2 保留片头剪切
保留片头剪切指仅设置出点,不设置入点,即入点从0开始。截取视频的前10秒。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"Out": 10
}
]
}
]
}
2.3 去掉部分片段
即把视频的10s前和15s后的部分拼接起来,最终成片是原片去掉了10~15s的部分。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"Out": 10
},
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"In": 15
}
]
}
]
}
2.4 整段视频合成
整段合成指多段视频直接拼接。将两个视频完整顺序相接,整段合成,此时不用指定视频的入出点。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video1.mp4"
},
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video2.mp4"
}
]
}
]
}
2.5 多段视频截取任意区间合并
可以指定多个视频的多段区间进行剪切合并,截取第一段视频的5~10s,和第二段视频的3~7s,片段合并的顺序按照数组的先后顺序首尾相接。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video1.mp4",
"In": 5,
"Out": 10
},
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video2.mp4",
"In": 3,
"Out": 7
}
]
}
]
}
2.6 视频整体静音
整体静音指将视频资源中的声音进行整体消除,即静音操作。如下示例中使用了针对音频的Volume Effect。Gain的含义是音量增益,值为0表示静音。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"Effects": [
{
"Type": "Volume",
"Gain": "0"
}
]
}
]
}
]
}
2.7 指定区间静音
指定区间静音与视频整体静音的参数相比,增加了针对Volume Effect进行的入出点参数的设置。对视频的第8秒到第60秒的区间进行静音,视频的剩余部分维持原始音量不变,示例如下:
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"Effects": [
{
"Type": "Volume",
"Gain": 0,
"In": 8,
"Out": 60
}
]
}
]
}
]
}
2.8 视频静音+完整音频混音
视频静音+完整音频混音指将原视频静音后重新配音,合成新的视频,是一个典型的配音场景。
所有与音频处理相关的Clip都放入AudioTrack。TimelineIn设为5,表明该音频在输出视频的第5秒开始叠加。TimelineOut不设,则默认为整段音频都将进行混流,如果音频的尾部超过了视频轨的总时长,则将对音频进行截断,播放到视频轨的尾部。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
"Effects": [
{
"Type": "Volume",
"Gain": "0"
}
]
}
]
}
],
"AudioTracks": [
{
"AudioTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-audio.mp3",
"TimelineIn":5
}
]
}
]
}
以上的场景都比较简单,接下来演示几个稍微复杂的Timeline
3. 短视频常见功能
我们在短视频中经常见到贴纸、横幅字幕,在ICE中也很容易实现。同时ICE的Timeline也做了智能能力的集成,可以把剪辑和智能能力无缝拼接,接下来就列举一下短视频中常用的剪辑场景。
3.1 添加字幕
支持设置字幕颜色、字体、描边、阴影,以及字幕动画。
{
"VideoTracks": [{
"VideoTrackClips": [{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video4.mp4"
}]
}],
"SubtitleTracks":[
{
"SubtitleTrackClips":[
{
"Type":"Text",
"X": 0,
"Y": 210,
"Font": "WenQuanYi Zen Hei Mono",
"Content": "这里是副标题",
"Alignment": "TopCenter",
"FontSize": 50,
"FontColor": "#000000",
"TimelineIn": 0,
"TimelineOut": 10,
"OutlineColour": "#ffffff",
"Outline": 2,
"FontFace": {
"Bold": false,
"Italic": false,
"Underline": false
}
},
{
"Type":"Text",
"X": 0,
"Y": 270,
"Font": "WenQuanYi Zen Hei Mono",
"Content": "这里是标题",
"Alignment": "TopCenter",
"OutlineColour": "#000000",
"Outline": 3,
"FontSize": 70,
"TimelineIn": 0,
"TimelineOut": 10,
"FontColor": "#ffffff",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
},
{
"Type": "Text",
"Y": 750,
"Font": "AlibabaPuHuiTi",
"Content": "这里是大标题",
"Alignment": "TopCenter",
"FontSize": 100,
"FontColor": "#FFD700",
"Outline": 4,
"OutlineColour": "#000000",
"TimelineIn": 0,
"TimelineOut": 10,
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
},
{
"Type": "Text",
"Y": 850,
"Content": "自定义字体文件",
"Font": "KaiTi",
"FontSize": 42,
"Outline": 2,
"OutlineColour": "#ee00ff",
"FontUrl":"https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_font.ttf",
"TimelineIn": 0,
"TimelineOut": 10,
"Alignment": "TopCenter",
"FontColor": "#000000",
"FontFace": {
"Bold": false,
"Italic": false,
"Underline": false
}
},
{
"Type": "Text",
"Y": 900,
"Font": "WenQuanYi Zen Hei Mono",
"Content": "阴影效果",
"FontColor": "#ffffff",
"FontSize": 40,
"Outline": 2,
"OutlineColour": "#DB7093",
"Shadow": 3,
"BackColour": "#FFF0F5",
"TimelineIn": 0,
"TimelineOut": 10,
"Alignment": "TopCenter",
"FontFace": {
"Bold": false,
"Italic": false,
"Underline": false
}
},
{
"Type": "Text",
"Y": 980,
"Font": "WenQuanYi Zen Hei Mono",
"Content": "添加字幕动画",
"FontColor": "#ffffff",
"FontSize": 50,
"TimelineIn": 0,
"TimelineOut": 10,
"Alignment": "TopCenter",
"AaiMotionLoopEffect": "rollleft_display",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
}
]
}
]
}
3.2 添加Gif贴纸
支持设置贴纸坐标、开始结束时间。
{
"VideoTracks": [{
"VideoTrackClips": [{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video1.mp4"
},{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video2.mp4"
},{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video3.mp4"
}]
},{
"VideoTrackClips": [{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_sticker1.gif",
"Type": "image",
"Duration": 10,
"TimelineIn": 0,
"DyncFrames": 10,
"X": 50,
"Y": 1300,
"Effects": [{
"Type": "Scale",
"Width": 200,
"Height": 200
}]
},{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_sticker2.gif",
"Type": "image",
"Duration": 10,
"TimelineIn": 10,
"DyncFrames": 10,
"X": 800,
"Y": 400,
"Effects": [{
"Type": "Scale",
"Width": 200,
"Height": 200
}]
},{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_sticker3.gif",
"Type": "image",
"Duration": 10,
"TimelineIn": 20,
"DyncFrames": 10,
"X": 100,
"Y": 400,
"Effects": [{
"Type": "Scale",
"Width": 200,
"Height": 200
}]
}]
}]
}
3.3 ASR语音识别
AI_ASR作用在一个片段中,可根据业务需求对Timeline中的多个视频片段进行语音识别。
也可给音频轨添加AI_ASR效果, 同步设置字幕的样式,如字体、颜色等,参数详见Effect Type:AI_ASR。
{
"VideoTracks": [{
"VideoTrackClips": [{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video7.mp4",
"Effects": [{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "TopCenter",
"Y": 910,
"Outline": 10,
"OutlineColour": "#ffffff",
"FontSize": 60,
"FontColor": "#000079",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
}]
}]
}]
}
3.4 文字转语音
添加音频片段,设置Type为AI_TTS,Content为要转化的文字,即可进行文字转语音,并合成到视频中。
可以设置Voice、SpeechRate、PitchRate、Format等,参数详见音频轨素材直接由文字转化生成。
可以在一个合成中使用多个AI_TTS的音频Clip,也可与AI_ASR共用,将生成的语音转换为字幕,合成到视频中。
{
"VideoTracks": [{
"VideoTrackClips": [{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your_video3.mp4",
"Effects": [{
"Type":"Volume",
"Gain":0
}]
}]
}],
"AudioTracks": [{
"AudioTrackClips": [{
"Type": "AI_TTS",
"Content": "君不见黄河之水天上来,奔流到海不复回。君不见高堂明镜悲白发,朝如青丝暮成雪。",
"Voice": "sicheng",
"Effects": [{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "TopCenter",
"Y": 900,
"FontSize": 80,
"FontColor": "#ffffff",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
},{
"Type":"Volume",
"Gain":10
}]
}]
}]
}
4. 总结
虽然ICE上线还不到一年,但已经历了数十种客户真实场景的考验。依托于媒体处理服务MPS,智能媒体生产ICE可以从容应对高并发、大文件、实时性高的业务场景,在智能能力、合成速度、特效等核心能力上,我们也在不断打磨优化,在内容视频化的大趋势中,智能媒体生产ICE将为客户创造更大的价值。
以上时间线都比较简单,但都是业务中常见的需求,ICE还可以满足更多更复杂的场景,欢迎加入智能媒体生产ICE官方答疑群咨询交流
欢迎访问官方文档查看更多示例: