Video Converter & Compressor – MP4, MP3, WebM, GIF (FFmpeg)
Pricing
from $8.00 / 1,000 video minute (sd)s
Video Converter & Compressor – MP4, MP3, WebM, GIF (FFmpeg)
Video converter, video compressor and audio converter for media file URLs: MP4/WebM/MOV, compress to a target size or 1080p/720p/480p, MP4 to MP3, WAV/FLAC/M4A/OGG/Opus, video to GIF, trim, mute, normalize loudness. Public download links. From $0.03 per video minute.
Pricing
from $8.00 / 1,000 video minute (sd)s
Rating
0.0
(0)
Developer
Cemal Atakli
Maintained by CommunityActor stats
0
Bookmarked
35
Total users
29
Monthly active users
14 days ago
Last modified
Categories
Features
Share
Convert, compress and trim video and audio files from URLs in the cloud with FFmpeg. Paste direct links to your media files and get back public download links plus clean metadata for every file:
- Compress video – smaller MP4 (H.264/AAC) or WebM, by quality level (small / balanced / high) or to an exact target size in MB (e.g. 8 MB for Discord, 16 MB for WhatsApp), downscale to 1080p / 720p / 480p, change the frame rate.
- Convert video – MP4 (H.264 + AAC, plays everywhere), WebM (VP9 + Opus) or MOV.
- Extract audio – MP4 to MP3, M4A, WAV, FLAC, OGG or Opus, with your bitrate.
- Convert audio – WAV to MP3, FLAC to M4A, MP3 to Opus… any combination.
- Video to GIF – high-quality GIFs with a per-clip color palette, your fps, width, start time and length.
- Change speed – 0.25× slow motion to 4× fast, video and audio together (pitch is kept).
- Rotate / flip – fix sideways phone videos: 90° / 180° / 270°, horizontal mirror, vertical flip.
- Remove silence – shorten long pauses in podcasts, lectures and voice-overs (audio output: MP3, M4A, WAV…).
- Trim any operation with
startTime/endTime, mute, and normalize loudness (EBU R128, −16 LUFS).
Inputs: direct links – MP4, MOV, WebM, MKV, AVI, M4V, MPEG-TS, MP3, WAV, M4A, AAC, FLAC, OGG, Opus and HLS .m3u8 streams – anything FFmpeg reads.
Not a YouTube / TikTok / Instagram downloader. Links to pages of YouTube, TikTok, Instagram, Facebook, X, Vimeo, Twitch, SoundCloud, Spotify and similar platforms are refused with a clear error (free). Use direct links to files you own or are allowed to process: your CDN, S3 / R2 / GCS bucket, Dropbox or Drive direct links, stock footage, podcast hosting, form uploads.
What can I use it for?
- Shrink user uploads before storing them or sending them by email, Slack, Discord or WhatsApp (target size mode).
- MP4 to MP3 for podcasts, transcription pipelines (Whisper, Deepgram) and audio previews.
- Web-ready video: convert MOV / MKV / AVI uploads to MP4 H.264 with fast start, or to WebM.
- GIF previews and thumbnails-in-motion for product pages, docs, newsletters and social posts.
- Batch-normalize loudness of podcast episodes or voice-overs.
- Automations: call it from Make, Zapier, n8n or your backend after a file lands in a bucket, or chain it after another Actor that outputs media URLs.
Optional: files without a public link (upload)
No public link? In the Console, open the Upload files from your computer field (uploadedFiles), drop your video or audio files, then select the same store in Key-value store with your uploads (uploadStore) and click Start. The Actor runs with limited permissions, so it can read only the store you select (tip: upload into an existing named store such as my-media so it is easy to pick). Uploads go to your own Apify key-value storage and the run reads them with its own token – nothing is made public except the converted output link. When you upload files, the pre-filled demo link in mediaUrls is ignored, so you are not billed for it. Via the API you can pass Apify key-value store record URLs (https://api.apify.com/v2/key-value-stores/<storeId>/records/<key>) in uploadedFiles or mediaUrls.
Input
| Field | Description |
|---|---|
mediaUrls, bulkText, datasetId | Direct media file links (list, pasted text/CSV, or another dataset) |
uploadedFiles | Files uploaded in the Console (or Apify key-value store record URLs) |
uploadStore | Key-value store holding your uploads (grants this run read access; converts all its media files if uploadedFiles is empty) |
operation | compress-video (default), convert-video, extract-audio, convert-audio, video-to-gif, change-speed, rotate-flip, remove-silence |
videoFormat | mp4 (default), webm, mov |
compressionLevel | small (CRF 30), balanced (CRF 26, default), high (CRF 22) |
targetSizeMb | Exact output size for compress-video (two-pass encoding) |
maxResolution | original, 2160, 1440, 1080, 720 (default for compress), 480, 360 – never upscales; portrait-aware |
fps, mute, normalizeAudio | Frame rate (0 = keep), drop audio, loudness normalization |
audioFormat, audioBitrateKbps | mp3, m4a, wav, flac, ogg, opus; 32–320 kbps (default 192) |
gifFps, gifWidth, gifMaxSeconds | 10 fps, 480 px, 10 s by default |
speed | change-speed factor, 0.25–4 (default 1.5). Video files keep the video settings; audio-only files use the audio settings |
rotate, flip | rotate-flip: 0 / 90 (default) / 180 / 270 clockwise; none / horizontal / vertical / both |
silenceThresholdDb, minSilenceSeconds | remove-silence: what counts as silence (−50 dB default; try −35 for noisy rooms) and the longest pause kept (0.5 s default) |
startTime, endTime | Trim, e.g. 75, 01:15, 00:01:15.5 |
maxFileSizeMb, maxDurationMinutes | Safety limits: 500 MB and 60 minutes per file by default (skipped files are free) |
Compress a video to 8 MB at 720p:
{"mediaUrls": ["https://download.samplelib.com/mp4/sample-10s.mp4"],"operation": "compress-video","targetSizeMb": 8,"maxResolution": "720"}
Extract MP3 from a video, only minutes 2–6:
{"mediaUrls": ["https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"],"operation": "extract-audio","audioFormat": "mp3","audioBitrateKbps": 192,"startTime": "00:02:00","endTime": "00:06:00"}
Make a phone video 2× faster, rotate it upright, or tighten a podcast (one input per run):
{"mediaUrls": ["https://download.samplelib.com/mp4/sample-5s.mp4"], "operation": "change-speed", "speed": 2}{"mediaUrls": ["https://download.samplelib.com/mp4/sample-5s.mp4"], "operation": "rotate-flip", "rotate": "90"}{"mediaUrls": ["https://example.com/episode-12.wav"], "operation": "remove-silence", "audioFormat": "mp3"}
Output
One dataset row per file (Output tab: Converted files table with download links). The file itself is in the run's key-value store; fileUrl is a public link.
{"sourceUrl": "https://download.samplelib.com/mp4/sample-10s.mp4","operation": "compress-video","status": "ok","input": {"duration": 10.216, "width": 1920, "height": 1080, "fps": 29.97, "videoCodec": "h264", "audioCodec": "aac","container": "mov,mp4,m4a,3gp,3g2,mj2", "bitrateKbps": 4296, "sizeBytes": 5485935},"output": {"format": "mp4", "duration": 10.216, "width": 1280, "height": 720, "videoCodec": "h264", "audioCodec": "aac","bitrateKbps": 1784, "sizeBytes": 2278391, "sizeReductionPct": 58.5},"fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/000-sample-10s.mp4","fileKey": "000-sample-10s.mp4","billedEvents": {"hd-video-minute": 1},"processingSec": 3.8,"processedAt": "2026-10-11T11:56:53+00:00"}
Failed items have status: "error", an errorCode (UNSUPPORTED_PLATFORM, INVALID_URL, HTTP_404, HTTP_403, NOT_MEDIA, FILE_TOO_LARGE, TOO_LONG, NO_AUDIO_STREAM, NO_VIDEO_STREAM, MAX_CHARGE_REACHED, …) and a readable error – and are never charged. A SUMMARY record has run totals.
Pricing
Pay only for what you get: per started minute of output media, priced by output resolution. Failed, skipped and refused files are free.
| What | Price |
|---|---|
| Video minute, SD (480p / 360p) | $0.008 |
| Video minute, HD (720p) | $0.025 |
| Video minute, Full HD (1080p) | $0.05 |
| Video minute, 4K / 1440p | $0.20 |
| Audio minute (MP3, M4A, WAV, FLAC, OGG, Opus) | $0.003 |
| Loudness normalization | +$0.015 per output minute |
| GIF | $0.015 per 10 seconds |
| Actor start | $0.00005 |
change-speed and rotate-flip are billed like other video output (by output resolution and output length – a 4-minute video at 2× is 2 minutes); change-speed on an audio-only file and remove-silence are billed as audio minutes of the output (after the pauses are removed).
Examples: a 10-minute podcast WAV → MP3 = $0.03; a 3-minute 1080p phone video compressed to 720p = $0.075; a 10-second GIF = $0.015. Trim first to pay only for the part you need. Set a maximum total charge on the run and the Actor stops cleanly before exceeding it.
Other media converters on the Apify Store (30-day users at the time of writing):
| Actor | Users (30 d) | Price model |
|---|---|---|
| hgservices/video-downloader-converter | 25 | $0.01 per result |
| whitewalk/ffmpeg-cloud-mcp | 24 | – |
| rixin/video-compressor | 5 | – |
| codingfrontend/video-converter | 4 | $0.005 per result |
| akash9078/audio-file-converter | 0 | – |
Per-result pricing is cheaper for very short clips; per-minute pricing is predictable for long files and covers target-size compression, GIF, audio extraction, loudness normalization, trimming and HLS in one Actor.
FAQ
Can I convert a YouTube or TikTok video? No. Platform pages are refused on purpose (their terms forbid downloading). Use a direct link to a file you own or may process.
How big can files be? Up to maxFileSizeMb (500 MB default, max 5,000). For files over ~1 GB, run with 8 GB+ memory. Length is capped by maxDurationMinutes (60 default) so a wrong link can't create a large bill.
How accurate is the target size? Two-pass H.264 usually lands within ±5% (20 MB requested → 19.9 MB in our test). Very short or very static clips may come out smaller.
Which resolution am I billed for? The output's short side: a 1080p video compressed to 720p is billed as HD. Vertical (portrait) videos use the same rule, so a 1080×1920 phone video is Full HD.
Is the quality good? MP4 uses x264 veryfast with CRF 22/26/30, AAC audio and +faststart for instant web playback. WebM uses fast real-time VP9 (larger than MP4 at the same quality, but plays natively in browsers). GIFs use a per-clip palette with dithering.
How long are files kept? In the run's default key-value store, subject to your Apify data retention. Download or copy them if you need them longer.
Private files? Use pre-signed S3/GCS/R2 URLs or any link that works without a login. Hosts that block datacenter IPs work with the proxy option.
Use with AI agents / Apify MCP
The Actor works as a tool in the Apify MCP server (Claude, Cursor, VS Code, ChatGPT and other MCP clients) and through the Apify API. An agent can say "compress this video to 10 MB", "give me the audio of this file as MP3" or "make a 5-second GIF starting at 0:42" and get back a public fileUrl. Typical chain: media URL → this Actor (extract-audio, mp3/m4a) → a transcription Actor → summary.
curl -X POST "https://api.apify.com/v2/acts/gazidev~media-converter/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mediaUrls":["https://download.samplelib.com/mp4/sample-10s.mp4"],"operation":"extract-audio","audioFormat":"mp3"}'
Use with n8n / Make / API
Any HTTP client works: one POST runs the Actor, waits, and returns the dataset rows (with fileUrl) – keep jobs under ~5 minutes for the synchronous endpoint, otherwise start a run and fetch the dataset when it finishes.
- n8n: HTTP Request node → Method
POST, URL below, Body JSON with the input. Or use the Apify community node (Run Actor →gazidev/media-converter). - Make: the Apify app's Run an Actor module (Actor
gazidev/media-converter, "Run synchronously"), then Get Dataset Items; or the generic HTTP – Make a request module with the same URL. - Zapier / backend: same request; send your token in the
Authorization: Bearerheader.
curl -X POST "https://api.apify.com/v2/acts/gazidev~media-converter/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"mediaUrls":["https://download.samplelib.com/mp4/sample-5s.mp4"],"operation":"compress-video","targetSizeMb":8}'