Cut Video: Video Trimmer, Clip Cutter & Video to GIF avatar

Cut Video: Video Trimmer, Clip Cutter & Video to GIF

Pricing

from $20.00 / 1,000 clip createds

Go to Apify Store
Cut Video: Video Trimmer, Clip Cutter & Video to GIF

Cut Video: Video Trimmer, Clip Cutter & Video to GIF

Cut video clips from video file URLs: trim by start/end or duration, split into equal segments, or make a GIF or MP3. Fast stream copy or frame-accurate re-encode, mp4/webm/gif/mp3 out, signed download links. Direct files only, no YouTube.

Pricing

from $20.00 / 1,000 clip createds

Rating

0.0

(0)

Developer

Data Done Right

Data Done Right

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

This video trimmer lets you cut video clips out of direct video file URLs: give it a start and end time (or a start and a duration), or split a whole video into equal segments, and it returns a download link for every clip as MP4, WebM, animated GIF or MP3. It runs ffmpeg in the cloud, so there is nothing to install and no API key.

What it does not do. It reads direct video files (mp4, mov, webm, mkv, avi) from a public URL. It does not download from YouTube, Vimeo, TikTok, Instagram or other streaming sites and rejects those links without charge. HLS/DASH playlists (.m3u8, .mpd) are not supported. It cuts, it does not merge, caption or edit. Use it only on videos you own or have the right to process.

What you get

  • One dataset row per requested clip: source URL, clip number, start, end, measured duration, format, bytes, width, height, a signed download link, and a status or clear error.
  • Frame-accurate cuts (re-encode) or an instant stream copy (keyframe-aligned).
  • Failed clips are free, never stop the run, and say exactly why they failed.

How to cut video clips from a URL

  1. Paste one or more direct video URLs in videoUrls.
  2. Add the clips you want from each video: [{"start": 5, "end": 12}, {"start": "00:01:05.250", "duration": 4}]. Times are seconds (12.5) or HH:MM:SS.mmm. Leave out end and duration to cut to the end of the video.
  3. Run it. Open the dataset: every row has a url to the clip file. The SUMMARY record lists each video's duration, resolution and any notes.

How to turn a video into a GIF

Set "outputFormat": "gif", pick the moment with start and end (or duration, at most 60 s), and tune gifFps (default 12) and gifWidth (default 480 px). The GIF uses a generated colour palette, so it looks much better than a plain conversion. GIF files have no sound and can be large: lower the fps or width to shrink them.

How to split a video into equal segments

Leave clips empty and set segmentSeconds, for example 30. Every video becomes 30-second parts (a leftover tail under a quarter second is dropped). Each part is one clip and one charge, and maxClipsPerRun caps the total.

How to cut a list of clips from a dataset

Put one row per clip in a dataset (url, start, end or duration, optional name), pick it in cutListDatasetId, and rows of the same URL are cut from a single download. You can also pass per-video clips in videos: [{"url": "https://example.com/a.mp4", "clips": [{"start": 5, "end": 12}]}].

Accurate or copy mode

accurate (default)copy
Howre-encodes (H.264 + AAC for MP4, VP9 + Opus for WebM)copies the compressed streams, no re-encode
Cut positionexactly at start and endstarts at the keyframe at or before start, ends at about end
Speed / qualityslower, one generation of re-compression (crf sets quality)very fast, no quality loss
Output formatsmp4, webm, gif, mp3mp4, webm (GIF and MP3 are always re-encoded)

In copy mode the clip can begin earlier than you asked: the row shows the real start in actualStart and the measured durationSeconds, and a note explains it. In a local test on a 5 s sample with sparse keyframes, copy-mode segments overlapped each other; use accurate for segments and exact cuts. If a stream copy is not possible (for example H.264 into WebM) the clip is re-encoded and the row says so.

Input

FieldDefaultWhat it does
videoUrlssample videoDirect video file links.
clips2 sample clipsClips cut from every video: start, end or duration, optional name.
videosemptyPer-video clips: [{"url", "clips": [...]}].
cutListDatasetIdemptyDataset with one row per clip.
segmentSeconds0 (off)Split videos without explicit clips into equal parts.
outputFormatmp4mp4, webm, gif or mp3.
modeaccurateaccurate or copy.
crf23Quality for mp4/webm (16 best, 35 smallest).
width0Max width for mp4/webm (0 = original, never upscales).
gifFps / gifWidth12 / 480GIF frame rate and width.
audioBitrateKbps192MP3 bitrate.
maxClipSeconds600Longer clips are rejected (free).
maxClipsPerRun100Hard cap on clips per run (max 2000).
maxVideoSizeMb500Source size cap (max 2048).
maxDurationMinutes240Source duration cap.
videoTimeoutSecs600Per download and per clip.
outputStoreNameemptySave clips in a named store that is kept until you delete it.

Input example:

{
"videoUrls": ["https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"],
"clips": [
{"start": 0, "end": 2, "name": "intro"},
{"start": 3, "duration": 1.5},
{"start": 4, "end": 99}
],
"outputFormat": "mp4",
"mode": "accurate"
}

Output

From a real local run of the input above (the third clip is longer than the 5.055 s video, so it is an error row and is not charged):

{
"sourceUrl": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"videoIndex": 1, "clipIndex": 1, "name": "intro",
"start": 0.0, "end": 2.0, "startTimecode": "00:00:00.000", "endTimecode": "00:00:02.000",
"actualStart": 0.0, "durationSeconds": 2.002, "format": "mp4", "mode": "accurate",
"bytes": 133989, "width": 960, "height": 540,
"url": "https://api.apify.com/v2/key-value-stores/<store>/records/v01-clip-001.mp4",
"key": "v01-clip-001.mp4", "status": "ok", "error": null, "note": null
}
{
"sourceUrl": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"videoIndex": 1, "clipIndex": 3, "start": 4.0, "end": 99.0,
"status": "error",
"error": "end 00:01:39.000 is past the end of the video (duration 00:00:05.055)",
"url": null
}

On Apify the url is a signed link that downloads without a token. status is ok, error or skipped (spending limit or maxClipsPerRun reached).

Use with the Apify API, MCP, n8n and Make

Python:

from apify_client import ApifyClient
run = ApifyClient("<APIFY_TOKEN>").actor("data-done-right/video-trimmer").call(run_input={
"videoUrls": ["https://example.com/talk.mp4"],
"clips": [{"start": "00:10:00", "end": "00:10:45", "name": "highlight"}],
"outputFormat": "mp4"})
for row in ApifyClient("<APIFY_TOKEN>").dataset(run["defaultDatasetId"]).iterate_items():
print(row["status"], row["url"] or row["error"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('data-done-right/video-trimmer').call({
videoUrls: ['https://example.com/talk.mp4'], segmentSeconds: 60 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

In n8n or Make use the Apify node with the actor name and the same JSON. With Apify's MCP server (mcp.apify.com) an AI assistant can call it: "cut 10 to 20 seconds from this mp4 as a GIF". Only a video URL is needed.

Use cases

  • Cut highlight clips from your own recordings, webinars or product demos.
  • Turn a moment of a screen recording into a GIF for docs, tickets or chat.
  • Split a long recording into fixed-length parts for review or upload limits.
  • Extract the audio of a clip as MP3 for transcription or podcasts.
  • Cut a list of timestamps (from a transcript or a scene detector) into files in one run.

How much does it cost

Pay per event: $0.025 per clip created (clip-created, $25 per 1,000). Failed and skipped clips, rejected links and the SUMMARY record are free. Plan discounts apply (Silver about 10%, Gold and higher about 20%).

  • 1,000 clips: $25.
  • 10,000 clips: $250.
  • 100,000 clips: $2,500.

maxClipsPerRun caps a run, and if you set a maximum spend per run the Actor stops cleanly when it is reached and removes the clip it could not charge for. The cost is per clip whatever its length or format; Apify platform usage is included in this price.

FAQ

Can it cut YouTube videos?

No. YouTube, Vimeo, TikTok, Instagram and other streaming-site links are rejected with a message and no charge. Use a direct link to a video file (for example a file on your own server or a public file host) that you have the rights to.

Is the cut frame-accurate?

In accurate mode yes: it re-encodes and cuts at your start and end. In copy mode no: it starts at the keyframe at or before your start, which can be seconds earlier, and reports the real start in actualStart.

What happens if a time is outside the video?

The Actor reads the real duration with ffprobe. A start past the end, an end more than 50 ms past the end, an end before the start, or an unreadable time gives an error row that names the problem and the video's duration. The other clips still run and nothing is charged for the failed one.

Which limits apply?

Source files up to 2 GB (default 500 MB) and 4 hours by default, clips up to 1 hour (default 10 minutes), GIFs up to 60 s, up to 2000 clips per run. Links to private or internal addresses are blocked. The whole source file is downloaded once per video, so a very large file takes time even for a short clip.

Which formats can it read and write?

It reads common video containers (mp4, mov, webm, mkv, avi, flv, mpeg, ts) with codecs ffmpeg can decode. It writes MP4 (H.264/AAC), WebM (VP9/Opus), GIF and MP3. A video without sound cuts fine to MP4, WebM and GIF; MP3 gives an error row for it.

Clips live in the run's key-value store, which expires with your plan's retention period. Set outputStoreName to keep them in a named store until you delete it.

  • Video Frame Extractor: Keyframes, Scenes & Thumbnails for AI pulls still images from the same videos.
  • All-in-One File Converter: PDF, Office, Images, Audio & Video converts the clips to other formats.
  • Transcribe Audio to Text: Files, Podcasts & Video URLs turns the audio of a clip into a transcript.