ai-videoffmpegapi

Gemini 4 Argon video costs double Dec 1. Shrink the input.

··10 min read
Gemini 4 Argon video costs double Dec 1. Shrink the input.

Google made gemini-4-argon generally available on October 13, 2026, and it takes video as input. The introductory token price runs out on November 30. Wire an hour-long recording into it today and the same pipeline costs twice as much in six weeks, and the fix isn't a cheaper model.

Quick answer: Gemini 4 Argon video input is billed at $2 per 1M tokens through November 30, 2026 and $4 per 1M from December 1, and one hour of footage at default settings is roughly 1,044,000 tokens, so your bill is set by how much video you hand it, not by the model. Shrink the input first: ffmpeg -ss 00:12:30 -i in.mp4 -t 90 -vf "fps=0.2,scale=640:-2" -an out.mp4 trims to the window that matters, samples one frame every five seconds, and drops the audio track. FFmpeg Micro runs that same prep as one API call, no servers to run, metered per second of the segment it actually processes.

What Argon charges you for a video, exactly

Argon accepts text, images, video, audio, and PDFs into a 1,048,576-token context and returns text. Google's model card prices it at $2 input / $10 output per million tokens through November 30, then $4 / $20 from December 1. Cached input doubles with it, $0.10 to $0.20.

Video becomes tokens through two meters at once. Google's video understanding docs say frames are sampled at 1 FPS by default, and the media resolution page prices each frame at 258 tokens, or 66 with media_resolution set to low. Audio runs separately at 32 tokens per second.

Google's own token counting page gives a flat 263 tokens per second instead, against 290 from the per-frame math at 1 FPS (258 + 32) and 98 at low resolution. Use 263 for a ballpark, per-frame when you're deciding what to change.

Two ceilings matter: Argon takes roughly 45 minutes of video with audio, roughly an hour without, and 10 videos per prompt. Inline base64 is capped under 100 MB; the File API takes 2 GB free, 20 GB paid. We broke those down in The Gemini video file limit isn't one number. It's four.

One hour of footage, priced six ways

Take a 60-minute 1080p screen recording with speech, the shape of input an agent pipeline actually gets handed. Priced by what you send, at both rates:

What you sendTokensThrough Nov 30From Dec 1
Full hour, default resolution, with audio1,044,000$2.09$4.18
Full hour, `media_resolution: low`, with audio352,800$0.71$1.41
Full hour at 0.2 FPS, low res, no audio47,520$0.10$0.19
Audio track only, full hour115,200$0.23$0.46
A 90-second window, default resolution, with audio26,100$0.05$0.10
12 stills at low resolution792$0.0016$0.0032

An hour of default-resolution video is 1,044,000 tokens, the whole context window with about 4,000 left for your prompt. You can't send it anyway: an hour with audio is over the 45-minute ceiling.

Run 200 of those recordings a month and raw costs $418 today, $836 in December. Trimmed to a 90-second window, it's about $10 today and $21 in December. Prepped after the price rise costs a quarter of raw before it.

Five prep levers, as a command and as one API call

Five levers matter, one per multiplier: duration, pixels per frame, frames per second, frames total, or the visual stream entirely. Stack the ones your task tolerates. The general case is in Don't send raw video input to an AI model. Prep it in FFmpeg.; below are the Argon-specific numbers.

Trim to the window that matters

Trimming is the biggest lever because it multiplies against everything else. Put -ss before -i so FFmpeg seeks instead of decoding from zero:

ffmpeg -ss 00:12:30 -i recording.mp4 -t 90 -c copy window.mp4

The same job as one API call:

curl -X POST https://api.ffmpeg-micro.com/v1/transcodes \
  -H "Authorization: Bearer $FFM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": [{ "url": "https://cdn.example.com/recording.mp4" }],
    "outputFormat": "mp4",
    "options": [
      { "option": "-ss", "argument": "00:12:30" },
      { "option": "-t",  "argument": "90" },
      { "option": "-c",  "argument": "copy" }
    ]
  }'

You get back a job id with status: "pending"; poll GET /v1/transcodes/{id} until it reads completed and take output_url.

FFmpeg Micro meters video processed per second, with no rounding up to the minute, so pulling a 90-second window out of an hour-long source bills as 90 seconds, not an hour. That's 9 tokens. Two hundred of those trims is 1,800 tokens, inside the 2,500 a $19.99 Starter plan grants monthly, and failed jobs are never billed.

Drop to the lowest resolution the task tolerates

Pixel downscale and media_resolution: low are different knobs, and only one moves tokens. The request flag takes each frame from 258 tokens to 66 no matter what you upload. Downscaling before upload saves bandwidth and upload time, which matters on a 2 GB source, but not the per-frame count. Google's caveat: low resolution costs fine text legibility, so for reading a dashboard or a receipt, keep frames at default and cut duration.

Reduce the frame rate

Frame rate beats everything on long static footage: at 1 FPS an hour is 3,600 billable frames, and a screen recording of someone scrolling doesn't change meaningfully 3,600 times:

ffmpeg -i window.mp4 -vf "fps=0.2,scale=640:-2" -an \
  -c:v libx264 -crf 28 prepped.mp4

fps=0.2 keeps one frame every five seconds, taking an hour from 3,600 frames to 720. Argon can also do this server-side: videoMetadata accepts startOffset, endOffset, and fps, so you can ask for fps: 0.2 without touching the file. Prep wins when the file also has to get smaller to upload at all.

Send stills instead of the clip

Twelve well-chosen frames answer "what happens in this video" for plenty of agent tasks, at 792 tokens instead of 1,044,000. Use scene detection so you get the moments that changed, not twelve frames of the same slide:

ffmpeg -i recording.mp4 \
  -vf "select='gt(scene,0.3)',scale=640:-2" \
  -fps_mode vfr -frames:v 12 -q:v 3 frame_%02d.jpg

Use -fps_mode, not the deprecated -vsync, which doesn't behave identically. To send one image instead of twelve, the tile filter packs them into a contact sheet: fps=1/300,scale=640:-2,tile=3x4 gives twelve frames spanning an hour in a single JPEG. The API shape for both is in the thumbnail recipe.

Pull the audio out when only speech matters

Audio-only input is 32 tokens per second against 290 for video with audio, an 89% cut, and for "summarize this call" it loses nothing you were using. Gemini downsamples audio hard on ingest, so a 320 kbps stereo track buys you upload time and nothing else:

ffmpeg -i window.mp4 -vn -c:a libmp3lame -b:a 64k -ac 1 -ar 16000 speech.mp3

The extract-audio recipe has the API body. Order matters for your bill: trim first, then extract from the trimmed clip, because extracting from the full hour meters the full hour.

Where the prep node goes in n8n

n8n's Google Gemini node has an Analyze Video operation that takes a binary or a file reference, with no prep step inside it. Prep has to be its own node upstream. A working four-node shape:

  1. Trigger with the source URL (webhook, Drive watch).
  2. HTTP Request node to POST https://api.ffmpeg-micro.com/v1/transcodes with the trim and downscale options.
  3. A poll loop: HTTP Request to GET /v1/transcodes/{{ $json.id }} behind a Wait node, until status is completed.
  4. Google Gemini node, Analyze Video, pointed at the signed output URL.

n8n Cloud can't run FFmpeg locally and has no Execute Command node, so step 2 is an HTTP call either way. Why n8n says "No usable ffmpeg was found" covers the self-hosted version. Full workflow JSON is in the n8n Cloud walkthrough.

When to skip the prep entirely

For a single three-minute clip you analyze once, prep is wasted motion. Set videoMetadata offsets and media_resolution: low in the request: 180 seconds at low resolution with audio is 17,640 tokens, about $0.04.

Google's agentic video understanding is the other reason to skip. It reads the transcript first and loads visual segments at higher frame rate only where they're needed, cutting token usage up to 88% at no extra fee. It's off by default on Argon. Coverage of the launch notes it isn't recommended for short clips or broad full-video summaries, where static mode is faster.

Preprocessing earns its place where both of those stop:

  • The file is over 100 MB and you want inline data, or over 20 GB and the File API won't take it.
  • The source runs past the 45-minute-with-audio ceiling and has to be split regardless.
  • Upload time is the bottleneck, not tokens. Server-side fps doesn't make a 4 GB file travel faster.
  • The input you want is stills or an audio track, which Argon can't produce for you.
  • The clip has no usable speech, which agentic mode's transcript pass needs.
  • You're sending the same source to many prompts, or need more than 10 videos in one prompt.

Common pitfalls

A few prep mistakes cost real money or accuracy:

  • -ss before -i seeks fast but lands on the nearest keyframe, so with -c copy your window can drift a second or two. Move it after -i and re-encode if the boundary matters.
  • -c copy and -vf don't combine. Any filter means a re-encode, so trim with copy in one pass and filter in a second.
  • scale=640:-1 can produce an odd height that libx264 rejects. Use -2 to round to an even number.
  • -an strips the audio that agentic mode's transcript pass needs. Don't drop audio and enable agentic video in the same change.
  • The December 1 change is to the price, not your token count. A pipeline measured in October bills the same tokens for double the money.

FAQ

What does one hour of video cost as Gemini 4 Argon input?

One hour of video at Argon's default settings is about 1,044,000 tokens: $2.09 through November 30, 2026 and $4.18 from December 1. That's 1 FPS sampling at 258 tokens per frame plus 32 tokens per second of audio, and it fills the 1,048,576-token context almost exactly.

Does media_resolution: low make FFmpeg prep unnecessary?

Setting media_resolution: low cuts per-frame cost from 258 tokens to 66, but it doesn't touch duration, frame rate, or file size. Those multipliers stack with low resolution: an hour at low resolution is still 352,800 tokens, while the same hour trimmed to 90 seconds is 26,100 at full resolution.

Should I send audio instead of video to Gemini?

Send audio alone when the task only needs speech, because audio is 32 tokens per second against 290 for video with audio at default resolution. You give up on-screen text, UI state, faces, product shots. For call summaries that's no loss; for "what did the user click" it's the whole task.

Does the preprocessing step cost more than the tokens it saves?

Trimming a 90-second window out of an hour-long recording costs 9 FFmpeg Micro tokens, because billing runs per second of video processed with no rounding to the minute. That trim saves about $2.04 of Argon tokens today and $4.08 after December 1, so the prep pays for itself on the first video.

If an agent is calling Argon rather than a workflow, hand it the prep too: the FFmpeg Micro MCP server exposes trim, downscale, frame extraction, and audio extraction as tools your agent calls before it uploads, over OAuth with no API keys in the config. The free tier is 200 tokens, about 33 minutes of input video, no card, so you can price your own footage both ways before December 1: sign up free.

About Javid Jamae

Founder & CEO at FFmpeg Micro

Javid is a software engineer, author, and entrepreneur with over 25 years of professional software development experience across enterprise, startup, and consulting environments. He founded FFmpeg Micro to make video processing accessible to developers through a simple, automation-first REST API.

Software EngineeringVideo ProcessingFFmpegCloud ArchitectureAPI DesignAutomation

Ready to process videos at scale?

Start using FFmpeg Micro's simple API today. No infrastructure required.

Get Started Free