云剪辑

微短剧解决方案提供通过API进行视频剪辑(云剪辑)的能力。通过阅读本文,您可以了解微短剧视频剪辑(云剪辑)作业的基本API调用方法。

说明

使用微短剧媒体云剪辑,请确保您已基本了解什么是云剪辑。详情参见云剪辑概述

创建云剪辑工程

概述

微短剧云剪辑是一项基于云端的视频剪辑服务,提供视频剪切拼接、混音、字幕、图片叠加、遮标、转场特效等功能。您可以通过在线可视化剪辑平台(控制台)或OpenAPI进行操作,实现快速高效的视频制作和发布。

解决的问题

微短剧云剪辑解决了以下问题:

  1. 视频素材管理:无需下载和上传操作,直接在云端进行视频剪辑。

  2. 多功能剪辑:支持多种剪辑功能,满足不同制作需求。

  3. 高效合成:快速合成新视频并存储到点播媒资库,方便分发播放。

基本流程

短剧制作人,为了能够快速高效地完成视频的剪辑和发布,决定通过云剪辑,可以在不下载视频素材的情况下,直接在云端进行剪辑操作,包括视频剪切拼接、混音、添加字幕、图片叠加、遮标、转场特效等功能。这提高了工作效率,同时也简化了视频素材的管理流程。

  1. 上传原片:

    1. 如果您使用的是点播系统Bucket,可以直接在控制台上传字幕/字体文件,也可以通过上传SDK上传辅助媒资;如果您使用的是自有OSS bucket,可以直接使用OSS SDK将您的字幕/字体文件上传到OSS以便进一步使用。

      1726729079525-83df04d1-6d0b-4cef-8128-65cdddb501a7.png

  2. 添加字幕:云剪辑支持srt格式字幕文件,并提供多种样式设置。如果您的字幕格式是vtt,需要使用FFMPEG进行文件格式转换:

    ffmpeg -i example.vtt example.srt

    以下是字幕样式参数示例:

    {
      "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
                }
              ]
            }
          ]
        }
      ]
    }

    字幕轨道支持设置多种字幕样式来灵活实现短剧场景的各种功能,字幕参数如下:

    名称

    类型

    描述

    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时使用,可以实现字幕背景圆角效果。

    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
    	}
    }
  3. 生成成片:通过云剪辑工具或API进行视频剪辑,合成新视频并存储。

    使用AddEditingProject接口创建云剪辑工程,以下是示例代码:

    package com.aliyun.sample;
    import com.aliyun.tea.*;
    
    public class Sample {
        public static com.aliyun.vod20170321.Client createClient() throws Exception {
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            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 {
                client.addEditingProjectWithOptions(addEditingProjectRequest, runtime);
            } catch (TeaException error) {
                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);
                System.out.println(error.getMessage());
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }
        }
    }

    合成的新视频将存储到点播媒资库,您可以快速进行分发播放。