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 writes | FFmpeg commands and scripts | A movie JSON: scenes and elements |
| Where it renders | Your computer | JSON2Video's cloud; you get an MP4 URL |
| Voice-over and captions | Bring your own text-to-speech and transcription services | Built in: voice and subtitles elements |
| Many videos from data | Claude writes a loop; your computer renders each one | One template with variables, rendered in the cloud, several at a time |
| Runs without your computer | No | Yes: the same JSON works from n8n, Make or any server |
| Cost | Free software | 1 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
- Create a free account and copy your API key from the dashboard. No credit card needed.
- Install the CLI (Node.js required):
npm install -g @json2video/cli - Store your API key:
json2video auth --api-key YOUR_API_KEY - Connect it to Claude Code. In your project folder, run:
This adds thejson2video mcp install claudejson2videoserver to the project's.mcp.jsonand installs thecreate-videoskill in.claude/skills/. - Check it. Restart Claude Code and run
/mcp. Thejson2videoserver 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:
- From Claude Code or your own script. One render per row: Claude reads the CSV and submits the JSON once per row with that row's values, or writes a short script that calls
POST /v2/moviesin a loop. You can also save the JSON as a template (in the editor,Template → Import JSONthenSave as template) and send only{"template": "<id>", "variables": {…}}per row. The loop stays on your side. - From the dashboard, with Automations. Create an automation from the saved template: its variables become the columns of a table. Import the CSV, or on a paid plan connect a Google Sheet, then press Render: one video per row, with each row's status, the cost shown before anything starts, and rows with empty fields left out before they are charged. Automations are a dashboard feature: Claude cannot create or start them through MCP. The free plan allows 10 rows per automation; paid plans allow 5,000.
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:
- Converting and compressing: change the format, codec, resolution or bitrate; make a GIF; extract the audio or a thumbnail.
- Simple cuts and joins of files on your disk.
- Cutting silences and filler words from a talking-head recording. This is what most "Claude Code video editing" videos show, and it works on transcripts, not on the picture: a speech-to-text service produces word-level timestamps, Claude decides which parts to drop, and FFmpeg cuts them. Open-source projects such as video-use package this workflow. JSON2Video does not detect silences or filler words; once you have the cut points, it can apply them with
seekandduration.
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 tools | Run /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 errors | The 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_movie | The 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 video | Free-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