Hisashi Space

November 9, 2026 · 13 min read

Automate Video Editing With Claude Code: 69 Videos in 4 Days, No Editing App

Automate video editing with Claude Code, and you can finish 69 videos in four days without opening an editing app once. Thirty-three more came back from my final check.

I have run my own company in Japan for 22 years. I make videos for three channels, and editing by hand was never going to fit into my week.

I made a video about it. This article has what the video has no room for: the real shape of the files, the full list of the automatic checks, the numbers for the video you may be watching, the tools, a prompt you can copy to start, and what I have not tried.

69 videos, no editing

The short version

  • The video is built from the script, not from a recording. There is no footage to cut.
  • Step 1: every line of the script goes to a voice model, and each line's start and end time is saved. That list of times is the clock for everything.
  • Step 2: the video is a web page that Claude Code writes. Each scene is a small piece of the page, tied to one line.
  • Step 3: a headless browser takes a picture of the page 30 times a second. ffmpeg joins the pictures with the voice and the music.
  • Step 4: before any export, the build runs about 20 automatic checks. If one fails, the file is not made.
  • Step 5: I look at the plan as still pictures, then at the finished video once. That is the human part.
  • Every mistake I catch becomes a new check, so I never review that mistake again.
  • This is not a get-rich method. My short videos stall around 1,000 views and I do not have a hit yet. What I got is time.
  • It suits explainer videos. It does not suit vlogs, because there is nothing to film.

Is this the same as AI video editing?

Built from the script

If you search for AI video editing, most results are apps. They add captions, cut the pauses, or pick highlights from a recording you already made.

Mine starts earlier. There is no recording. The video is built from the script itself, line by line.

That has a cost. You will not see me walking around with a camera. It fits explainer videos like this one, not vlogs.

AI video editing apps Claude Code video editing, my way
Starts from A recording you made A script, one sentence per line
Voice Yours, as recorded A voice model trained on my own voice
Captions Added after the fact Timed from the voice, word by word
One sentence changes Re-cut, re-sync Only that line gets a new voice. The rest moves on its own
Quality control You, watching Automatic checks, then me, twice
Best for Talking head, interviews Explainers, screen demos

The numbers: this video and the one I used as the example

The video says "about seven thousand pictures" and "twenty-six clips". Those numbers are from a different video, a four-minute one about Claude Code hooks, that I used as the example. Here are both, taken from the files, side by side.

This video (Claude Code video editing) The hooks video
Length 377.2 seconds (6:17) 237.8 seconds
Pictures taken (30 per second) 11,314 7,132
Script lines 49 32
Scenes (cuts) 103 not counted
Stock footage clips 42 26
Clips the rule required 38 not counted
Picture size 1920 by 1080 1920 by 1080
Final loudness -14.4 LUFS (the target is -14, the build stops outside plus or minus 0.5) not counted

This video also has 45 card images (the charts and text cards you see) and 10 AI-made illustrations, each used once, with no text and no people in them. I did not record how long the render took, so I will not give you a number for it.

Step 1: the voice comes first

Voice comes first

The script is a JSON list, one entry per sentence. Here is one real entry from this video. The ja field is my Japanese version, and the show note is written in Japanese in the file; I translated it here.

{
  "scene": "m1",
  "part": "mech",
  "text": "And for each line, it saves exactly when it starts and when it ends. That list of times becomes the clock for everything else.",
  "ja": "(my Japanese version of the same sentence)",
  "show": "A table of start and end seconds for each line, and a clock icon"
}

Every text goes to ElevenLabs, with a voice I trained on my own voice (model eleven_v4, stability 0.85). Each line becomes its own audio file. If a line's text has not changed, it is not generated again.

Then the lines are joined into one voice track, and a file is written with the start and end of every line. This is the real entry for the line above:

{
  "scene": "m1",
  "part": "mech",
  "text": "And for each line, it saves exactly when it starts and when it ends...",
  "show": "A table of start and end seconds...",
  "s": 93.696,
  "e": 100.856
}

The clock for everything

s and e are seconds. The file also holds the total length (377.166 seconds for this video) and a loudness reading for every 1/30 of a second, 11,314 of them.

Two small things happen while the voice is built, and both are logged:

  • Each line is brought to the same loudness, and the log says how many dB it moved.
  • Breaths and long gaps between words are trimmed, using word times that a local Whisper model (mlx_whisper) reads from each line's audio.

Those word times matter later. A yellow box on screen can appear when I say its word, because the clock knows the word.

Only line 3 changes

And this is why I start with the voice. Change one sentence in the script, and only that line gets a new voice. The clock updates, and every scene after it moves by itself. In a normal editor, that same fix means dragging half the timeline.

Each line says what to show

Next to each line, the show note says what to put on screen: a logo, a chart, a real screen. That note is what Claude builds each scene from.

Step 2: the video is a web page

The video is a web page

Claude Code writes one HTML page, 1920 by 1080. Every scene is a small piece of that page: a card image, a screenshot, a yellow highlight box, a caption. Each piece knows which line it belongs to, so it appears when that line starts.

In my build script, every scene is a short list of pieces, made with a few helpers:

  • a card (a chart or text card)
  • an illustration
  • a stock footage clip
  • an emoji block
  • a screenshot with a heading
  • a typewriter line

This video ended up with 103 of those pieces. Two rules are built into the script itself and stop the build with an error:

  • The same picture cannot appear twice in one video.
  • The last 20 seconds must use the end versions of the cards, the ones that keep clear of YouTube's end screen.

Screenshots come from the real apps. Before one goes in, a check looks for email addresses and card numbers and blurs only those, not the logos next to them.

Step 3: a browser takes the pictures

4 browsers at once

A headless Chromium, driven by Playwright, opens the page and takes a picture of it 30 times a second. Four of them work at once, each on its own quarter of the frames. If any of them fails and a frame is missing, the run stops. It does not quietly skip a frame.

Then ffmpeg joins the pictures with the voice and the music. The video is encoded with the Mac's hardware H.264 encoder, with the bitrate set to 10 Mbps. The loudness is measured and corrected to -14 LUFS, and the run stops if the result falls outside plus or minus 0.5. This video came out at -14.4.

The music is planned too. Each scene has a mood in a small file: pulse, calm, tense, drive, news, bright, dark, warm. The track changes when the mood does.

And real footage comes from free stock sites, mostly Pixabay in this video. I keep a list of the clips I accepted (46 rows) and the clips I rejected (18 rows), so the same bad clip does not come back. A rule says at least two clips every 20 seconds. For 377.2 seconds that means 38, and this video had 42.

Step 4: the checks that run before export

The step most skip

This is the step most people skip. The video says "about twenty". I counted the real list in the export script today, and there are 19 gates. Each one is there because I caught that exact mistake once with my own eyes.

# Check What it stops
1 Month names Dated phrases in the script that would age the video
2 Scene tags A broken scene opening tag in the page
3 Illustrations An illustration that did not go through the generator and its rules
4 Blur boundaries A zoom box that straddles the edge of a blurred area
5 Same screenshot The same screenshot on adjacent scenes with a different position or size
6 Card top band A caption that collides with card content in the top band
7 Highlight boxes A highlight box that cuts through text, or an empty box
8 Subtitle breaks A subtitle page or line break that falls in the middle of a phrase
9 Voice drop A line whose voice vanished from the joined track
10 Marker The yellow marker not following the line being read
11 Stock footage Fewer than two real clips per 20 seconds
12 Pacing A video where tone, speed, music and silence never vary by scene
13 Zoom on text A slow zoom on a screen full of text
14 Hook A hook with no evaluation word, or a product name with no official icon
15 Reading check A stale pronunciation check, for the Japanese version of a video
16 Layout, every half second Subtitle overlap, off-screen items, text overlap, card overflow, big labels that wrap, a subtitle break that splits a number from its unit
17 Frame count A parallel browser that dropped frames
18 End screen zones Anything in the areas where YouTube puts its end cards, in the last 20 seconds
19 Loudness A result outside -14 plus or minus 0.5 LUFS

For this video, the log shows the results of the ones that print a line:

  • same screen position: OK
  • subtitle breaks: 0 problems
  • stock footage: 42 clips in 377.2 seconds, 38 required
  • layout problems: 0
  • end screen zones: OK, 40 frames checked
  • loudness: -14.4 LUFS
  • frames: 11,314

One fails, export stops

This picture is an illustration from the video, not a copy of a real log. The point is the behavior: if one check fails, the export stops. It does not warn me. It refuses to make the file.

Day 1: 0 checks

My first video had no checks at all. You do not need all of mine on day one. You need one: the one for the mistake that annoyed you today.

Step 5: me, twice

Thumbnail A/B test

First I look at the plan, before anything is rendered. The plan is a set of still pictures, one per scene: for this video, 103 stills. Catching a problem there costs a minute. Catching it in the finished video costs a full re-export.

Comment, fix, check

I can comment on one picture: this text is too small, this box is off center. Each comment becomes a fix, and often a new check.

Then I look at the finished video once.

The thumbnail is made twice as well. For this video I made version A and version B. YouTube shows each to different people to see which gets more clicks.

So the human part of my editing is two looks per video, and the comments I leave. Everything between those looks is Claude Code.

What it still gets wrong

Three mistakes from the week I made this video.

The last 20 seconds

One: the end screen. At the end of a long video, YouTube puts clickable cards over the last 20 seconds. My closing text sat right under them, and nobody could read it. Now a check marks those two areas and keeps them empty. It looks at 40 frames and fails the build if more than 0.5 percent of the pixels in those areas are filled.

Slow, and planned

Two: zooms that were too fast. Claude zoomed into a screenshot in half a second, and you could not read anything. The rule now is at least 2.5 seconds, and the plan has to say where the zoom starts and which word it waits for.

Voice vs screen

Three: the words on screen did not match the words in the voice. The script said one thing, the screenshot showed another. That one I still catch by eye. It is about meaning, and checks are bad at meaning. That is why my final look stays.

What it does better than me

It never skips a check because it is late at night. It redoes one line in seconds instead of rebuilding a timeline. And it makes video number 69 with the same care as video number one.

What I have not tried, and who this does not suit

  • I have not tried it with recorded footage of a person. The method starts from a script, and I do not know how it would cope with a camera.
  • It does not suit vlogs, interviews or anything where the face is the point. There is nothing to film in my version.
  • It is not a way to get views. My shorts stop at about 1,000 views, and I do not have a hit yet.
  • The voice is a model trained on my own voice. If you do not want a synthetic voice, this is not your method.
  • It needs someone who can read what Claude Code builds, or at least run it. I did not test it on a first-time user.

Not a get-rich video

69 OK, 33 sent back

What I got is time. That is the whole result so far: 69 videos passed my final check in four days, and 33 more were sent back.

How to start

Start small

Start small. Do not build my whole kit. Here are the steps.

  1. Write your script as a list, one line per sentence. Four lines is enough for a first test: a hook, the problem, step one, step two.
  2. Ask Claude Code to turn each line into voice and save each line's start and end time.
  3. Ask it to build one web page with a scene for each line, timed to those numbers.
  4. Have a browser take 30 pictures a second, and join them with your voice. That is a working video.
  5. Every time you catch a mistake, do not only fix the video. Ask Claude to write a check, so it cannot happen again.

A prompt you can copy for steps 2 and 3, with your own voice service and tools filled in:

I have a script in script.json: a list of lines, each with "text".
1. Turn each line into a voice file with [your text to speech service]. Skip any line whose text has not changed since last time.
2. Join the files into one voice track and write timeline.json: for every line, its start and end in seconds, and the total length.
3. Build one HTML page, 1920 by 1080, with one scene per line. Show each scene exactly between its start and end.
4. Do not export yet. Show me the plan first.

Then, for step 5, the sentence that does the most work over time:

That text was too small to read. Fix it, and add a check that fails the build if any text on screen is smaller than 40 pixels.

Claude Code does not edit like an editor. It edits like a programmer. And a programmer never gets tired of video number one hundred.

Get the next one by email

No schedule, no filler, and real numbers when there are any.

Subscribe

← All writing