Convert your voiceovers into Videos
POST
Studio-quality voice enhancement using DeepFilterNet (ML) — removes broadband noise underneath speech, the kind plain FFmpeg filters can't separate. Adds optional EQ voice profiles and loudness normalization. Comparable to Adobe "Enhance Speech". Works on audio or video; video in returns enhanced video out by default. Example: {"url": "https://cdn.example.com/raw.mp4", "voice_profile": "bright", "keep_video": true}
Studio-quality voice enhancement using DeepFilterNet, a trained ML model that removes broadband noise underneath speech.
After noise removal it applies an optional EQ voice profile and loudness normalization, then encodes the result. Video inputs are muxed back onto the original (copied, not re-encoded) video track and returned as MP4; audio-only inputs return audio.
This is an async job: POST to create a job, then poll the status_url until it completes.
POST https://eranol.com/api/v1/ffmpeg/audio/enhance
{
"url": "https://cdn.example.com/raw.mp4",
"voice_profile": "bright",
"loudness_target": -16,
"post_filter": true,
"atten_limit_db": 100,
"keep_video": true,
"output_format": "mp3"
}
| Field | Type | Default | Description |
|---|---|---|---|
url | string (URL) | required | Remote audio or video file to enhance. |
voice_profile | string | "bright" | EQ tone applied after noise removal: none (flat), natural (broadcast tone), deep (fuller voice), bright (max clarity for phone speakers — default). |
loudness_target | number | null | -16 | Target loudness in LUFS. -16 = Spotify/Apple, -14 = YouTube. Range -31 to -5. Set null to skip normalization. |
post_filter | boolean | true | Enable DeepFilterNet post-filter for stronger noise attenuation. Keep on for noisy sources. |
atten_limit_db | number | 100 | Noise attenuation limit in dB. Range 0 to 100. 100 = full removal; lower blends back some original signal for a more natural result. |
keep_video | boolean | true | If input is video, mux enhanced audio back onto the original video and return MP4. Set false to force audio-only output. Audio-only inputs always return audio. |
output_format | string | "mp3" | Audio format when keep_video is false: mp3 (320 kbps), m4a (AAC 192 kbps), or wav (lossless). |
{
"job_id": "9f8b2c1a-7d4e-4a2b-b1c3-0e5f6a7b8c9d",
"status": "pending",
"message": "Job created. Poll status_url for progress.",
"job_type": "enhance",
"result_url": "https://eranol.com/api/v1/ffmpeg/result/9f8b2c1a-7d4e-4a2b-b1c3-0e5f6a7b8c9d",
"status_url": "https://eranol.com/api/v1/ffmpeg/status/9f8b2c1a-7d4e-4a2b-b1c3-0e5f6a7b8c9d"
}
| Code | Meaning |
|---|---|
401 | Missing or invalid API key |
402 | Insufficient credits |
422 | Validation error — check your request body |
429 | Rate limit exceeded — slow down requests |
500 | Internal server error — try again or contact support |
GET
Get the current status of an enhance job. Poll this until status is completed, then read the result object.
GET https://eranol.com/api/v1/ffmpeg/status/{job_id}
pending → downloading → processing → completed / failed / cancelled
"Extracting audio (1/4)" → "Enhancing voice with DeepFilterNet (2/4)" → "Applying 'bright' EQ + loudness (3/4)" → "Encoding output (4/4)"
{
"job_id": "9f8b2c1a-7d4e-4a2b-b1c3-0e5f6a7b8c9d",
"job_type": "enhance",
"status": "completed",
"progress": null,
"created_at": 1750684800.12,
"started_at": 1750684803.44,
"completed_at": 1750684820.71,
"result": {
"url": "https://eranol.com/outputs/enhanced-9f8b2c1a.mp4",
"filename": "enhanced-9f8b2c1a.mp4",
"format": "mp4",
"duration": 30.0,
"audio_codec": "aac",
"sample_rate": "48000",
"resolution": "1280x720",
"engine": "deepfilternet",
"voice_profile": "bright",
"loudness_target": -16.0,
"post_filter": true,
"keep_video": true
}
}
| Field | Type | Description |
|---|---|---|
url | string | Public download URL of the enhanced file. |
filename | string | enhanced-<uuid>.<ext> |
format | string | mp4 (video kept) or mp3 / m4a / wav. |
duration | number | Length in seconds. |
audio_codec | string | e.g. aac, mp3, pcm_s16le. |
sample_rate | string | e.g. "48000". |
resolution | string | null | "WxH" for video, null for audio-only. |
engine | string | Always "deepfilternet". |
| Code | Meaning |
|---|---|
401 | Missing or invalid API key |
404 | Job not found |
500 | Internal server error — try again or contact support |