本文檔介紹了如何在時間軸中配置軌道間素材對齊。
一、背景
使用常規時間軸進行剪輯時,如果想要多個軌道的音視頻素材同時播放、同時結束,一般需要手動指定各個素材的TimelineIn和TimelineOut,並且保證素材的時間長度一致。本文檔介紹一種更便捷的素材對齊,您無需指定素材在時間軸上的入出點,僅需配置對齊參數(詳見下文),就能實現不同軌道間音頻向視頻對齊、音頻向音頻對齊、視頻向音頻對齊、視頻向視頻對齊的效果。
二、詳細介紹
2.1、時間軸協議介紹
您可以使用ClipId和ReferenceClipId兩個參數,來指定素材間的對齊與被對齊關係。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"In": 0,
"Out": 5,
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/head.mp4"
},
{
"ReferenceClipId": "audio_1",
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/video1.mp4"
},
{
"MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/end.mp4",
"In": 0,
"Out": 5
}
]
}
],
"AudioTracks": [
{
"AudioTrackClips": [
{
"TimelineIn": 5,
"ClipId": "audio_1",
"MediaId": "7980d8f************e6f7e5696301",
"In": 0,
"Out": 10
}
]
}
]
}以上方的時間軸為例:視頻軌的第二個素材的時間長度及時間軸入出點,自動根據音頻軌第一個素材來配置。

使用限制:
僅音視頻軌道素材可以配置ClipId和ReferenceClipId,特效軌(EffectTrack)和圖片軌(ImageTrack)不支援。
僅當素材位於不同軌道時,素材對齊才會生效,不然時間軸視為非法,會導致合成失敗。
當素材Clip同時配置了TimelineIn、TimelineOut 和 ReferenceClipId,對齊邏輯無效,以輸入的TimelineIn、TimelineOut為準。
如果對齊時clip 時間長度不足,自動倍速補齊足夠時間長度。例:clip A 對齊 clip B,clip B 需要播放 20s 但是 clip A 總時間長度只有10s,會將clip A 做 0.5 倍速,補全20s。
如果對齊時clip 時間長度過長,自動截斷。例:clip A 對齊 clip B,clip B 需要播放10s 但是 clip A 總時間長度 20s,會將clip A 做截斷,截取clip A 的 0 ~ 10s。
2.2、常見情境
下面介紹幾個使用軌道間素材對齊的常見情境:
2.2.1、音視頻簡單對齊
音頻素材對齊視頻
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaId": "e6f7e57980************d8f696301",
"In": 0,
"Out": 4
},
{
"ClipId":"video_1",
"MediaId": "e6f7e57980************d8f696301",
"In": 2,
"Out": 10
}
]
}
],
"AudioTracks": [
{
"AudioTrackClips": [
{
"ReferenceClipId": "video_1",
"MediaId": "7980d8f************e6f7e5696301",
"Effects": [
{
"Type": "Volume",
"Gain": "0.2"
}
]
}
]
}
]
}視頻素材對齊音頻
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaId": "e6f7e57980************d8f696301",
"In": 0,
"Out": 5
},
{
"ReferenceClipId":"audio_1",
"MediaId": "e6f7e57980************d8f696301"
}
]
}
],
"AudioTracks": [
{
"AudioTrackClips": [
{
"TimelineIn": 5,
"ClipId": "audio_1",
"MediaId": "7980d8f************e6f7e5696301"
}
]
}
]
}2.2.2、視頻對齊音頻 -- 視頻包含轉場,音頻包含多段口播,根據各段口播音訊時間長度播放視頻
以下方時間軸為例:
音頻軌上有三個素材,都是通過AI_TTS 產生的口播音頻。
視頻軌上有五個素材,第二與第三個視頻、第三與第四個視頻間各有一個2秒轉場。
視頻軌第二、三、四個視頻素材分別對齊音頻軌上的三段口播音頻。音頻入出點正好對齊轉場的中間時刻。

{
"VideoTracks": [{
"VideoTrackClips": [{
"Out": 5,
"MediaId": "e6f7e57980************d8f696301"
},{
"ReferenceClipId":"speech_1",
"MediaId": "e6f7e57980************d8f696301",
"Effects": [{
"Type": "Transition",
"SubType": "waterdrop",
"Duration": 2
}]
}, {
"ReferenceClipId":"speech_2",
"MediaId": "e6f7e57980************d8f696301",
"Effects": [{
"Type": "Transition",
"SubType": "waterdrop",
"Duration": 2
}]
}, {
"ReferenceClipId":"speech_3",
"MediaId": "e6f7e57980************d8f696301"
}, {
"Out": 10,
"MediaId": "e6f7e57980************d8f696301"
}]
}],
"AudioTracks": [{
"AudioTrackClips": [{
"TimelineIn":5,
"Type": "AI_TTS",
"Content": "口播1口播1口播1。口播1口播1口播1口播1。口播1口播1口播1。口播1口播1口播1。口播1口播1。口播1。口播1口播1口播1口播1。",
"Voice": "sicheng",
"ClipId":"speech_1",
"Effects": [{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "TopCenter",
"Y": 90,
"FontSize": 56,
"FontColor": "#ffffff"
}]
}, {
"Type": "AI_TTS",
"Content": "口播2口播2口播2口播2口播2。口播2口播2口播2口播2。口播2口播2口播2口播2口播2口播2口播2。口播2口播2口播2口播2。",
"Voice": "sicheng",
"ClipId":"speech_2",
"Effects": [{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "TopCenter",
"Y": 90,
"FontSize": 56,
"FontColor": "#ffffff"
}]
}, {
"Type": "AI_TTS",
"Content": "口播3口播3口播3口播3口播3。口播3口播3口播3。口播3口播3口播3口播3口播3。口播3口播3口播3口播3口播3。口播3口播3。",
"Voice": "sicheng",
"ClipId":"speech_3",
"Effects": [{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "TopCenter",
"Y": 90,
"FontSize": 56,
"FontColor": "#ffffff"
}]
}]
}]
}2.2.3、音頻對齊視頻 -- 音頻是一段口播,音頻按照視頻長度進行截斷
以下方時間軸為例:
視頻軌上有三個素材,其中第二個視頻播放時間長度指定為8s。
音頻軌素材是一段AI_TTS 產生的口播,原始時間長度大於8s。
音頻素材對齊第二個視頻素材,最終效果是音頻同樣僅播放8s,多出時間長度自動截斷。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaId": "e6f7e57980************d8f696301",
"In": 0,
"Out": 5
},
{
"ClipId":"video_1",
"MediaId": "e6f7e57980************d8f696301",
"In": 10,
"Out": 18
},
{
"MediaId": "e6f7e57980************d8f696301",
"In": 3,
"Out": 10
}
]
}
],
"AudioTracks": [
{
"AudioTrackClips": [
{
"ReferenceClipId": "video_1",
"Type": "AI_TTS",
"Content": "大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好,大家好",
"Voice": "Siqi",
"SpeechRate": 0,
"PitchRate": 0,
"Effects": [
{
"Type": "AI_ASR",
"Font": "WenQuanYi Zen Hei Mono",
"FontSize": 26,
"FontColorOpacity": 1,
"FontColor": "#000000",
"FontFace": {
"Bold": true,
"Italic": true,
"Underline": false
}
}
]
}
]
}
]
}2.2.4、視頻對齊視頻 -- 根據虛擬人視頻時間長度,播放背景視頻
以下方時間軸為例:
時間軸共有兩個視頻軌,各包含一個視頻素材。第一個軌道的素材是一段普通視頻,第二個軌道的素材是一段由虛擬人形象、字幕、口播音頻合成的視頻。
第一個視頻軌道的素材靜音後作為背景,時間軸上對齊第二個視頻軌的素材。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"ReferenceClipId": "avatar2",
"MediaId": "e6f7e57980************d8f696301",
"Effects": [
{
"Type": "Volume",
"Gain": 0
}
]
}
]
},
{
"VideoTrackClips": [
{
"ClipId": "avatar2",
"Type": "AI_Avatar",
"AvatarId": "yunxin",
"Content": "這種購物方式是指將商品儲存在倉庫中,同時也提高了商品的物流效率和安全性,不少電商企業已經開始嘗試倉儲式購物",
"X": 50,
"Y": 0,
"Effects": [
{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "BottomCenter",
"Y": 50,
"FontSize": 40,
"FontColor": "#ffffff",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
}
]
}
]
}
]
}2.2.5、圖片對齊視頻 -- 虛擬人視頻做為背景,圖片疊加在視頻之上
以下方時間軸為例:
第一個視頻軌有三個素材,最開始5s 和最末尾5s 分別是開場視頻和結束視頻,中間是一段由虛擬人形象、字幕、口播音頻合成的視頻。
第二個視頻軌的素材是一張圖片,入出點對齊第一個軌道的虛擬人視頻,圖片疊加在視頻之上。
{
"VideoTracks": [
{
"VideoTrackClips": [
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/opening.mp4",
"Out": 5
},
{
"ClipId": "avatar2",
"Type": "AI_Avatar",
"AvatarId": "yunxin",
"Content": "這種購物方式是指將商品儲存在倉庫中,同時也提高了商品的物流效率和安全性,不少電商企業已經開始嘗試倉儲式購物",
"X": 50,
"Y": 0,
"Effects": [
{
"Type": "AI_ASR",
"Font": "AlibabaPuHuiTi",
"Alignment": "BottomCenter",
"Y": 50,
"FontSize": 40,
"FontColor": "#ffffff",
"FontFace": {
"Bold": true,
"Italic": false,
"Underline": false
}
}
]
},
{
"MediaURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/ending.mp4",
"Out": 5
}
]
},
{
"VideoTrackClips": [
{
"ReferenceClipId": "avatar2",
"Type": "Image",
"MediaId": "e6f7e57980************d8f696301",
"Width": 0.2,
"Height": 0.2,
"X": 0.1,
"Y": 0.1
}
]
}
]
}