Seedream 5.0 Pro 正式上線 | 在圖片生成器中體驗 →

Vidu One Click V2 MV

vidu /

Vidu One-Click V2 MV transforms images and audio into videos with camera movements and subtitle support. Create professional video content with dynamic shots and text overlays in one click. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

audio-to-video
輸入

就緒

$0.25每次運行·~40 / $10

下一步:

示例查看全部

相關模型

README

Vidu One-Click V2 MV

Vidu One-Click V2 MV is an AI video generation model that creates videos from images and audio. Upload your reference images and audio track, and the model generates a synchronized video with smooth motion and cinematic transitions — with optional subtitle support.

Why Choose This?

  • Image + audio driven Combine images and audio to generate videos with synchronized visuals and sound.

  • Multi-image support Add multiple images to guide video generation across different scenes or perspectives.

  • Audio-synced duration Video length is automatically determined by your audio track.

  • Subtitle generation Optionally add synchronized subtitles to your video.

  • Flexible output Support for multiple aspect ratios (16:9, 9:16, etc.) and resolutions up to 1080p.

  • Prompt Enhancer Built-in tool to automatically improve your prompts for better results.

Parameters

ParameterRequiredDescription
imagesYesReference images (click "+ Add Item" for multiple)
audioYesAudio track (determines video length)
promptNoText description to guide visual style and motion
aspect_ratioNoOutput aspect ratio: 16:9, 9:16, etc.
resolutionNoOutput quality: 720p (default), 1080p
add_subtitleNoEnable subtitle generation

How to Use

  1. Upload your images — add one or more reference images by clicking "+ Add Item".
  2. Upload your audio — the audio track that determines video duration.
  3. Write your prompt (optional) — describe the visual style, mood, or motion.
  4. Set aspect ratio — choose based on your target platform.
  5. Select resolution — 720p for faster generation, 1080p for higher quality.
  6. Enable subtitles (optional) — check if you need text overlay.
  7. Run — submit and download your video.

Pricing

ResolutionCost per 5 seconds
540p$0.15
720p$0.20
1080p$0.25

Billing Rules

  • Base rate: $0.25 per 5 seconds (at 1080p)
  • Resolution multiplier: 540p = 0.6×, 720p = 0.8×, 1080p = 1×
  • Duration: Determined by audio length

Best Use Cases

  • Talking Head Videos — Generate presenter-style videos with audio narration.
  • Social Media Content — Create engaging video content for various platforms.
  • Promotional Videos — Produce video clips with voiceover or background audio.
  • Storytelling — Combine multiple images into narrative video sequences.
  • Content Localization — Generate videos with different audio tracks and subtitles.

Pro Tips

  • Use high-quality images that match the style you want in the video.
  • Add multiple images to create visual variety throughout the video.
  • Match aspect ratio to your target platform: 16:9 for YouTube, 9:16 for TikTok/Reels.
  • Enable subtitles when your audio contains speech.
  • Start with 720p for drafts, upgrade to 1080p for final production.

Notes

  • Video duration is determined by the length of your audio track.
  • Multiple images help create more dynamic videos.
  • Ensure uploaded image and audio URLs are publicly accessible.

Related Models

提示:本網站部分功能由第三方 AI 模型提供支援。

One Click v2 Mv API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/vidu/one-click-v2/mv with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for One Click v2 Mv below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "images": [
        "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
    ],
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "add_subtitle": false
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/vidu/one-click-v2/mv" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
  RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/vidu/one-click-v2/mv";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "images": [
                "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
        ],
        "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
        "aspect_ratio": "16:9",
        "resolution": "720p",
        "add_subtitle": false
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "images": [
        "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
    ],
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "add_subtitle": False
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/vidu/one-click-v2/mv", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

One Click v2 Mv API — Frequently asked questions

What is the One Click v2 Mv API?

One Click v2 Mv is a Vidu model for AI inference, exposed as a REST API on WaveSpeedAI. Vidu One-Click V2 MV transforms images and audio into videos with camera movements and subtitle support. Create professional video content with dynamic shots and text overlays in one click. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the One Click v2 Mv API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/vidu/vidu-one-click-v2-mv.

How much does One Click v2 Mv cost per run?

One Click v2 Mv starts at $0.25 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does One Click v2 Mv accept?

Key inputs: `prompt`, `images`, `audio`, `aspect_ratio`, `resolution`, `add_subtitle`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/vidu/vidu-one-click-v2-mv.

How long does One Click v2 Mv take to generate?

Median end-to-end generation time on WaveSpeedAI is around 405 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use One Click v2 Mv outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Vidu). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Vidu One Click V2 MV | Fast Image-to-Video API | WaveSpeedAI