本文为阿里云智能媒体服务IMS「云端智能编排」实践攻略第6期,从客户实在实践场景动身,共享一些Timeline小技巧(AI_TTS、主轨迹、资料对齐),助力客户下降开发时刻与成本。

欧叔|作者

故事的开端要从一条客户的实在反应说起。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

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

某天,一位客户参加了智能媒体服务答疑群,想要完成一个短视频作用,发生了以下对话:

依据客户实在运用场景的云编排Timeline问题解答与代码实操

上图链接:

help.aliyun.com/document_de…

help.aliyun.com/document_de…

在阿里云智能媒体服务IMS云编排中,客户通常会编辑一个Timeline来提交编排使命,组成自己想要的视频。在Timeline中有一个「AI_TTS」功用,便利客户为自己的视频调配口播讲解。

这个功用在短视频组成中十分常见,比方需求给一个探店视频调配一段广告词,或是给一个产品外观视频调配一段产品介绍。运用时,客户只需求在音频轨迹增加一个片段,设置上口播的文本内容和口播音色就好了。在实践组成中,引擎会先做语音组成,再把语音组成的成果组成到成片里,整个过程客户只需求调用一次编排使命就能够。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

但在实践运用中,仍会遇到一些作用问题,例如上面客户遇到的问题:

客户在组成前,不知道口播案牍需求读取的时刻,在调配视频时,就不能很好地操控视频轨的时长:

依据客户实在运用场景的云编排Timeline问题解答与代码实操

终究组成的成片或许会有完毕黑帧、口播完毕但视频还在播的现象,这是客户组成的Badcase作用,口播完毕了,视频还在继续播映。

云剪攻略第6期示例视频1

Timeline示例:

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

主轨迹功用就是来解决这一问题,当客户把一个轨迹设置为主轨迹后,时刻线中的其他轨迹就会依据主轨迹来截断,在上面的示例中,客户能够把口播轨迹设置为主轨迹,把视频轨资料填的足够长,最终依据主轨迹截断后,就不会有黑帧或完毕不对齐的现象了。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

运用了主轨迹的作用:

云剪攻略第6期示例视频2

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

{
  "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:语音组成时刻不精确,咋整?

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

依据客户实在运用场景的云编排Timeline问题解答与代码实操

上图链接:

help.aliyun.com/document_de…

在许多实践场景中,客户需求知道语音组成的精确时长,然后更好的在实践事务中做操控,比方:操控每一句案牍对应的视频和贴图。客户能够先调用智能语音接口,把口播和字幕先合出来,再依据每句话的时长给口播调配资料。

这样整个组成流程由一步变成了两步,还需求自己来拼字幕时刻线,会比直接运用AI_TTS杂乱一些,但客户操控能更灵敏,在实在客户场景中,也是十分常见的。

整个流程完成过程如下:

依据客户实在运用场景的云编排Timeline问题解答与代码实操

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

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

依据客户实在运用场景的云编排Timeline问题解答与代码实操

上图链接:

help.aliyun.com/document_de…

这回,客户的组成流程是这样的,跟技能小哥之前的主张不太一样。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

这回客户遇到的问题是,第一次语音组成的句子时刻戳,跟后面AI_TTS组成的成果不一致。 由于底层的一些原因,语音组成即便是同样的参数,每一次组成的成果也会有毫秒级的偏差,不主张把上一次的成果作为下一次组成的参考。 同时,智能语音使命和AI_TTS都会实践做语音组成,费用也管帐两次,费用和功率上都不划算。

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

当有这种简单的不同轨迹间资料对齐需求时,能够直接运用资料对齐功用。时刻线中,能够为每个资料设置id(ClipId),同时也能够为资料设置要对齐的资料id(ReferenceClipId),比方如下装备,就能够完成客户想要的作用,客户还是只提交一次编排使命就能够。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

终究的视频作用如下:

云剪攻略第6期示例视频3

Timeline示例:

{
  "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.省钱&省代码

十分钟后。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

通过与客户的几回沟通,咱们又上线了一些功用。

|依据主轨迹全体倍速: “依据主轨迹将其他轨迹截断”带来的问题是,最终一个片段或许被截取的不完好,如果最终一个片段恰巧被截了几十毫秒,最终一个画面会一闪而过,播映体会也会下降。当视频轨总时长和口播轨时长不等,但客户又想把视频轨资料完好播映时,就能够运用全体倍速的功用,将视频轨迹全体倍速,和口播轨首尾对齐。

依据客户实在运用场景的云编排Timeline问题解答与代码实操

|单边对齐: 在一些产品介绍的场景,口播往往比对应的视频资料短,客户希望口播完毕后,把对应的资料视频播映完,再开端下一段产品介绍,在这个场景里,就能够用单边对齐的能力。

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

最终,技能小哥想说:编排中有个技巧叫对接剪切(butt-cut)直切(straight-cut) ,即画面和声响在同一时刻点开端和完毕。如果处理得当,会十分符合观众的口味,反之,会极大影响观看体会。

前文客户的场景在短视频中很常见,不但避免了黑帧等异常情况,还能让成片在观感和听感上更有节奏,也十分主张各位运用短视频组成的客户能用到。AI_TTS、主轨迹、资料对齐等功用都是依据许多客户反应和实在场景实践不断打磨出来的,在确保作用的前提下,能大大节省客户的开发时刻,然后能让客户把更多精力投入在事务中。

许多技能同学第一次接触云编排时,并没有编排根底,都都会遇到各式各样的坑,云剪攻略将会介绍更多云编排Timeline的运用小技巧,结合客户的实在场景更便利的运用云编排Timeline,欢迎各位参加咱们的答疑群沟通共享。

智能媒体服务IMS「云端智能编排」是依据云核算和人工智能技能的视频编排出产服务,能为用户供给直播编排、视频编排、模版工厂、数字人制造等核心功用,并可运用 AI 辅佐编排出产。该产品可广泛应用于互联网、文化传媒、广告营销、教育金融等行业,满意企业进行规划、高效、便捷、智能的视频内容出产需求。

欢迎参加官方答疑「钉钉群」咨询沟通:48335001108