splice edits video by editing a JSON document. You make typed changes — trim,
retime, caption, composite, grade — and splice compiles the result into ffmpeg
argv, runs it, and caches each step.
Every command answers with exactly one JSON object, so a program (or a person
reading a transcript) can tell what happened without scraping logs.
Why it exists
Raw ffmpeg is a filter-graph language: correct, but hard to review, hard to version, and easy to get subtly wrong.splice keeps the edit in splice.json,
which you can diff, hand to a reviewer, or regenerate from a script.
Quickstart
From nothing to a rendered file in five commands.
Install
npm, the ffmpeg requirement, and what to do when a system build is broken.
Command reference
Every verb, with the flags that matter.
For agents
The loop, the contract, and the anti-patterns.
What it is good at
- Cutting and retiming a recording, including removing fillers and long silences.
- Captions: transcribe, review the SRT, burn it in as two separate decisions.
- Compositing: layers, a moving camera, sliding placement, masks, one grade.
- Iterating cheaply: a preview profile, a per-step cache, and
planto see the argv before spending time. - Being driven by an agent: one JSON object per command, warnings that say what will not do what you asked, and errors that name the command that clears them.
What it is not
- A transcoder. If the job is “change container” or “re-encode at another bitrate”, use ffmpeg directly.
- A timeline GUI. The document is the interface.
- A streaming or broadcast tool. It renders files.
Requirements
node 18+ and ffmpeg with libx264 and libass. Linux builds are static, so
Alpine works too. splice doctor is the first command to run anywhere new: it
reports which ffmpeg won, which encoders and filters exist, and whether a font
was found.