Video Music Remover API Documentation
Playground
Try it 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.
Features
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 to600seconds of source video in a single request. -
Simple workflow
Provide one video and receive a version with the background music removed.
Parameters
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Input video provided by public URL. Up to the first 600 seconds are processed. |
How to Use
- Provide a source video — Supply the URL of the video containing the music you want to remove.
- Submit — Run the music-removal process.
- Retrieve the result — Download the processed video with dialogue and other non-music audio preserved where possible.
- 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 Duration | Billed Duration | Cost |
|---|---|---|
| 1s | 3s | $0.006 |
| 3s | 3s | $0.006 |
| 5s | 5s | $0.010 |
| 30s | 30s | $0.060 |
| 60s | 60s | $0.120 |
| 300s | 300s | $0.600 |
| 600s | 600s | $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
videois the only required parameter.- Maximum processed duration is
600seconds. - Videos longer than
10minutes are limited to the first10minutes. - 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.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-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 "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; 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 type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
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
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| video | string | Yes | - | The video to remove background music from. The picture is kept as is; only the audio track is processed. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |