基于客户真实使用场景的云剪辑Timeline问题解答与代码实操

本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第6期,从客户真实实践场景出发,分享一些Timeline小技巧(AI_TTS、主轨道、素材对齐),助力客户降低开发时间与成本。

欧叔|作者

故事的开始要从一条客户的真实反馈说起。

Round 1:视频比音频长,怎么办?

某天,一位客户加入了智能媒体服务答疑群,想要实现一个短视频效果,发生了以下对话:

上图链接:

help.aliyun.com/document_de...

help.aliyun.com/document_de...

在阿里云智能媒体服务IMS云剪辑中,客户通常会编辑一个Timeline来提交剪辑任务,合成自己想要的视频。在Timeline中有一个「AI_TTS」功能,方便客户为自己的视频搭配口播讲解。

这个功能在短视频合成中十分常见,比如需要给一个探店视频搭配一段广告词,或是给一个产品外观视频搭配一段产品介绍。使用时,客户只需要在音频轨道添加一个片段,设置上口播的文本内容和口播音色 就好了。在实际合成中,引擎会先做语音合成,再把语音合成的结果合成到成片里,整个过程客户只需要调用一次剪辑任务就可以。

但在实际使用中,仍会遇到一些效果问题,例如上面客户遇到的问题:

客户在合成前,不知道口播文案需要读取的时间,在搭配视频时,就不能很好地控制视频轨的时长:

最终合成的成片可能会有结尾黑帧、口播结束但视频还在播的现象,这是客户合成的Badcase效果,口播结束了,视频还在继续播放。

云剪指南第6期示例视频1

Timeline示例:

JSON 复制代码
{
  "VideoTracks": [{
    "VideoTrackClips": [{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f1.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f2.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f3.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f4.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f5.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f6.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f7.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f8.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    }]
  }],
  "AudioTracks": [{
    "AudioTrackClips": [{
      "Type": "AI_TTS",
      "Content": "人们懂得用五味杂陈形容人生,因为懂得味道是每个人心中固守的情怀。在这个时代,每一个人都经历了太多的苦痛和喜悦,人们总会将苦涩藏在心里,而把幸福变成食物,呈现在四季的餐桌之上",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }]
  },{
    "AudioTrackClips": [{
      "MediaUrl": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/music/m1.wav"
    }]
  }]
}

主轨道 功能就是来解决这一问题,当客户把一个轨道设置为主轨道后,时间线中的其他轨道就会根据主轨道来截断,在上面的示例中,客户可以把口播轨道设置为主轨道,把视频轨素材填的足够长,最后根据主轨道截断后,就不会有黑帧或结尾不对齐的现象了。

使用了主轨道的效果:

云剪指南第6期示例视频2

Timeline示例(注意MainTrack=true参数):

JSON 复制代码
{
  "VideoTracks": [{
    "VideoTrackClips": [{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f1.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f2.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f3.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f4.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f5.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f6.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f7.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f8.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    }]
  }],
  "AudioTracks": [{
    "MainTrack": true,
    "AudioTrackClips": [{
      "Type": "AI_TTS",
      "Content": "人们懂得用五味杂陈形容人生,因为懂得味道是每个人心中固守的情怀。在这个时代,每一个人都经历了太多的苦痛和喜悦,人们总会将苦涩藏在心里,而把幸福变成食物,呈现在四季的餐桌之上",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }]
  },{
    "AudioTrackClips": [{
      "MediaUrl": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/music/m1.wav"
    }]
  }]
}

Round 2:语音合成时间不精确,咋整?

第二天,客户再次找了过来。

上图链接:

help.aliyun.com/document_de...

在很多实际场景中,客户需要知道语音合成的精确时长,从而更好的在实际业务中做控制,比如:控制每一句文案对应的视频和贴图。客户可以先调用智能语音接口,把口播和字幕先合出来,再根据每句话的时长给口播搭配素材。

这样整个合成流程由一步变成了两步,还需要自己来拼字幕时间线,会比直接使用AI_TTS复杂一些,但客户控制能更灵活,在真实客户场景中,也是十分常见的。

整个流程实现过程如下:

Round 3:精确和降本我都要,求支招!

过了几天,客户又找到技术小哥。

上图链接:

help.aliyun.com/document_de...

这回,客户的合成流程是这样的,跟技术小哥之前的建议不太一样。

这回客户遇到的问题是,第一次语音合成的句子时间戳,跟后面AI_TTS合成的结果不一致。 由于底层的一些原因,语音合成即便是同样的参数,每一次合成的结果也会有毫秒级的偏差,不建议把上一次的结果作为下一次合成的参考。 同时,智能语音任务和AI_TTS都会实际做语音合成,费用也会计两次,费用和效率上都不划算。

这回客户的场景是把视频素材跟口播文案逐句对齐,让视频更有节奏感。

当有这种简单的不同轨道间素材对齐需求时,可以直接使用素材对齐功能。时间线中,可以为每个素材设置id(ClipId),同时也可以为素材设置要对齐的素材id(ReferenceClipId),比如如下配置,就可以实现客户想要的效果,客户还是只提交一次剪辑任务就可以。

最终的视频效果如下:

云剪指南第6期示例视频3

Timeline示例:

JSON 复制代码
{
  "VideoTracks": [{
    "VideoTrackClips": [{
      "ReferenceClipId": "speech1",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f1.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "ReferenceClipId": "speech2",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f2.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "ReferenceClipId": "speech3",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f3.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "ReferenceClipId": "speech4",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f4.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "ReferenceClipId": "speech5",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f5.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    },{
      "ReferenceClipId": "speech6",
      "MediaURL": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/food/f6.mp4",
      "Out": 3,
      "Effects": [{
        "Type":"Volume",
        "Gain":0
      }]
    }]
  }],
  "AudioTracks": [{
    "AudioTrackClips": [{
      "ClipId": "speech1",
      "Type": "AI_TTS",
      "Content": "人们懂得用五味杂陈形容人生",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }, {
      "ClipId": "speech2",
      "Type": "AI_TTS",
      "Content": "因为懂得味道是每个人心中固守的情怀",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }, {
      "ClipId": "speech3",
      "Type": "AI_TTS",
      "Content": "在这个时代,每一个人都经历了太多的苦痛和喜悦",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }, {
      "ClipId": "speech4",
      "Type": "AI_TTS",
      "Content": "人们总会将苦涩藏在心里",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }, {
      "ClipId": "speech5",
      "Type": "AI_TTS",
      "Content": "而把幸福变成食物",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }, {
      "ClipId": "speech6",
      "Type": "AI_TTS",
      "Content": "呈现在四季的餐桌之上",
      "Voice": "zhichu",
      "Effects": [{
        "Type": "AI_ASR",
        "Font": "AlibabaPuHuiTi",
        "Alignment": "TopCenter",
        "Y": 0.9,
        "FontSize": 60,
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": true,
          "Italic": false,
          "Underline": false
        }
      }]
    }]
  },{
    "AudioTrackClips": [{
      "MediaUrl": "http://ice-public-media.oss-cn-shanghai.aliyuncs.com/test_media/music/m1.wav"
    }]
  }]
}

K.O.省钱&省代码

十分钟后。

经过与客户的几次交流,我们又上线了一些功能。

|根据主轨道整体倍速: "根据主轨道将其他轨道截断"带来的问题是,最后一个片段可能被截取的不完整,如果最后一个片段恰巧被截了几十毫秒,最后一个画面会一闪而过,播放体验也会下降。当视频轨总时长和口播轨时长不等,但客户又想把视频轨素材完整播放时,就可以使用整体倍速的功能,将视频轨道整体倍速,和口播轨首尾对齐。

|单边对齐: 在一些产品介绍的场景,口播往往比对应的视频素材短,客户期望口播结束后,把对应的素材视频播放完,再开始下一段产品介绍,在这个场景里,就可以用单边对齐的能力。

具体使用可参考智能媒体服务功能发布记录

最后,技术小哥想说:剪辑中有个技巧叫对接剪切(butt-cut)直切(straight-cut) ,即画面和声音在同一时间点开始和结束。如果处理得当,会非常符合观众的口味,反之,会极大影响观看体验。

前文客户的场景在短视频中很常见,不但避免了黑帧等异常情况,还能让成片在观感和听感上更有节奏,也非常建议各位使用短视频合成的客户能用到。AI_TTS、主轨道、素材对齐等功能都是基于大量客户反馈和真实场景实践不断打磨出来的,在保证效果的前提下,能大大节省客户的开发时间,从而能让客户把更多精力投入在业务中。

很多技术同学第一次接触云剪辑时,并没有剪辑基础,都都会遇到各种各样的坑,云剪指南将会介绍更多云剪辑Timeline的使用小技巧,结合客户的真实场景更方便的使用云剪辑Timeline,欢迎各位加入我们的答疑群交流分享。

智能媒体服务IMS「云端智能剪辑」是基于云计算和人工智能技术的视频剪辑生产服务,能为用户提供直播剪辑、视频剪辑、模版工厂、数字人制作等核心功能,并可使用 AI 辅助剪辑生产。该产品可广泛应用于互联网、文化传媒、广告营销、教育金融等行业,满足企业进行规模、高效、便捷、智能的视频内容生产需求。

欢迎加入官方答疑「钉钉群」咨询交流:48335001108

相关推荐
盛夏52017 小时前
Docker容器化部署SpringBoot+Vue项目:从零到一在阿里云宝塔面板的实践指南
阿里云·docker·云计算
狐5719 小时前
2026-01-10-云计算问答题部分整理-期末复习
云计算·期末复习
2401_8612775519 小时前
中国电信星辰AI大模型有哪些主要功能
人工智能·云计算·软件工程·语音识别
Akamai中国2 天前
基准测试:Akamai云上的NVIDIA RTX Pro 6000 Blackwell
人工智能·云计算·云服务·云存储
oMcLin2 天前
如何在 Ubuntu 22.04 LTS 上部署并优化 OpenStack 云计算平台,实现多租户虚拟化与弹性伸缩?
ubuntu·云计算·openstack
Tob管理笔记2 天前
建筑业如何精准开拓优质客户?技术驱动下的方法论与实践
大数据·云计算·数据库开发
咕噜企业分发小米2 天前
独立IP服务器有哪些常见的应用场景?
人工智能·阿里云·云计算
Mr. zhihao2 天前
使用 KMS 管理阿里云 OSS 临时凭证(AK/SK/STS):原理、对比与实战代码示例
阿里云·云计算
奇树谦2 天前
FastDDS阿里云DDSRouter安装和使用(失败)
elasticsearch·阿里云·云计算
虎冯河2 天前
阿里云 + 宝塔面板环境Python 项目从 0 到 1 部署全流
python·阿里云·云计算