Sora 2 TVC 廣告 API
使用 AI 驅動的分鏡圖生成和 Sora 2 影片合成來製作 TVC(電視廣告)影片的 API。
線上體驗: https://nanophoto.ai/sora-2-tvc-ad
端點
| 方法 | 路徑 | 說明 |
|---|---|---|
| POST | /api/sora-2-tvc/generate | 生成 TVC 廣告影片 |
| POST | /api/sora-2-tvc/check-status | 查詢任務狀態 |
認證
Authorization: Bearer YOUR_API_KEY點數
| 時長 | 點數 |
|---|---|
| 10s | 8 |
| 15s | 8 |
工作原理
TVC 廣告 API 使用三步 AI 流水線生成專業電視廣告影片:
- 分鏡腳本 — AI 根據廣告主題生成 9 個場景(SC1-SC9)的分鏡描述
- 分鏡圖片 — AI 生成 3×3 九宮格黑白線稿分鏡圖
- 影片生成 — Sora 2 基於分鏡圖生成最終廣告影片
生成介面在啟動流水線後立即回傳。請使用狀態查詢介面輪詢進度和結果。
生成 TVC 廣告
POST /api/sora-2-tvc/generate請求標頭
| Header | 值 |
|---|---|
Content-Type | application/json |
Authorization | Bearer YOUR_API_KEY |
請求參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
adTheme | string | 是 | 廣告主題(如「Nike 跑鞋」) |
referenceImageUrl | string | 否 | 參考圖片的公開 URL,用於風格引導 |
voiceoverScript | string | 否 | 廣告配音腳本 |
videoDuration | string | 否 | 10 或 15(秒,預設 10) |
aspectRatio | string | 否 | portrait(直式,預設)或 landscape(橫式) |
API 呼叫僅接受 referenceImageUrl(公開 URL),不支援 Base64 圖片上傳。
請求範例
基本 TVC 廣告
curl -X POST "https://nanophoto.ai/api/sora-2-tvc/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{
"adTheme": "Nike 跑鞋 - 感受速度",
"videoDuration": "15",
"aspectRatio": "landscape"
}'帶參考圖和配音
curl -X POST "https://nanophoto.ai/api/sora-2-tvc/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{
"adTheme": "奢華香水 - 每一滴都是優雅",
"referenceImageUrl": "https://example.com/perfume-reference.jpg",
"voiceoverScript": "發現優雅的本質,一款與靈魂對話的香氛。",
"videoDuration": "15",
"aspectRatio": "portrait"
}'TypeScript
async function generateTVCAd() {
// 第一步:提交 TVC 廣告生成任務
const response = await fetch("https://nanophoto.ai/api/sora-2-tvc/generate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_API_KEY",
},
body: JSON.stringify({
adTheme: "Nike 跑鞋 - 感受速度",
voiceoverScript: "跑得更快,跑得更強。Nike。",
videoDuration: "15",
aspectRatio: "landscape",
}),
});
const data = await response.json();
if (!data.success) {
console.error("生成失敗:", data.error);
return;
}
console.log("分鏡腳本:", data.storyboardPrompt);
console.log("分鏡圖片:", data.storyboardImageUrl);
// 第二步:使用 recordId 輪詢狀態
const recordId = data.recordId;
while (true) {
await new Promise((resolve) => setTimeout(resolve, 5000)); // 等待 5 秒
const statusRes = await fetch(
"https://nanophoto.ai/api/sora-2-tvc/check-status",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_API_KEY",
},
body: JSON.stringify({ recordId }),
}
);
const status = await statusRes.json();
if (status.status === "completed") {
console.log("影片網址:", status.videoUrl);
console.log("生成耗時:", status.generationTime, "秒");
return;
}
if (status.status === "failed") {
console.error("生成失敗:", status.error);
return;
}
console.log(`步驟 ${status.currentStep}/3: ${status.stepName}`);
}
}
generateTVCAd();回應
處理中
{
"success": true,
"status": "processing",
"taskId": "video_task_id",
"recordId": "tvc_record_id",
"storyboardPrompt": "生成的 9 場景分鏡描述...",
"storyboardImageUrl": "https://static.nanophoto.ai/images/sora-tvc/storyboard-xxx.png"
}收到 status: "processing" 時,請每隔 5-10 秒輪詢 check-status 介面。
錯誤
{
"error": "Insufficient credits",
"errorCode": "INSUFFICIENT_CREDITS",
"requiredCredits": 8
}查詢任務狀態
POST /api/sora-2-tvc/check-status請求標頭
| Header | 值 |
|---|---|
Content-Type | application/json |
Authorization | Bearer YOUR_API_KEY |
請求參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
recordId | string | 條件必填 | 生成介面回傳的 TVC 記錄 ID |
taskId | string | 條件必填 | 生成介面回傳的影片任務 ID |
提供 recordId 或 taskId 之一即可,建議使用 recordId。
請求範例
curl -X POST "https://nanophoto.ai/api/sora-2-tvc/check-status" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-raw '{"recordId": "tvc_record_id"}'回應
步驟 1:生成分鏡腳本
{
"success": true,
"status": "processing",
"recordId": "tvc_record_id",
"currentStep": 1,
"stepName": "Generating Storyboard Prompt"
}步驟 2:生成分鏡圖片
{
"success": true,
"status": "processing",
"recordId": "tvc_record_id",
"currentStep": 2,
"stepName": "Generating Storyboard",
"storyboardPrompt": "..."
}步驟 3:生成影片
{
"success": true,
"status": "processing",
"recordId": "tvc_record_id",
"currentStep": 3,
"stepName": "Generating Ad Video",
"storyboardPrompt": "...",
"storyboardImageUrl": "https://static.nanophoto.ai/images/sora-tvc/storyboard-xxx.png",
"videoTaskProgress": "generating"
}已完成
{
"success": true,
"status": "completed",
"recordId": "tvc_record_id",
"currentStep": 3,
"stepName": "Completed",
"storyboardPrompt": "...",
"storyboardImageUrl": "https://static.nanophoto.ai/images/sora-tvc/storyboard-xxx.png",
"videoUrl": "https://video.nanophoto.ai/sora/...",
"generationTime": 180
}失敗
{
"success": false,
"status": "failed",
"error": "Video generation failed",
"errorCode": "GENERATION_FAILED",
"recordId": "tvc_record_id"
}輪詢策略
- 每 5-10 秒 輪詢一次
/api/sora-2-tvc/check-status - 典型生成時間:2-5 分鐘(三步流水線:腳本 → 分鏡圖 → 影片)
- 生成失敗時點數會自動退還
錯誤碼
| errorCode | HTTP 狀態碼 | 說明 |
|---|---|---|
LOGIN_REQUIRED | 401 | 需要認證 |
API_KEY_RATE_LIMIT_EXCEEDED | 429 | 超出頻率限制(100 次/小時) |
INSUFFICIENT_CREDITS | 402 | 點數不足 |
INVALID_INPUT | 400 | 缺少廣告主題 |
REFERENCE_IMAGE_URL_REQUIRED | 400 | API 呼叫需要 referenceImageUrl(不支援 base64) |
GENERATION_FAILED | 500 | TVC 廣告生成失敗 |
RECORD_NOT_FOUND | 404 | TVC 記錄不存在 |
UNAUTHORIZED | 403 | 無權存取該記錄 |
INTERNAL_ERROR | 500 | 內部伺服器錯誤 |
NanoPhoto.AI文檔