使用智能媒体生产ICE剪辑OSS视频文件

简介: 本篇介绍智能媒体生产ICE一些常见场景,如裁剪、拼接、字幕、ASR等,通过一些时间线示例,介绍如何快速剪辑OSS上的视频文件。


1. 概述

1.1 方案介绍

随着5G的发展,视频内容几乎成为了业务的标配,伴随着直播、短视频等场景的飞速发展,业务对视频生产的效率、质量也越来越高。

智能媒体生产ICE(Intelligent Cloud Editing)是2021年5月正式商业化的一款云产品,主打视频生产能力,通过组织剪辑需要的时间线结构,即可在云端对用户的音视频素材进行剪辑,可以理解ICE就是一款API版的iMovie。

本篇从常见需求入手,介绍如何使用ICE将OSS上的音视频文件,剪辑成想要的内容。

image.png

1.2 目标读者

业务场景中需要对音视频文件做剪辑(裁剪、拼接、加字幕贴纸、ASR识别、文字转语音等)的开发者,且音视频素材存储在阿里云对象存储OSS。

1.3 相关概念

1、时间线Timeline

用过Premiere或iMove的同学肯定对这个界面不陌生,这是一个剪辑工程,可以将多个图文、音视频素材合成为一个视频。image.png一个剪辑工程通常会包含多个轨道,每个轨道包含多个片段(音视频、图片、字幕等),片段之间可能还会有转场、特效。我们能用一个数据结构来清晰的描述他,在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命令就会变的越来越难懂,越来越难维护。image.pngICE的Timeline符合大家对剪辑工程的理解,Json格式,直观易懂,能完整表达多样复杂的剪辑场景,易于扩展。同时,ICE还对很多场景做了Timeline简化,用户不用拼完整的Timeline参数,由ICE进行补全。

举个例子:

比如我们要把两个10秒的视频拼接起来,在剪辑中的完整描述应该是把第一个视频的0~10秒放到轨道的0~10秒,把第二个视频的0~10秒放到轨道的10~20秒。但在ICE中提交合成时,用户无需设置视频的出入点、尺寸等信息,ICE会在合成过程中自动获取视频的Duration并进行合成。

如下,简化后的Timeline更一目了然,用户可以更多关注在关键字段上。image.png

这是一段完整的提交剪辑任务的代码:

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以视频时长为准

image.png

{
    "VideoTracks": [
        {
            "VideoTrackClips": [
                {
                    "MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
                    "In": 5,
                    "Out": 10
                }
            ]
        }
    ]
}

2.2 保留片头剪切

保留片头剪切指仅设置出点,不设置入点,即入点从0开始。截取视频的前10秒。

image.png

{
    "VideoTracks": [
        {
            "VideoTrackClips": [
                {
                    "MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/your-video.mp4",
                    "Out": 10
                }
            ]
        }
    ]
}

2.3 去掉部分片段

即把视频的10s前和15s后的部分拼接起来,最终成片是原片去掉了10~15s的部分。

image.png

{
    "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 整段视频合成

整段合成指多段视频直接拼接。将两个视频完整顺序相接,整段合成,此时不用指定视频的入出点。

image.png

{
    "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,片段合并的顺序按照数组的先后顺序首尾相接。

image.png

{
    "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官方答疑群咨询交流

image.png

欢迎访问官方文档查看更多示例:

短视频常用功能

作者介绍
目录