Novita AI 上的 Wan 2.7 VideoEdit API:如何使用 AI 編輯影片

Novita AI 上的 Wan 2.7 VideoEdit API:如何使用 AI 編輯影片

當你已經有影片素材,並希望模型在不從頭重建動態的前提下,重新詮釋或改寫場景內容時,Novita AI 上的 Wan 2.7 VideoEdit 就是最合適的端點。你將來源影片提交至 POST https://api.novita.ai/v3/async/wan2.7-videoedit,取得一個 task_id,然後輪詢 GET /v3/async/task-result 直到編輯好的片段準備就緒。本指南將說明精確的請求格式、何時加入參考圖片,以及在整合到正式環境前需要注意的實作細節。

何時適合使用 Wan 2.7 VideoEdit

當來源片段的時間點與鏡頭運動已經足夠理想,而你希望 AI 改變的是觀眾看到的畫面內容,而非鏡頭的運鏡方式時,就使用 Wan 2.7 VideoEdit。

典型的適用場景:

  • 你有一段真人拍攝的片段,想將其轉換為動畫、電影感或特定風格化的畫面。
  • 你需要在保留原始動作弧線的同時,更改服裝、環境、道具或氛圍。
  • 你想對素材進行提示詞引導的轉換,並選擇性地使用參考圖片來確定視覺風格。

不適合使用此端點的情況:

  • 你需要僅從文字產生全新的動態。請改用 Wan 2.7 T2V。
  • 你想讓靜態圖片產生動畫。請改用 Wan 2.7 I2V。
  • 你需要跨生成場景、具有指定角色插槽的多角色扮演。請改用 Wan 2.7 R2V。

這個區別很重要,因為 VideoEdit 是從輸入片段開始處理的。如果原始動作出問題,模型並不會幫你修正編排。

已驗證的端點與工作流程

Novita AI 上的 Wan 2.7 VideoEdit 使用一個提交端點和共用的非同步任務結果端點:

欄位
提交端點 POST https://api.novita.ai/v3/async/wan2.7-videoedit
結果輪詢 GET https://api.novita.ai/v3/async/task-result?task_id=<id>
認證標頭 Authorization: Bearer $NOVITA_API_KEY
內容類型 application/json
官方文件 Wan 2.7 VideoEdit API 參考

此 API 為非同步。成功提交呼叫將回傳一個 task_id,而非完成後的影片 URL。你的應用程式應保存此任務 ID,並圍繞它建立輪詢或背景任務邏輯。

步驟 1:取得 Novita AI API 金鑰

Novita AI 金鑰管理 建立一個金鑰,並將其存放於環境變數中:

export NOVITA_API_KEY="your_api_key_here"

請勿將金鑰硬編碼在瀏覽器程式碼、行動應用程式或已簽入版本控制的設定檔中。

步驟 2:了解請求格式

Wan 2.7 VideoEdit 使用平鋪的 JSON 主體。請求不會將欄位巢狀置於 inputparameters 之下。

最低限度,你需要發送:

  • video_url
  • prompt

通常你會優先關注的已記錄可選欄位包括:

  • reference_image_url 作為外觀/風格參考
  • resolution
  • duration
  • audio_setting
  • prompt_extend
  • seed

步驟 3:提交你的第一個 VideoEdit 請求

這是最小實務請求:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "將這個辦公室走廊場景轉變為霓虹科幻風格的走廊,保留行走動作與鏡頭路徑",
    "resolution": "720P",
    "duration": 5
  }'

預期回應:

{
  "task_id": "abc123..."
}

提交時不保證有其他內容。將此請求視為一個工作排入佇列的步驟,而非同步的編輯回應。

步驟 4:輪詢任務結果端點

使用回傳的 task_id 搭配共用的任務結果 API:

curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
  -H "Authorization: Bearer $NOVITA_API_KEY"

根據以下狀態進行建構:

狀態 意義
TASK_STATUS_QUEUED 已接受,等待執行
TASK_STATUS_PROCESSING 編輯正在進行中
TASK_STATUS_SUCCEED 編輯完成的影片已就緒
TASK_STATUS_FAILED 任務失敗;請檢查回應主體

當任務成功時,回應會包含一個 videos 陣列,內含編輯後的輸出 URL 與 URL TTL。請及時下載或搬移該資產,不要將此託管 URL 視為永久儲存空間。

步驟 5:需要更精確的視覺控制時,加入參考圖片

reference_image_url 是選填欄位,但它能以有用的方式改變編輯行為。

在以下情況使用它:

  • 你希望最終片段遵循特定的角色外觀、服裝或色調。
  • 相較於完全依賴文字提示詞,你更希望將輸出導向特定的美術方向。
  • 來源影片的動作是正確的,但僅靠文字提示詞來定義場景風格過於寬鬆。

包含參考圖片的請求範例:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "reference_image_url": "https://example.com/reference-look.png",
    "prompt": "將表演者轉換為參考圖片中的外觀與色調,同時保持相同的舞蹈節奏",
    "resolution": "1080P",
    "duration": 6,
    "audio_setting": "auto"
  }'

如果你的結果持續偏離目標,常見的解決方法不是使用更長的提示詞,而是更精確的提示詞加上更好的參考圖片。

你真正應該關注的關鍵參數

參數 類型 必填 功能說明
video_url string 要編輯的來源影片
prompt string 描述目標轉換效果
reference_image_url string 用於外觀和風格錨定的參考圖片
resolution string 輸出解析度,記錄的值包含 720P1080P
duration integer 目標輸出長度(秒);0 表示保留完整輸入影片長度
audio_setting string 控制音訊生成行為
prompt_extend boolean 讓模型自動擴充簡短提示詞
seed integer 改善多次重試之間的可重現性

在假設預設值之前,請查閱官方參數參考。影片模型欄位的變動頻率高於文字模型欄位,若依賴記憶,很容易搞錯輸出限制。

已知限制與實務約束

截至 2026 年 7 月 29 日,Novita 官方文件中對 Wan 2.7 VideoEdit 記載了以下限制:

  • 支援的解析度:720P1080P
  • duration 預設為 0,表示使用完整輸入影片長度;當你設定時,明確的輸出時長範圍為 2 到 10 秒
  • 輸入影片格式:mp4mov
  • 輸入影片大小限制:最高 100 MB
  • 參考圖片格式:jpgjpegpngwebp
  • 參考圖片大小限制:最高 20 MB
  • 輸出影片格式:mp4

在建立通用媒體處理管線時,這些限制很容易被忽略。最常見的整合失敗原因是發送的來源檔案長度或大小超過端點所能接受。

兩個實務上的含義:

  1. 如果你希望編輯後的片段保留來源長度,請省略 duration 或將其設為 0,而不是強制將其裁剪為 2-10 秒。
  2. 如果你在快速測試提示詞,請先使用 720P,只有在轉換效果穩定後再切換到 1080P

Python 範例:提交與輪詢

import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}


def submit_video_edit(
    video_url: str,
    prompt: str,
    reference_image_url: str | None = None,
    resolution: str = "720P",
    duration: int = 0,
    audio_setting: str = "auto",
    prompt_extend: bool = True,
    seed: int | None = None,
) -> str:
    payload = {
        "video_url": video_url,
        "prompt": prompt,
        "resolution": resolution,
        "duration": duration,
        "audio_setting": audio_setting,
        "prompt_extend": prompt_extend,
    }
    if reference_image_url:
        payload["reference_image_url"] = reference_image_url
    if seed is not None:
        payload["seed"] = seed

    resp = requests.post(
        f"{BASE_URL}/v3/async/wan2.7-videoedit",
        headers=HEADERS,
        json=payload,
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["task_id"]


def poll_result(task_id: str, interval: int = 5, timeout: int = 300) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(
            f"{BASE_URL}/v3/async/task-result",
            headers=HEADERS,
            params={"task_id": task_id},
            timeout=60,
        )
        resp.raise_for_status()
        data = resp.json()
        status = data.get("task", {}).get("status")

        if status == "TASK_STATUS_SUCCEED":
            return data
        if status == "TASK_STATUS_FAILED":
            reason = data.get("task", {}).get("reason", "unknown")
            raise RuntimeError(f"Task {task_id} failed: {reason}")

        time.sleep(interval)

    raise TimeoutError(f"Task {task_id} did not complete within {timeout}s")


if __name__ == "__main__":
    task_id = submit_video_edit(
        video_url="https://example.com/source-clip.mp4",
        prompt="將街景場景變為夜晚的雨夜復古未來城市,保留原始的跟拍鏡頭",
        reference_image_url="https://example.com/reference-frame.png",
        resolution="720P",
        duration=0,
        seed=42,
    )
    print(f"Submitted task: {task_id}")

    result = poll_result(task_id)
    video = result["videos"][0]
    print("Edited video URL:", video["video_url"])
    print("URL TTL:", video["video_url_ttl"])

搭配 Shell 輪詢的 cURL 範例

TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "將片段轉換為手繪動畫城市場景,保留跑步動作",
    "resolution": "720P",
    "duration": 0,
    "prompt_extend": true
  }' | jq -r '.task_id')

while true; do
  RESULT=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
    -H "Authorization: Bearer $NOVITA_API_KEY")
  STATUS=$(echo "$RESULT" | jq -r '.task.status')

  if [ "$STATUS" = "TASK_STATUS_SUCCEED" ]; then
    echo "$RESULT" | jq -r '.videos[0].video_url'
    break
  fi

  if [ "$STATUS" = "TASK_STATUS_FAILED" ]; then
    echo "$RESULT"
    break
  fi

  sleep 5
done

如果你從後端服務進行整合,請將此輪詢迴圈包裝在一個工作者(worker)中,而不是在整個生成期間保持使用者請求的連線開啟。

定價、點數與估算成本前應確認的事項

Novita AI 在其模型與定價頁面上公開了影片模型的定價,但這些數字可能會變動。對於 Wan 2.7 VideoEdit,請直接從 Novita AI 定價頁面 以及官方文件中連結的模型條目確認當前費率,然後再公佈面向客戶的成本估算。

對於工程規劃而言,較安全的假設是:

  • 成本會根據生成的片段設定而變動,並非僅為單一固定請求費用。
  • 1080P 執行不適合用於迭代開發。
  • 較短的片段更容易驗證,且除錯成本更低。

如果你正在建立內部工具,請將定價查詢視為設定事項,而非嵌入程式碼中的常數。

常見的整合錯誤

發送原始上傳檔案而非可存取的 URL。 記錄的請求格式預期使用基於 URL 的媒體輸入。確保你的來源片段已存放在伺服器可存取的穩定 URL 上。

使用 VideoEdit 進行動作變更。 VideoEdit 是轉換端點,而非編排端點。如果原始動作不正確,請使用 T2V 或 I2V 重新生成。

混淆來源影片與參考圖片的大小限制。 來源影片是較大的資產:mp4/mov,最高 100 MB。較小的 20 MB 限制適用於 reference_image_url,而非 video_url

輪詢過於頻繁。 對於需要數秒的影片任務,每秒鐘都呼叫任務結果端點是不必要的。5-10 秒的間隔通常是較好的起點。

忽略 URL TTL。 結果 URL 是暫時的。如果編輯後的片段對下游流程很重要,請及時保存該資產。

提示詞不夠具體。 “讓它更好” 不是一個有效的編輯提示詞。請描述目標風格、環境、主體處理方式,以及哪些動作應保持不變。

你應該選擇哪個 Wan 2.7 端點?

使用這個快速判斷規則:

  • 當你已經有來源影片時,選擇 VideoEdit
  • 當你有來源圖片,或希望從靜態圖像工作流程進行延伸時,選擇 I2V
  • 當你只有文字時,選擇 T2V
  • 當角色一致性與參考角色控制比編輯現有片段更重要時,選擇 R2V

這種區分方式能讓你的整合保持簡單。團隊經常過度使用文字轉影片來處理那些本質上是基於提示詞的編輯問題。

常見問題

Novita AI 上 Wan 2.7 VideoEdit 的端點是什麼?

POST https://api.novita.ai/v3/async/wan2.7-videoedit。它會回傳一個 task_id,然後你輪詢 GET https://api.novita.ai/v3/async/task-result?task_id=<id> 以取得完成結果。

我可以同時提供參考圖片和來源影片嗎?

可以。記錄的請求格式支援在 video_urlprompt 之外,加上一個選填的 reference_image_url,這對於更精確地控制最終視覺效果很有幫助。

Novita AI 上的 Wan 2.7 VideoEdit 支援多長的影片?

根據 2026 年 7 月 29 日的文件,duration 預設為 0,表示使用完整輸入影片長度。如果你明確設定 duration,記錄的範圍為 2-10 秒。

Wan 2.7 VideoEdit 接受大型來源影片嗎?

可以,在記錄的限制範圍內。官方文件列出 mp4/mov 輸入最高 100 MB。另外的 20 MB 限制適用於選填的參考圖片。

我應該使用 Wan 2.7 VideoEdit 還是 Wan 2.7 I2V?

如果你已經有片段並想進行轉換,請使用 VideoEdit。如果你的起點是靜態圖片或圖片主導的工作流程,請使用 I2V。

推薦文章