Claude Code edits videos by running tools for you. It can run FFmpeg on your computer to cut, join and convert files, or it can call a video editing API through MCP: Claude writes the edit as a JSON document, the API renders it in the cloud with voice-over, captions and music, and Claude hands you the MP4 link. Claude cannot watch your footage; it works from your instructions, file details and, when it needs one, a transcript.

This guide sets up the second route with JSON2Video in about five minutes, then shows three prompts and what they produce. It also covers what Claude Code does better with FFmpeg alone, and how to fix the usual problems.

Get a free API key: 10 minutes of video included →


Two ways Claude Code edits video

FFmpeg on your computer Editing API through MCP (JSON2Video)
What Claude writesFFmpeg commands and scriptsA movie JSON: scenes and elements
Where it rendersYour computerJSON2Video's cloud; you get an MP4 URL
Voice-over and captionsBring your own text-to-speech and transcription servicesBuilt in: voice and subtitles elements
Many videos from dataClaude writes a loop; your computer renders each oneOne template with variables, rendered in the cloud, several at a time
Runs without your computerNoYes: the same JSON works from n8n, Make or any server
CostFree software1 credit per second of output; 600 free credits

They are not rivals: Claude Code can use both in the same session. More on FFmpeg below.


Set up: connect JSON2Video to Claude Code

  1. Create a free account and copy your API key from the dashboard. No credit card needed.
  2. Install the CLI (Node.js required):
    npm install -g @json2video/cli
  3. Store your API key:
    json2video auth --api-key YOUR_API_KEY
  4. Connect it to Claude Code. In your project folder, run:
    json2video mcp install claude
    This adds the json2video server to the project's .mcp.json and installs the create-video skill in .claude/skills/.
  5. Check it. Restart Claude Code and run /mcp. The json2video server should be listed as connected.

Claude now has tools to validate and render videos (validate_movie, render_video, check_status), browse templates and examples, read the docs (get_help), check your credits (get_account) and manage your media library (media_upload and others).

Claude Desktop can use the same server. Add this block to its claude_desktop_config.json and restart the app:

{
  "mcpServers": {
    "json2video": {
      "command": "npx",
      "args": ["-y", "@json2video/cli", "mcp", "run"],
      "env": {
        "JSON2VIDEO_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

It is a local (stdio) MCP server, so it does not work as a claude.ai connector yet. Cursor, VS Code and Windsurf are covered in the MCP server guide.


Three prompts and what they produce

1. Edit an existing clip: trim, title, voice-over, captions, music

Take beach-02.mp4, keep 8 seconds starting at 0:02 and mute it. Add the title "Summer on the coast", a one-line voice-over, captions and soft piano music underneath.

If the clip is on your computer, Claude uploads it to your media library with media_upload and uses the URL it gets back. Then it writes:

{
  "resolution": "full-hd",
  "elements": [
    { "type": "audio", "src": "https://cdn.json2video.com/assets/audios/soft-piano.mp3", "volume": 0.2 },
    { "type": "subtitles", "language": "auto" }
  ],
  "scenes": [
    {
      "elements": [
        { "type": "video", "src": "https://assets.json2video.com/assets/videos/beach-02.mp4", "seek": 2, "duration": 8, "muted": true },
        { "type": "text", "text": "Summer on the coast", "style": "003", "position": "top-left", "x": 80, "y": 80 },
        { "type": "voice", "text": "Three days, one coastline, and no plans at all.", "voice": "en-US-AndrewMultilingualNeural", "start": 1 }
      ]
    }
  ]
}

Outcome: an 8-second 1080p MP4. seek sets where the clip starts and duration how long it plays. The captions are transcribed from the audio. If your clip is a recording of someone speaking, leave out muted and the voice element: the subtitles element then captions the speaker.

2. A narrated short from a script

Make a vertical short, "3 free things to do in London", one scene per tip with these three photos, a male voice-over, word-by-word captions and upbeat music.

{
  "resolution": "instagram-story",
  "elements": [
    { "type": "audio", "src": "https://cdn.json2video.com/assets/audios/uplifting-corporate.mp3", "volume": 0.2 },
    {
      "type": "subtitles",
      "language": "en",
      "settings": { "style": "boxed-word", "font-size": 90, "position": "bottom-center" }
    }
  ],
  "scenes": [
    {
      "elements": [
        { "type": "image", "src": "https://cdn.json2video.com/assets/images/london-01.jpg", "zoom": 2 },
        { "type": "text", "text": "3 free things to do in London", "style": "003", "position": "top-left", "x": 60, "y": 120 },
        { "type": "voice", "text": "Three free things to do in London. First, the big museums cost nothing to enter.", "voice": "en-US-AndrewMultilingualNeural" }
      ]
    },
    {
      "transition": { "style": "fade", "duration": 0.5 },
      "elements": [
        { "type": "image", "src": "https://cdn.json2video.com/assets/images/london-02.jpg", "zoom": 2 },
        { "type": "voice", "text": "Second, walk along the South Bank at sunset.", "voice": "en-US-AndrewMultilingualNeural" }
      ]
    },
    {
      "transition": { "style": "fade", "duration": 0.5 },
      "elements": [
        { "type": "image", "src": "https://cdn.json2video.com/assets/images/london-03.jpg", "zoom": 2 },
        { "type": "voice", "text": "Third, watch the Changing of the Guard. Follow for more.", "voice": "en-US-AndrewMultilingualNeural" }
      ]
    }
  ]
}

Outcome: a 1080×1920 MP4 of roughly 15 seconds. Each scene lasts as long as its voice-over, so changing the script never breaks the timing. Managed voices (Azure and ElevenLabs) and captions use no extra credits today.

3. Fifty videos from a CSV or a Google Sheet

Turn this into a template: the address, price, photo and script change for each property. Then render one video per row of listings.csv.

Claude replaces the fixed values with {{variables}}. The variables block holds the defaults, and each render sends its own values:

{
  "resolution": "instagram-story",
  "variables": {
    "address": "123 Oak Street, Portland, OR",
    "price": "$849,000",
    "photo": "https://cdn.json2video.com/assets/images/sample-house-front.jpg",
    "script": "Just listed: 123 Oak Street, a four-bedroom craftsman home, at 849,000 dollars."
  },
  "elements": [
    { "type": "audio", "src": "https://cdn.json2video.com/assets/audios/uplifting-corporate.mp3", "volume": 0.2 },
    {
      "type": "subtitles",
      "language": "en",
      "settings": { "style": "boxed-word", "font-size": 90, "position": "bottom-center" }
    }
  ],
  "scenes": [
    {
      "elements": [
        { "type": "image", "src": "{{photo}}", "zoom": 2 },
        { "type": "text", "text": "{{address}}", "style": "003", "position": "top-left", "x": 60, "y": 120 },
        { "type": "text", "text": "{{price}}", "style": "003", "position": "top-left", "x": 60, "y": 260 },
        { "type": "voice", "text": "{{script}}", "voice": "en-US-EmmaMultilingualNeural" }
      ]
    }
  ]
}

Then there are two ways to make the 50 videos:

Outcome: 50 MP4s, one per property. At about 10 seconds each, that is roughly 500 credits.


What Claude Code does with FFmpeg directly

FFmpeg is free and already does a lot, and Claude Code writes FFmpeg commands well. For these jobs, you do not need an API:

An API becomes the better choice when you want a voice-over and captions without setting up extra services, when the videos must be made from a server, n8n or Make rather than your laptop, when non-developers need to change the template, or when you need dozens of videos rendered at once. Our FFmpeg course covers the do-it-yourself route.

Other options in Claude Code: Remotion (React code, rendered on your computer or Lambda) for bespoke motion graphics, and other editing APIs with MCP servers, such as Shotstack (beta) and Creatomate. Our comparison of video editing APIs puts their prices side by side.


Troubleshooting

Problem What to do
Claude doesn't use the JSON2Video toolsRun /mcp. If json2video is not listed, check that you ran json2video mcp install claude in the folder where you start Claude Code, then restart it. To see the server's own errors, run json2video mcp run in a terminal.
401 or 403 errorsThe API key is missing or wrong. Run json2video auth --api-key YOUR_API_KEY again, or set JSON2VIDEO_API_KEY in the env block of the MCP config.
"Invalid movie" from validate_movieThe JSON does not match the schema. The error names the path; Claude can usually fix it on its own and validate again.
"Not enough credits" or "out of credits"Ask Claude to run get_account to see what is left. Do not retry: buy a pack or upgrade. Each second of video costs one credit, and failed renders are not charged.
"Movie duration … is longer than your plan allowance"The free plan renders videos of up to 60 seconds; paid plans and packs allow 30 minutes. The render is refused before it starts and nothing is charged.
A watermark on the videoFree-plan renders carry a JSON2Video watermark. Any paid plan or credit pack removes it.

Frequently asked questions

How do I make Claude edit my videos?

Use Claude Code. For simple cuts and conversions, ask it to use FFmpeg on your computer. For finished edits with voice-over, captions and music, connect a video editing API: with JSON2Video, run npm install -g @json2video/cli, json2video auth --api-key YOUR_API_KEY and json2video mcp install claude, then describe the edit in plain words.

Can Claude watch my footage to decide the cuts?

No. Claude does not take video as input. Editing workflows give it a transcript with timestamps, and sometimes still frames, and Claude decides the cuts from those.

Is there a free Claude video editor?

Claude has no built-in video editor. Claude Code with FFmpeg costs nothing beyond your Claude plan. JSON2Video's free account gives 600 credits (10 minutes of video, up to 60 seconds per video, watermarked) with no credit card.

Does the JSON2Video MCP server work in claude.ai?

Not yet. It is a local (stdio) server, so it runs in Claude Code and Claude Desktop, and in Cursor, VS Code and Windsurf. claude.ai only accepts remote MCP servers as custom connectors.

Can Claude Code remove silences from a video automatically?

Yes, with FFmpeg and a transcription service: the transcript's word timestamps show where the pauses are, and Claude writes the FFmpeg cuts. JSON2Video does not detect silences itself, but it can apply cut points you already have.

Back to all the ways to make videos with Claude, see how to use AI-generated clips, Claude animation and video MCP servers for Claude. For the API side, read the video editing API guide.

Published on October 18th, 2026

Author
Joaquim Cardona
Joaquim Cardona Senior Internet business executive with more than 20 years of broad experience in Internet business, media sector, digital marketing, online video and mobile technologies.