JavaScript
在 JavaScript 中渲染影片Beta
用 JavaScript SDK 把影片範本渲染成 MP4,並追蹤渲染進度。
影片範本會渲染成 MP4。影片每一秒計為一次生成,60 fps 時計為兩次。如何設計影片範本,請見生成影片。
renderAndWaitVideo 和 renderVideo 接受範本 ID 和一個選項物件。
影片範本的 ID,例如 tpl_xxx。
要放進範本圖層的值。影片圖層接受 src,音訊軌則接受名稱和 src。每種圖層接受哪些欄位,請見 Modifications。
渲染並等待網址
renderAndWaitVideo 會回傳含有 MP4 網址的 { result },或是 { error }。
const { result: url, error } = await bannerify.renderAndWaitVideo("tpl_xxx", {
modifications: [
{ name: "headline", text: "Summer sale" },
{ name: "music", src: "https://example.com/song.mp3" },
],
})
if (error) throw new Error(error.message)
console.log(url)
追蹤進度
renderVideo 會回傳事件的非同步迭代器。最後一個事件是 done 或 error。
for await (const event of await bannerify.renderVideo("tpl_xxx", {
modifications: [{ name: "headline", text: "Summer sale" }],
})) {
if (event.type === "created") console.log(`video ${event.id}`)
if (event.type === "queued") console.log(`${event.ahead} videos before this one`)
if (event.type === "progress") console.log(`${Math.round(event.progress * 100)}%`)
if (event.type === "done") console.log(event.url)
if (event.type === "error") console.error(event.error.message)
}
| 事件 | 欄位 |
|---|---|
created |
id:影片的 ID |
queued |
ahead:排在這部影片前面的影片數量 |
progress |
frame、totalFrames,以及從 0 到 1 的 progress |
done |
url:MP4 的網址 |
error |
error:code、message 和 requestId |
被拒絕的請求,例如 API 金鑰無效或配額用完,會產生一個 error 事件。
連線中斷時,renderVideo 會用影片的 ID 再次讀取同一部影片,最多四次,並繼續產生事件。它絕不會把影片渲染兩次。
不等待就開始影片
createVideo 會立即回傳含有影片 ID 的 { result },或是 { error }。之後再用 getVideo 讀取影片。
const { result, error } = await bannerify.createVideo("tpl_xxx", {
modifications: [{ name: "headline", text: "Summer sale" }],
})
if (error) throw new Error(error.message)
console.log(result.id)
再次讀取影片
即使你的處理程序停止,影片仍會渲染到完成。請保留 created 事件中的 id,以便稍後讀取。
getVideo 會回傳含有影片狀態的 { result },或是 { error }:
const { result: video, error } = await bannerify.getVideo("vid_xxx")
if (error) throw new Error(error.message)
if (video.status === "done") console.log(video.url)
if (video.status === "failed") console.error(video.error)
| 欄位 | 值 |
|---|---|
id |
影片的 ID |
status |
queued、rendering、done 或 failed |
url |
MP4 的網址,在 done 之後才有 |
error |
影片 failed 的原因 |
watchVideo 會像 renderVideo 一樣,從最新的事件開始,再次回傳影片的事件:
for await (const event of await bannerify.watchVideo("vid_xxx")) {
if (event.type === "done") console.log(event.url)
}