Video Music Remover API

wavespeed-ai/video-music-remover

Video Music Remover strips the background music from any video while keeping dialogue and sound effects, so you can reuse, re-score or dub footage. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Video Tools
Input

Drag & drop or click to upload

Idle

$0.002per run·~500 / $1

ExamplesView all

Related Models

README

WaveSpeed Video Music Remover

Video Music Remover removes background music from a video while preserving dialogue, voices, sound effects, ambience, and the original picture. Use it to clean music from existing footage before reposting, replace a soundtrack with your own music, or prepare video for dubbing and further audio editing.

The model works directly from a source video and supports clips up to 10 minutes in a single request.

Why Choose This?

  • Background music removal
    Remove songs, instrumental scores, and other music beds from an existing video.

  • Dialogue preservation
    Keep spoken voices while removing the surrounding music.

  • Sound-effect preservation
    Retain footsteps, impacts, ambience, environmental sounds, and other non-music audio where possible.

  • Original picture preserved
    The visual content is not regenerated, so the video keeps its original picture, framing, and visual quality.

  • Long-video support
    Process up to 600 seconds of source video in a single request.

  • Simple workflow
    Provide one video and receive a version with the background music removed.

Parameters

ParameterRequiredDescription
videoYesInput video provided by public URL. Up to the first 600 seconds are processed.

How to Use

  1. Provide a source video — Supply the URL of the video containing the music you want to remove.
  2. Submit — Run the music-removal process.
  3. Retrieve the result — Download the processed video with dialogue and other non-music audio preserved where possible.
  4. Continue editing optional — Add a new soundtrack, prepare the footage for dubbing, or use it in another post-production workflow.

Pricing

Pricing is based on the processed input video duration.

The rate is $0.01 per 5 billed seconds, equivalent to $0.002 per billed second.

Input duration is rounded up to the next whole second, with a minimum billed duration of 3 seconds and a maximum billed duration of 600 seconds.

Video DurationBilled DurationCost
1s3s$0.006
3s3s$0.006
5s5s$0.010
30s30s$0.060
60s60s$0.120
300s300s$0.600
600s600s$1.200

Videos longer than 600 seconds are processed and billed only up to the first 600 seconds.

Best Use Cases

  • Soundtrack replacement — Remove existing music before adding a new soundtrack.
  • Dubbing preparation — Clear background music while retaining dialogue and other useful source audio.
  • Reposting workflows — Prepare existing clips for reuse when the original music needs to be removed.
  • Dialogue-focused editing — Isolate speech more cleanly from videos with background music.
  • Video post-production — Create a cleaner audio base for remixing, editing, or additional processing.
  • Creator content — Remove music from interviews, vlogs, tutorials, and social videos without changing the picture.

Pro Tips

  • Results are strongest when dialogue and music are clearly distinguishable in the source mix.
  • Very loud music that heavily overlaps speech may leave faint residual music after processing.
  • Listen to ambience and continuous background sounds after processing, as some sounds may be partially affected when they overlap strongly with music.
  • Use the processed result as a clean starting point when replacing the original soundtrack.
  • For long videos, trim the source beforehand when you only need a specific section processed.

Notes

  • video is the only required parameter.
  • Maximum processed duration is 600 seconds.
  • Videos longer than 10 minutes are limited to the first 10 minutes.
  • Videos without an audio track have no music to remove and are returned unchanged.
  • Dialogue, voices, sound effects, and ambience are preserved where possible.
  • Music that is significantly louder than dialogue may leave faint residual traces.
  • Continuous background sounds such as rain may become slightly quieter after music removal.
  • The visual content of the source video is preserved.
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Video Music Remover API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/video-music-remover 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 Video Music Remover below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/video-music-remover" \
  -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="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 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|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/video-music-remover";
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({
        "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `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", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  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 = {
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}

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/wavespeed-ai/video-music-remover", 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 = 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", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

Video Music Remover API — Frequently asked questions

What is the Video Music Remover API?

Video Music Remover is a WaveSpeedAI model for video processing, exposed as a REST API on WaveSpeedAI. Video Music Remover strips the background music from any video while keeping dialogue and sound effects, so you can reuse, re-score or dub footage. 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 Video Music Remover 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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/video-music-remover.

How much does Video Music Remover cost per run or per second?

Video Music Remover starts at $0.002 per run or per second. 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 Video Music Remover accept?

Key inputs: `video`. 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/wavespeed-ai/video-music-remover.

How long does Video Music Remover take to generate?

Reported generation time on WaveSpeedAI is around 17 seconds per request. This is an estimate, not a latency guarantee; queue time and input settings can change the total wait. live status is visible in the prediction record.

Can I use Video Music Remover outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — wavespeed-ai/video-music-remover for AI agents and LLMs