Whistle needs 16 kHz mono audio: extract it from a video first
Whistle takes 16 kHz mono audio. Sume audio detach returns exactly that shape from a hosted video with sample_rate 16000 and channels mono.

To feed a video to Whistle you first need 16 kHz mono audio, because that is the input its model card names. Sume's audio detach job can produce that file from a video you have already imported: send sample_rate: 16000 and channels: "mono", and the default output is sample-exact wav (pcm_s16le).
Sources: the Whistle card (input is 16 kHz mono, one pass up to 30 seconds, windowed beyond) and the Sume audio detach docs, both read on 2026-10-13.
| Field | Value for Whistle | Note |
|---|---|---|
format | wav (default) | pcm_s16le, sample-exact; mp3 is 128 kbps |
sample_rate | 16000 | Allowed: 16000, 44100, 48000; omit to inherit the source |
channels | mono | source is the default |
range | { "start": 0, "end": 600 } | Output cap is 900 s; source cap is 1800 s |
What does the request look like?
The source must be a media.sume.com video in your workspace (import it first with POST /v1/media-imports), and Idempotency-Key is required. The job is async by default; mode: "sync" waits up to 30 seconds and otherwise gives a 202 to poll. The result is kind: audio_detach with an audio_url, duration_seconds, channels and sample_rate.
Whistle handles one pass up to 30 seconds, so cut the range to the stretch you want rather than detaching an hour of audio. Each job uses a flat number of credits (see the rate card) and only worker ffmpeg, no model inference.
curl -X POST https://api.sume.com/v1/audio-detach \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: detach-16k-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"sample_rate": 16000,
"channels": "mono",
"range": { "start": 0, "end": 30 }
}'What fails?
A video with no audio track fails with detach_source_has_no_audio; an off-host URL fails with unsupported_media_source. Check probe.has_audio with a frames-off video inspect first. Do not send ffmpeg flags: the server compiles ffmpeg and rejects codec, af and similar keys with ffmpeg_fields_rejected.
Sources
Related posts
More in Media tools
- How to assemble a long-form video with the Timeline 1.0 API
Timeline 1.0 renders one audio spine plus 1 to 200 ordered video slots into one MP4. Every URL must be Sume-hosted; the plan preflight is unbilled.
- How to burn captions onto a video with the Sume API
Send a public HTTPS video URL to POST /v1/video-captions and get a job-backed captioned video, timed by speech-to-text or by text you supply.
- How to extract frames from a video with the Sume API
POST /v1/video-frames returns stills at the times you name from one Sume-hosted clip, as durable images at source size. The call is unbilled.
- How to use Sume's Timeline compose and Timeline audio APIs
Timeline compose puts one still and one video in the same frame as a new MP4. Timeline audio joins or splits Sume-hosted audio into reusable files.
Written by Sume