微短剧解决方案提供通过API进行视频剪辑(云剪辑)的能力。通过阅读本文,您可以了解微短剧视频剪辑(云剪辑)作业的基本API调用方法。
使用微短剧媒体云剪辑,请确保您已基本了解什么是云剪辑。详情参见云剪辑概述。
创建云剪辑工程
概述
视频剪辑(云剪辑)服务是视频点播的制作中心,支持剪切拼接、混音、字幕、图片叠加、遮标、转场特效等一系列功能,提供在线可视化的剪辑平台(控制台)及相应的OpenAPI。本文为您介绍云剪辑的系统架构、核心链路以及费用说明等。
接口说明
视频制作在整个视频链路(采集、制作、播放/互动、媒资管理)中具有非常重要的地位,将前期的采集拍摄和最终的分发播放连成一体,起着承前启后的作用。云剪辑服务就是视频点播的制作中心,支持剪切拼接、混音、字幕、图片叠加、遮标、转场特效等一系列功能。
云剪辑是一个云端一体的产品,包括前端组件/页面与后端服务两大部分。
云剪辑前端组件/页面
包括剪切、拼接、遮标、文字、调整顺序等组件或页面功能。具体操作,请参见视频剪辑。
后端服务
分为两部分内容:媒体合成服务和云剪辑工程管理服务。
您可以利用在线的云剪辑工具,对上传到点播媒资库的云端素材进行剪辑,提交合成;
也可以自行组织时间线数据,直接提交合成。
合成的新视频将存储到点播媒资库,您可以快速进行分发播放,无需再进行下载和上传的操作。
示例
调用AddEditingProject接口创建云剪辑工程,示例Demo如下:
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.vod20170321.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint 请参考 https://api.aliyun.com/product/vod
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
return new com.aliyun.vod20170321.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.vod20170321.Client client = Sample.createClient();
com.aliyun.vod20170321.models.AddEditingProjectRequest addEditingProjectRequest = new com.aliyun.vod20170321.models.AddEditingProjectRequest();
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
client.addEditingProjectWithOptions(addEditingProjectRequest, runtime);
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
微短剧使用云剪辑最佳实践
云剪辑Timeline示例
{
"VideoLayers": [{
"VideoLayerClips": [{
"MediaId": "xxx"
}]
}],
"SubtitleLayers": [{
"SubtitleLayerClips": [{
"FileUrl": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-subtitle.srt",
"SubType": "srt",
"Type": "Subtitle",
"Font": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-font.ttf",
"FontColor": "#ffffff",
"Y": 0.6927,
"FontSize": 75,
"Alignment": "TopCenter",
"TextWidth": 0.9,
"AdaptMode": "AutoWrapAtSpacesStrict",
"SubtitleEffects": [{
"Type": "Box",
"Color": "#000000",
"Opacity": 0.5,
"XBord": 10,
"YBord": 10,
"Radius": 15
}]
}]
}],
"FECanvas": {
"Height": 1920,
"Width": 1080
}
}
成片视频如下:
实践步骤如下:
vtt文件转srt文件
目前云剪辑字幕轨道中支持使用srt字幕同时设置字幕样式参数,如果您的字幕格式是vtt,需要使用FFMPEG做一下文件格式转换,转换命令如下:
ffmpeg -i example.vtt example.srt
之后可以在字幕轨道中传入字幕srt文件来设置字幕内容,Timeline如下所示:
{ "VideoLayers": [{ "VideoLayerClips": [{ "MediaId": "xxx" }] }], "SubtitleLayers": [{ "SubtitleLayerClips": [{ "FileUrl": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-subtitle.srt", "SubType": "srt", "Type": "Subtitle", "Font": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-font.ttf", "FontSize": 75 }] }] }
上传字体/字幕文件到点播
如果您使用的是点播系统Bucket,可以直接在控制台上传字幕/字体文件,也可以通过上传SDK上传辅助媒资;如果您使用的是自有OSS bucket,可以直接使用OSS SDK将您的字幕/字体文件上传到OSS以便进一步使用。
设置字幕样式
字幕轨道支持设置多种字幕样式来灵活实现短剧场景的各种功能,字幕参数如下:
名称
类型
描述
FontSize
Int
当字幕类型为横幅文字时,表示文字的字号。默认为0,最大支持设置到5000。
FontColor
String
当字幕类型为横幅文字时,表示文字的颜色,格式为#后跟16进制值。例如:#ffffff。
Alignment
String
当字幕类型为横幅文字时,用于设置定位对齐方式,默认为TopLeft,支持设置:
TopLeft:视频左上角
TopCenter:视频竖直中轴线上侧
TopRight:视频右上角
CenterLeft:视频水平中轴线左侧
CenterCenter:视频中心位置
CenterRight:视频水平中轴线右侧
BottomLeft:视频左下角
BottomCenter:视频竖直中轴线下侧
BottomRight:视频右下角
若需要在不同对齐方式下准确定位字幕位置,建议设置以下对齐方式:
Left,左对齐,X、Y传入字幕左上角顶点相对于视频左上角的坐标
Center,居中对齐,X、Y传入字幕中轴线上边界交点相对于视频左上角的坐标
Right,右对齐,X、Y传入字幕右上角顶点相对于视频左上角的坐标
AdaptMode
String
横幅文字当超出视频宽度或超出指定TextWidth时进行自动换行或缩放:
AutoWrap:自动换行
AutoScale:自动缩放
AutoWrapAtSpacesStrict:严格按照在空格位置自动换行(适用于纯英文字幕自动换行场景)
TextWidth
Float
字幕文本框宽度,当设置AdaptMode时生效。将按照该值设置文本框宽度进行自动换行或缩放。不填写时,会按照视频宽度进行自动换行或缩放。当值大于0小于等于1时,表示相对输出视频的宽度,当值大于1时,表示绝对像素值。
FontUrl
String
当字幕类型为横幅文字时,支持使用用户oss的字体文件路径来生成字幕,支持ttf、otf、woff三种格式的字体文件。例如:https://your-bucket.oss-cn-shanghai.aliyuncs.com/example-font.ttf
支持传入「OSS 外网 Endpoint 地址」或者「其它公网可以访问的地址」
SubtitleEffects
SubtitleEffect[]
当字幕类型为横幅文字时,表示文字多层效果。目前支持设置多层描边、多层阴影、高斯模糊效果(高斯模糊仅支持在类型为阴影时使用)和字幕背景效果。字幕圆角样式背景参考该字段细节
SubtitleEffects内支持设置多层描边、多层阴影、发光效果、字幕背景等多种样式,具体参数协议如下所示:
名称
类型
是否必填
描述
Type
String
是
-Outline:描边
-Shadow:阴影
-Box:字幕底框
Bord
Float
否
描边/阴影宽度或高度,当大于1时,表示像素值,当大于0小于1时,表示相对文字大小的宽度或高度。
XBord
Float
否
描边/阴影宽度,当大于1时,表示像素值,当大于0小于1时,表示相对文字大小的宽度,优先级高于Bord。
YBord
Float
否
描边/阴影高度,当大于1时,表示像素值,当大于0小于1时,表示相对文字大小的高度,优先级高于Bord。
Shift
Float
否
描边/阴影左右/上下偏移量,当绝对值大于1时,表示像素值,当绝对值大于0小于1时,表示相对文字大小的偏移量,支持设置负数,效果为向上/左偏移。
XShift
Float
否
描边/阴影左右偏移量,当绝对值大于1时,表示像素值,当绝对值大于0小于1时,表示相对文字大小的左右偏移量,优先级高于Shift。
YShift
Float
否
描边/阴影上下偏移量,当绝对值大于1时,表示像素值,当绝对值大于0小于1时,表示相对文字大小的上下偏移量,优先级高于Shift。
Color
String
否
RGB颜色,格式为#后跟16进制值。例如:#ffffff。
Opacity
String
否
不透明度,1为完全不透明,0为完全透明。
Blur
Float
否
高斯模糊范围,像素值,仅支持在Type=Shadow时使用,可以实现字幕外发光效果。
Radius
Float
否
文字纯色背景圆角半径,仅支持在Type=Box时使用,可以实现字幕背景圆角效果。
如果期望设置圆角背景,可以在字幕轨道中增加SubtitEffects,参考如下:
{ "VideoLayers": [{ "VideoLayerClips": [{ "MediaId": "xxx" }] }], "SubtitleLayers": [{ "SubtitleLayerClips": [{ "FileUrl": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-subtitle.srt", "SubType": "srt", "Type": "Subtitle", "Font": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/your-font.ttf", "FontSize": 75, "SubtitleEffects": [{ "Type": "Box", "Color": "#000000", "Opacity": 0.5, "XBord": 10, "YBord": 10, "Radius": 15 }] }] }] }