Video Converter — MP4 to MP3, Trim, GIF and Audio Extraction avatar

Video Converter — MP4 to MP3, Trim, GIF and Audio Extraction

Pricing

from $12.00 / 1,000 video minute processeds

Go to Apify Store
Video Converter — MP4 to MP3, Trim, GIF and Audio Extraction

Video Converter — MP4 to MP3, Trim, GIF and Audio Extraction

The active Apify pricing record determines your bill: `audio-minute-processed` previous/requested $0.001; `video-minute-processed` previous $0.015 / requested $0.026; `hd-video-minute` previous/requested $0.045; platform usage included; failed results free.

Pricing

from $12.00 / 1,000 video minute processeds

Rating

0.0

(0)

Developer

Logan Parker

Logan Parker

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Convert up to 20 audio or video files per run with ffmpeg: extract audio as MP3, WAV, M4A, OGG, FLAC or Opus; transcode video to MP4, WebM, MOV or MKV; trim, compress to a target size, or make GIFs. Choose resolution and compression presets, mute a video or normalise audio loudness; it is for anyone without ffmpeg at hand, and for AI agents chaining media steps, which can call and pay for it through Apify's MCP server and agentic payments.

The active Apify pricing record determines your bill; for the previous/requested schedules, audio-minute-processed previous/requested $0.001; video-minute-processed previous $0.015 / requested $0.026; hd-video-minute previous/requested $0.045; usage is included and failed results are free.

Example result

Example record for the trim example task (a 15-second clip of Big Buck Bunny), as this Actor's conversion returned it on 2026-10-16; the store id in outputUrl is the run's own:

{
"url": "https://raw.githubusercontent.com/mediaelement/mediaelement-files/4d21a042353022326071acb0251ab75cd6bae114/big_buck_bunny.mp4",
"ok": true,
"operation": "trim",
"key": "output.mp4",
"outputUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/output.mp4",
"format": "mp4",
"durationSec": 15.0,
"sizeBytes": 1063409,
"width": 640,
"height": 360,
"minutesCharged": 1,
"event": "video-minute-processed",
"warnings": []
}

How to use it

Start a run in Apify Console, by API or from an agent with an input like this one — it is the input Apify runs every day to test this Actor:

{"urls": ["https://media.w3.org/2010/05/sintel/trailer.mp4"], "operation": "extract_audio", "audioFormat": "mp3"}
FieldTypeRequiredDefaultMeaning
urlstringone of url/urls—One audio or video file URL, http or https, up to 1 GB (MP4, MOV, MKV, WebM, AVI, FLV, MPEG-TS, MP3, WAV, M4A, AAC, OGG, FLAC and other single-file formats; not a playlist).
urlsstring arrayone of url/urls—1–20 media file URLs instead of url; never both. The same operation and settings apply to each. Duplicate URLs count as separate inputs.
operationenum extract_audio · convert_audio · transcode_video · trim · compress_video · gifyes—What to do (below).
audioFormatenum mp3 · wav · m4a · ogg · flac · opusnomp3For audio outputs: MP3 (VBR about 165 kbps), WAV (16-bit PCM), M4A (AAC 160 kbps) OGG (Vorbis), FLAC (lossless) or Opus (96 kbps in Ogg).
sampleRateintegernosourceResample audio outputs, e.g. 16000 for speech models: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100 or 48000 Hz. Opus accepts only 8000, 12000, 16000, 24000 or 48000; its default is 48000.
channelsintegernosource1 (mono) or 2 (stereo); a source with more than two channels is mixed down to stereo.
videoFormatenum mp4 · webm · mov · mkvnomp4For video outputs: MP4, MOV and MKV (H.264 + AAC) or WebM (VP9 + Opus).
startintegerno0For trim and gif only: start of the range, whole seconds (0–86,400).
endintegernoendFor trim and gif only: end of the range, whole seconds (1–86,400), after start and inside the media; a value inside the media's last partial second means the end.
targetSizeMbintegerno—For compress_video, where it is required: the largest output size, in megabytes of 1,000,000 bytes (1–1,000).
maxWidthintegernosourceScale video and GIF outputs down to this width, keeping the aspect ratio (16–7,680 px). Video outputs are capped at 1080p (1920×1080, either orientation) and GIFs at 640 px a side whatever this says. A GIF defaults to 480 px when the source is wider.
audioBitrateKbpsintegernocodec defaultTarget 32–320 kbps for lossy audio outputs or the video audio track; the encoder may round to a supported rate. Codec, sample-rate and channel limits also apply: an incompatible combination returns invalid_input (for example 320 kbps mono Opus or 128 kbps 8 kHz mono Vorbis). Not WAV, FLAC or GIF. compress_video uses its target-size audio budget instead.
resolutionenum source · 1080p · 720p · 480p · 360pnosourceFit video into 1920×1080, 1280×720, 854×480 or 640×360, in either orientation, preserving aspect ratio and never upscaling. Dimensions round to even pixels; maxWidth may reduce them further. GIF keeps its own sizing. An HD source still costs HD minutes.
compressionPresetenum small · balanced · highnobalancedVideo quality/size: H.264 CRF 28/23/18, VP9 CRF 37/32/27. Small lowers quality and file size; high raises both. Encoder speed stays unchanged. compress_video uses targetSizeMb instead.
removeAudiobooleannofalseMute video outputs. Not audio-only outputs or GIF. Cannot combine with normalizeAudio.
normalizeAudiobooleannofalseOne-pass EBU R128 loudness normalisation, targeting −16 LUFS, −1.5 dBTP and LRA 11. Requires an audio track. Not GIF or removeAudio. Silence and very short clips may not reach the target.

What each operation does:

  • extract_audio — the first audio track of a video (or audio) file, as audioFormat. A file with no audio track is no_audio_stream.
  • convert_audio — an audio file to audioFormat, with sampleRate and channels if given.
  • transcode_video — the whole video to videoFormat at the source's size (or resolution/maxWidth) and frame rate, quality-targeted. A source larger than 1080p is scaled to fit 1920×1080 (1080×1920 for a portrait video) and the record's warnings says scaled_to_1080p.
  • trim — the start–end range, re-encoded so the cut is frame-accurate: a video to videoFormat, an audio-only file to audioFormat.
  • compress_video — the whole video to videoFormat at the bitrate that lands it under targetSizeMb; if the first pass comes out over, a second pass at a lower bitrate. Setting maxWidth too keeps a small target watchable.
  • gif — the start–end range (at most 60 seconds) as a looping GIF at up to 10 frames a second and at most 640 px a side (warnings: scaled_to_640px when that cap applied), with a palette built from the clip.

start and end are refused on the other operations (processing the whole file instead would charge more than asked). Metadata — tags, chapters, location — is not copied to the output. Every limit above is enforced by the input schema and again in code.

Events and prices

The active Apify pricing record determines your bill; each schedule below is conditional on that exact record being active. A pending record does not authorise its charges. Before submission, while pending, and after activation, use the actual active record, not the requested calendar, to determine the bill.

Requested activation: 2026-12-06T06:00:00Z. This is a request until confirmed by the record; the record supplies the actual effective instant.

Previous schedule — only if that record is active

apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005; audio-minute-processed: FREE $0.001, BRONZE $0.001, SILVER $0.0009, GOLD $0.0008, PLATINUM $0.0008, DIAMOND $0.0008; video-minute-processed: FREE $0.015, BRONZE $0.015, SILVER $0.0135, GOLD $0.012, PLATINUM $0.012, DIAMOND $0.012; hd-video-minute: FREE $0.045, BRONZE $0.045, SILVER $0.0405, GOLD $0.036, PLATINUM $0.036, DIAMOND $0.036.

Requested schedule — only if that record is active

EventTitleCharged whenFREE / BRONZESILVERGOLD / PLATINUM / DIAMOND
audio-minute-processedAudio minute processedOne started minute of input processed by an operation whose output is audio only.$0.001$0.0009$0.0008
video-minute-processedVideo minute processedOne started minute of input processed by an operation whose output is video or GIF.$0.026$0.0234$0.0208
hd-video-minuteHD video minute processedOne started minute of input processed by an operation whose output is video or GIF, when the output or the source video has more pixels than 1280x720 (720p); charged instead of video-minute-processed.$0.045$0.0405$0.036

Platform event in the requested schedule: apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005.

The requested start at default memory is (1 event, $0.00005, at the default 1,024 MB).

Worked event subtotal, requested schedule at FREE: if 10 video-minute-processed events are charged, 10 × $0.026 = $0.26 for that event alone. All other charged events and the platform start event add their listed fees; this subtotal is not a run total. The configured maximum-charge floor is $0.05. Platform usage is included; failed results are uncharged.

Call it from an agent

Through Apify's MCP server (https://mcp.apify.com), tool call-actor:

{"actor": "hermeskd/audio-video-convert", "input": {"urls": ["https://media.w3.org/2010/05/sintel/trailer.mp4"], "operation": "extract_audio", "audioFormat": "mp3"}, "callOptions": {"maxTotalChargeUsd": 0.05, "timeout": 3600}, "waitSecs": 30}

The call returns the run's status and its defaultDatasetId. Read the record with get-dataset-items:

{"datasetId": "<defaultDatasetId from the call>", "limit": 50}

The record's outputUrl is the converted file in the run's key-value store; fetch it from there. As a dedicated tool, add https://mcp.apify.com?tools=hermeskd/audio-video-convert to your MCP client. Extracting the audio of a short clip finishes well inside the 30-second wait; a long video transcode takes minutes, so poll the run, or call with a larger waitSecs. maxTotalChargeUsd caps what the run can charge: a file whose minutes would cost more than the cap is not processed and comes back as charge_limit_reached, uncharged.

Output fields

One record per input URL, in input order. Files run sequentially so only one conversion occupies memory. Each failure is free and later files continue under the same time and charge limits.

FieldMeaning
urlThe input URL.
oktrue when the output file was written; false with error.
operationThe operation run.
keyThe output file's key in the run's default key-value store: output.<format> for url; output-01.<format>, output-02.<format>, etc. for urls, by original input position (including failed positions).
outputUrlAPI URL of that key-value store record — the converted file.
formatThe output's format: mp3, wav, m4a, ogg, flac, opus, mp4, webm, mov, mkv or gif.
durationSecThe output's duration in seconds, as ffprobe reads it.
sizeBytesThe output's size in bytes.
widthThe video or GIF output's width in pixels; null for audio outputs.
heightThe video or GIF output's height in pixels; null for audio outputs.
minutesChargedStarted minutes of input processed, charged as event: the whole file's duration, or for trim and gif the selected range (end − start).
eventThe event minutesCharged counts: audio-minute-processed when the output is audio only; for video and GIF outputs hd-video-minute when the output or the source video has more pixels than 1280×720 (720p), video-minute-processed otherwise.
warningsscaled_to_1080p when a video output was scaled down to fit 1920×1080; scaled_to_640px when a GIF was scaled down to 640 px a side. Empty otherwise.
error{code, message} when ok is false.

Limits and run time

  • One url or 1–20 urls per run, up to 1 GB per file. Files download at 2 MB/s or faster: each download has a budget of 30 s plus 1 s per 2 MB of the file (a 100 MB file: 80 s), and one that sends nothing for 30 s is stopped; a slower source is download_failed. At most 2 requests a second go to one host.
  • start and end are whole seconds; a GIF covers at most 60 seconds; targetSizeMb 1–1,000.
  • Default memory is 1,024 MB. ffmpeg uses two decoder, encoder and filter threads; at 8,192 MB or above it uses four. Standard H.264 keeps veryfast; HD H.264 keeps ultrafast; VP9 keeps its realtime preset. The default quality is unchanged. Thread count is recorded in each successful input's timing log. Platform speed and cost of the new thread setting are measured by the next deploy, not guaranteed from local timing. Give long or HD conversions 4,096 MB or more and enough time; all batch files share the run timeout.
  • Video outputs are at most 1080p (a larger source is scaled to fit 1920×1080, either orientation, and the record says scaled_to_1080p); GIFs at most 640 px a side. Source videos up to 3840×2160 (4K UHD) are taken for every video operation; a larger one is unsupported_media (extract_audio works on any). Measured on one core of the build machine, a minute from a 1080p source to 1080p WebM takes about 41 core-seconds and to MP4 27; from a 2160p source about 76 and 63; a 60-second GIF from a 2160p source about 58. HD and long videos run several times longer than the default memory's quarter core allows in a few minutes: give them 4,096 MB (one core) or more. The default run timeout is 3,600 seconds; a conversion still running when it ends is timeout.
  • GitHub release links (github.com/…/releases/download/…) are refused with robots_disallowed: github.com's robots.txt disallows every crawler, HermesBot included. Use the file's raw.githubusercontent.com address, or your own storage.
  • Typical run time: the minimal input under How to use it in a few seconds plus the start; a 10-minute 180p video to WebM in about two minutes at the default memory.

Errors

Errors are records with ok: false and error.code; none is charged.

error.codeMeaning
download_failedThe URL did not return the file: an HTTP error status, a network error, or slower than 2 MB/s (its download budget ran out, or 30 s without data).
unsupported_mediaNot a decodable single-file audio or video format (a playlist, a text file, a damaged or truncated file), no stream the operation needs (a video operation on an audio-only file), or a video operation on a source larger than 3840×2160.
no_audio_streamextract_audio or convert_audio on a file with no audio track.
too_largeOver 1 GB.
invalid_rangestart or end outside the media, end not after start, or a GIF range over 60 seconds.
robots_disallowedrobots.txt forbids fetching the URL; no request was made to it.
blocked_hostThe host is on the deny-list, or resolves to a private or local address.
timeoutThe download or the conversion did not finish within the run's time budget.
internal_errorUnexpected failure; the message carries the class.
charge_limit_reachedThe file's minutes would cost more than the run's maximum total charge; it was not converted.
invalid_inputThe run input passed the input schema but cannot be used (for example compress_video without targetSizeMb, start on extract_audio, or a targetSizeMb too small for the video's length); the message names the field. Nothing is converted.

The run fails only when nothing succeeded and at least one input failed with an Actor-side code (internal_error, timeout), so a broken Actor is visible. Every other run succeeds — including one where nothing was converted because of the caller's own input (bad URL, robots, deny-list, an undecodable file, a bad range, invalid input, the charge limit).

Sources and terms

The source is the caller's media file. Process only media you have the right to process. Fetching follows the Hermes fetch policy: robots.txt is obeyed for the user-agent HermesBot (and *), and a disallowed URL is refused without a request; platforms whose terms forbid automated access (video platforms and social networks among them), and people-search sites, are on a deny-list and refused without a request; private and local addresses are refused, after DNS and on every redirect; the user-agent is HermesBot/1.0 (+https://apify.com/hermeskd); no login, cookies, credentials, CAPTCHA solving, evasion or proxies are used. The file is opened by ffmpeg as one local file in an allow-listed container format: playlists and manifests, which would make ffmpeg fetch further URLs or read other files, are refused. The converted file is returned to the caller; no speaker or face is identified, and metadata is dropped.

Not affiliated

This Actor is not affiliated with the FFmpeg project, the W3C, the Blender Foundation or LibriVox. FFmpeg (with x264, libvpx, Opus, LAME and Vorbis) is used under its open-source licences; the example media are Blender Foundation films under CC BY 3.0 and a public-domain LibriVox recording.

Changelog

  • First-build upgrade: batches of up to 20 URLs; FLAC and Ogg Opus audio; MOV and MKV video; audio bitrate, resolution and compression quality presets; mute and EBU R128 loudness normalisation. Two ffmpeg threads (four at 8 GB+). Prices and default memory unchanged.

  • 1.0 (2026-10-26) — store listing rewritten for the people and agents searching for this job: title, description, search-engine title and description, categories, and the README in the order a searcher reads it (what it does, a real result, how to use it, prices, the agent call).

  • 1.0 (2026-10-17) — first release: extract and convert audio (MP3, WAV, M4A, OGG), transcode video (MP4, WebM), trim, compress to a size, GIF; per-minute pricing, HD minutes (source or output above 720p) as hd-video-minute; video outputs at most 1080p, GIFs at most 640 px a side.