FFmpeg Media Toolkit: Trim, Convert, Compress, GIF, Subtitles
Pricing
Pay per event
FFmpeg Media Toolkit: Trim, Convert, Compress, GIF, Subtitles
Trim, convert, compress, extract audio or frames, make GIFs, and add or burn subtitles for video and audio files you supply (uploads or direct file URLs). Powered by FFmpeg. Video-platform links are not supported.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Nick Hellmich
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
Compress, convert and trim your own video and audio files in the cloud, with no software to install. It's FFmpeg as an API: turn MP4 into MP3, MOV into MP4, a video into a GIF, shrink a video to a target size in MB, cut a clip, pull out thumbnails, or burn SRT subtitles into a video. Upload files or paste direct links (Google Drive and Dropbox share links are converted automatically). Pay only per output minute, and failed files are free.
You need the rights to your media. Video-platform links (YouTube, TikTok, Instagram, Vimeo, X, Facebook…) are refused: this isn't a downloader.
What people use it for
- Video compressor: make an MP4 smaller for email, Slack or upload limits, by quality level or a target size in MB, optionally downscaled to 720p or 480p.
- Video converter: MP4, WebM, MOV, MKV; audio to MP3, M4A, WAV, FLAC, Opus, OGG (for example MOV to MP4, WebM to MP4, WAV to MP3).
- Extract audio from video: MP4 to MP3 for podcasts, transcription or music.
- Video to GIF: a short, palette-optimized GIF from any part of a clip.
- Trim / cut video or audio: keep a time range, fast (no re-encode) or frame-accurate.
- Thumbnails and frames: N evenly spaced frames, or one every N seconds, as JPG or PNG.
- Add subtitles to a video: burn in SRT/VTT/ASS captions, or add them as a soft track.
- Batch jobs and automations: up to 10 files per run; works from Zapier, Make, n8n, the API, MCP and AI agents.
Quick start
- Click Start. The prefill trims the first 5 seconds of a short public test clip (Jellyfish, 360p) for $0.005.
- Choose an Operation, then upload files or paste direct links (up to 10 per run).
- Open the Output tab and click Download on each row.
If you start a run with no files at all, it finishes immediately with a message telling you what to add, and nothing is charged.
Ready-made inputs
| Task | Input |
|---|---|
| Compress a video to 720p | {"operation": "compress", "maxHeight": 720, "quality": "medium", "fileUrls": ["https://example.com/video.mp4"]} |
| Compress to about 8 MB | {"operation": "compress", "targetSizeMB": 8, "fileUrls": ["https://example.com/video.mp4"]} |
| MP4 to MP3 | {"operation": "extract_audio", "format": "mp3", "fileUrls": ["https://example.com/talk.mp4"]} |
| MOV to MP4 | {"operation": "convert", "format": "mp4", "fileUrls": ["https://example.com/clip.mov"]} |
| Video to GIF (5 s from 0:03) | {"operation": "gif", "start": 3, "gifSeconds": 5, "fileUrls": ["https://example.com/clip.mp4"]} |
| Trim 0:10 to 0:40 | {"operation": "trim", "start": 10, "end": 40, "fileUrls": ["https://example.com/clip.mp4"]} |
| 6 thumbnails | {"operation": "extract_frames", "frameCount": 6, "fileUrls": ["https://example.com/clip.mp4"]} |
| Burn in SRT subtitles | {"operation": "subtitles", "subtitleUrl": "https://example.com/subs.srt", "fileUrls": ["https://example.com/clip.mp4"]} |
Operations and typical settings
| Operation | What it does | Key settings |
|---|---|---|
| Trim | Cut a time range. Fast (keyframe) by default, or frame-accurate | start, end, accurate |
| Convert | Change container or codec; downscale | format, maxHeight |
| Compress | Smaller file at a quality level, or a target size in MB | quality, targetSizeMB, maxHeight |
| Extract audio | Audio track as MP3, M4A, WAV… | format, audioBitrate |
| Extract frames | N evenly spaced frames, or one every N seconds | frameCount / frameIntervalSeconds, imageFormat |
| GIF | A short, palette-optimized GIF | start, gifSeconds, gifWidth, fps |
| Subtitles | Burn in, or add as a soft track (SRT, VTT, ASS) | subtitleUrl, subtitleMode |
Output
There's one row per input with a outputUrl download link, along with outputSeconds, outputHeight, billedEvents, charged, warnings and error. Files are stored in the run's key-value store. Sample row:
{ "source": "https://example.com/clip.mp4", "operation": "compress", "ok": true, "outputSeconds": 10.0,"outputHeight": 360, "billedEvents": { "video-minute-sd": 1 }, "charged": true,"outputUrl": "https://api.apify.com/v2/key-value-stores/.../records/ab12cd34-0-output.mp4" }
Pricing (pay per event, per started output minute)
| Event | Price |
|---|---|
| Light minute: fast trim, audio extraction or conversion, soft subtitles | $0.005 |
| SD video minute: re-encoded output at 720p or below | $0.03 |
| HD video minute: re-encoded output above 720p, or WebM/VP9 | $0.08 |
| Frame extracted | $0.002 |
| GIF created | $0.02 |
Examples: extracting MP3 audio from a 10-minute video costs $0.05; compressing a 3-minute 1080p video to 720p costs $0.09; 10 frames cost $0.02. Billing is based on the output resolution, so downscaling to 720p uses the SD rate. Failed files are never charged, and that includes dead links, sign-in pages and files with no audio. Bronze, Silver and Gold plans get 10/20/30% off. If your Maximum cost per run is too low for a file, the row tells you roughly how much it needs.
Limits
Up to 10 files per run, 500 MB and 30 minutes per input, and outputs up to 1080p. Target-size compression bills two passes. Inputs are deleted after each file, and file contents are never logged.
FAQ
Google Drive or Dropbox link? Paste the normal share link; the file must be shared with "Anyone with the link". Large Drive files may hit Google's virus-scan page; uploading the file directly always works.
Why "NOT_A_MEDIA_FILE"? The link returned a web page. Paste the direct file link (it usually ends in .mp4 or .mp3) or upload the file. You weren't charged.
Why does fast trim start slightly early? It cuts on keyframes so it can copy the stream without re-encoding. Set accurate: true for frame-exact cuts (billed as SD or HD minutes).
Can an AI agent use it? Yes, through the Apify API or MCP, and it supports x402 payments.
Integrations: no-code and AI
Zapier: new video in Dropbox → compressed 720p copy → back to Dropbox
- Trigger: Dropbox → New File in Folder.
- Action: Apify → Run Actor →
FFmpeg Media Toolkit, run asynchronously (encoding takes longer than Zapier's 30 s limit). Input:{"operation": "compress", "fileUrls": ["{{Shared Link}}"], "maxHeight": 720, "quality": "medium"}. - Second Zap: Apify → Finished Actor run trigger → Fetch dataset items → Dropbox Upload File from
outputUrl.
Make: webinar recording → MP3 for the podcast feed
Google Drive Watch Files → Apify Run an Actor ({"operation": "extract_audio", "format": "mp3"}) → a separate scenario with Apify Watch Actor Runs → Get Dataset Items → HTTP Get a file (outputUrl) → upload to your podcast host.
n8n: thumbnails and a GIF preview for every new upload
Webhook → Apify: Run an Actor and get dataset ({"operation": "extract_frames", "frameCount": 4}, then a second call with "operation": "gif") → Airtable/Notion row with the image links.
AI pipelines (LangChain / LlamaIndex)
Use it as a preprocessing step: pull audio out of a video before transcription, or extract frames for a vision model.
from langchain_apify import ApifyActorsToolmedia = ApifyActorsTool("steady_kahikatea/media-toolkit")media.invoke({"run_input": {"operation": "extract_frames", "fileUrls": ["https://example.com/demo.mp4"], "frameCount": 6}})
Sample input → output: {"operation": "extract_audio", "fileUrls": ["https://example.com/talk.mp4"], "format": "mp3"} → {"ok": true, "outputSeconds": 600, "billedEvents": {"light-minute": 10}, "outputUrl": "https://api.apify.com/v2/key-value-stores/.../talk.mp3", "charged": true}. Cost: $0.05.
Tip: Zapier's synchronous Run Actor times out after 30 seconds. For anything longer, run it asynchronously and start a second Zap from the Finished Actor run trigger. Make's synchronous timeout depends on your plan; use Watch Actor Runs for long jobs.
Also works with: the Apify API ("API" tab), the Apify MCP server for Claude/Cursor-style agents, and x402 payments.
Docs used: Zapier · Make · n8n · LangChain · LlamaIndex
For AI agents
Actor: steady_kahikatea/media-toolkitInput: {"operation": "compress", "fileUrls": ["https://example.com/video.mp4"], "maxHeight": 720, "quality": "medium"}Output: dataset rows with outputUrl, billedEvents, charged, error
Questions or a file that fails? Use the Issues tab. If it's useful, a rating helps others find it.