導覽

JavaScript

在 JavaScript 中渲染影片Beta

用 JavaScript SDK 把影片範本渲染成 MP4,並追蹤渲染進度。

影片範本會渲染成 MP4。影片每一秒計為一次生成,60 fps 時計為兩次。如何設計影片範本,請見生成影片。

renderAndWaitVideo 和 renderVideo 接受範本 ID 和一個選項物件。

#templateIdstringrequired

影片範本的 ID,例如 tpl_xxx。

#modificationsModification[]

要放進範本圖層的值。影片圖層接受 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)
}