cd ../back to blog
$Guide//June 4, 2026//7 min read

透過 OpenAI 相容 API 呼叫 Veo 3 與 Sora

用 OpenAI 相容的驗證方式呼叫貨真價實的 Veo 3 與 Sora,做文字生影片與圖片生影片,沒有候補名單,按每秒計費,結果由永久 URL 提供。

Veo 3 與 Sora 讓文字生影片站上了十八個月前文字生圖片所達到的 同一條品質線上。問題在於:這兩家供應商都把存取權鎖在候補名單、 地區限制,以及一套無法跟你其餘 AI 技術堆疊相容的客製化計費流程 之後。

這份指南會帶你透過 Brievio 完成你的第一次 Veo 3 Sora API 呼叫 — 貨真價實的模型、沒有候補名單、 OpenAI 相容的驗證方式、按生成影片的每一秒計費,結果則由一個永久 URL 提供。總共耗時:大約五分鐘。

前置設定

  1. brievio.com/app/signup 註冊。 註冊就送 $2 額度 — 足夠跑幾段 5 秒的測試短片。
  2. /app/keys 建立一把金鑰。它會以 sk-brievio- 開頭。
  3. 匯出它:export BRIEVIO_API_KEY=sk-brievio-...

用 Veo 3 做文字生影片

在電影感鏡頭上,Veo 3 是目前市面上最好的文字生影片模型 — 它聽得懂 鏡頭語言(推軌、推進、變焦對焦),在不同剪接之間都能維持穩定的光線, 並能正確處理 24fps 的運動。生成需要 30 秒到數分鐘;HTTP 回應是 同步的 — 請把用戶端逾時設長一點。

text_to_video.py
import requests, os, time

KEY = os.environ["BRIEVIO_API_KEY"]

resp = requests.post(
    "https://api.brievio.com/v1/video/generations",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "model": "veo-3",
        "prompt": "A drone shot pulling back from a quiet mountain lake at dawn, mist rising off the water. Cinematic, 24fps, soft golden light.",
        "duration": 8,
        "aspect_ratio": "16:9",
        "resolution": "1080p",
    },
    timeout=600,   # 生成需要 30 秒到數分鐘
)
resp.raise_for_status()
data = resp.json()
print(data["data"][0]["url"])

回應採 OpenAI 風格: { data: [{ url: '...' }] }。這個 URL 是 永久的,由 files.brievio.com 提供 — 若你需要長期代管,就先把它 下載一次存進你自己的儲存空間。這段短片是貨真價實的 Veo 3 輸出,不是重新編碼或加上浮水印的副本。

圖片生影片

用一張圖片來定錨,通常正是你拿到正式品質結果的地方。Veo 3 支援兩種圖片模式:

  • image_mode: "frame" — 單張圖片就是 第一個畫格;兩張圖片則是第一個 + 最後一個畫格。這是 image_url 的預設值。
  • image_mode: "reference" — 最多 3 張風格 參考圖,用來維持角色/服裝的一致性,而不強制指定畫格。
image_to_video.py
# 圖片生影片:傳入一個 image_url 來定錨第一個畫格。
resp = requests.post(
    "https://api.brievio.com/v1/video/generations",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "model": "veo-3",
        "prompt": "She smiles, then walks out of frame to the left",
        "image_url": "https://files.brievio.com/<your-upload>.jpg",
        "image_mode": "frame",      # 單張圖片 => 第一個畫格
        "duration": 6,
        "aspect_ratio": "9:16",     # 直式,行動裝置原生
    },
    timeout=600,
)
print(resp.json()["data"][0]["url"])

如果你手邊還沒有定錨圖片的公開 URL,把檔案位元組 POST 到 /v1/files,Brievio 就會在 files.brievio.com 底下替你代管這個檔案:

upload_anchor.py
# 如果你沒有公開的 URL,直接上傳檔案位元組;Brievio 會替你代管檔案。
with open("anchor.jpg", "rb") as f:
    up = requests.post(
        "https://api.brievio.com/v1/files",
        headers={"Authorization": f"Bearer {KEY}"},
        files={"file": f},
    )
image_url = up.json()["url"]   # 永久的 files.brievio.com URL

Sora 與其他模型

同一套端點形狀適用於型錄裡的每一個影片模型 — 傳入對應的 模型代稱即可:

  • veo-3 — 電影感、1080p、支援圖片生影片。
  • sora-2 — OpenAI Sora。
  • seedance-1-5-proseedance-2-0-pro — 字節跳動,在角色運動上非常強。

/models 查看即時清單,以及每個模型 的每秒價格。

從 Node/TypeScript 呼叫

sora.mjs
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BRIEVIO_API_KEY,
  baseURL: "https://api.brievio.com/v1",
});

// /v1/video/generations 並不在 OpenAI SDK 的形狀裡,但同一組驗證
// 標頭照樣可用 — 用 fetch 呼叫它:
const resp = await fetch(
  "https://api.brievio.com/v1/video/generations",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.BRIEVIO_API_KEY}`,
    },
    body: JSON.stringify({
      model: "sora-2",
      prompt: "A red origami crane unfolding into a paper plane and flying away through a window",
      duration: 5,
      resolution: "1080p",
    }),
  },
);
const { data } = await resp.json();
console.log(data[0].url);

計費模型

影片模型按輸出的每一秒計費,而不是按權杖。Brievio 在 /pricing 上為每一個影片模型公布每秒 費率 — 訂得就略低於官方牌價。一段常見的 8 秒 Veo 3 1080p 短片 只要幾美分。失敗的生成(4xx/5xx)永遠不收費。

正式上線檢查清單

  • 把 HTTP 逾時設成 10 分鐘。閘道會向上游輪詢 最長 540 秒,若模型過了這個時間還在運算,就回傳 504。對於耗時 很長的工作,重試即可 — 對同一段提示,生成是冪等的。
  • 保存結果 URL。儘管 files.brievio.com 的 URL 是永久的,你的產品仍應該在自己掌控的 儲存空間裡,擁有一份屬於自己的副本。
  • 用退避策略處理 429。影片模型受限於 GPU;短暫的 資源爭用是正常現象。當 retry-after 標頭存在時,我們會予以遵循。
  • 如合理可行,就按提示雜湊快取。同樣的 提示 + 種子 + 模型會回傳近乎一致的影片 — 為它付兩次錢太浪費了。

有問題:contact@brievio.com。閘道背後的團隊會閱讀每一封信,並在 24 小時內回覆。