What does video-tighten do?
Requires the resolve-bridge skill installed next to this one (it finds it at ../resolve-bridge, or set RVS_BRIDGE), plus ffmpeg.
Workflow
- Where are we.
python3 <resolve-bridge>/scripts/rvs.py --workdir <folder> status. If there is no state yet, adopt the timeline the user wants to tighten (see resolve-bridge). - Dry run. Changes nothing in Resolve:
Writespython3 scripts/tighten.py --workdir <folder><folder>/.edit/tighten/REPORT.md,report.jsonandplan.json. - Read the report with the user. Show the runtime change, the number of shortened pauses and every flag. Flags mark cuts the script could not fix (a word starting before the in-point with other speech right before it), so someone has to check them by ear, or pick a different take.
- Protect performed pauses. Silence that is acting (a look, a beat before a punchline, typing on camera) must not be cut. Ask the user, then re-run with
--skip <clip name or timeline start frame> .... - Apply.
Buildspython3 scripts/tighten.py --workdir <folder> --skip ... --apply<base>_vNN_tighten, archives the previous version, saves the project. Every flag becomes an issue inEDIT_CHECKLIST.md, located by clip name and timecode in the new timeline. Tell the user the new timeline name and the issue ids.
What it does
| Default | Option | |
|---|---|---|
| Air before the first word | 0.22 s | --pre |
| Air after the last word | 0.38 s | --post |
| Edge may grow into silence of the same take (rescues clipped words) | up to 0.5 s | --max-extend |
| Never closer than this to other sound (breath, mumble, next take) | 0.08 s | --guard |
| Pauses inside a clip longer than … | 0.75 s | --pause-max |
| … are shortened to | 0.3 s | --pause-keep |
| Never create a piece shorter than | 0.5 s | --min-piece |
| Only fix edges, keep all pauses | off | --no-pauses |
| Audio tracks that are not dialogue (music) | none | --ignore-audio-tracks 3 4 |
- Speech detection is energy-based (
resolve-bridge/scripts/rvs_audio.py): thresholds come from the whole source file, words are found with a strong threshold and their edges grow through soft endings and attached breaths. It suits close-mic recordings. In noisy locations, check the flags more carefully. - Every shortened pause becomes a jump cut (the clip is split). Run video-framing afterwards to hide them with punch-ins, or cover them with b-roll.
- Ripple: later clips move up. Video-only items (b-roll, overlays) are remapped onto the new timing and shortened where their section got shorter. B-roll that would end up under 0.5 s is dropped and listed.
- Mode: this is a structural step, so it uses resolve-bridge's build. Titles and generators on the current timeline are not carried over (the bridge warns). Run tighten before adding graphics.
Not handled yet
- Overlapping dialogue (J/L cuts already in the timeline): those clips are left as they are and flagged.
- Filler words ("um", "you know") need a transcript; planned with transcription in a later skill.