Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Avenox Studio — transcript-driven rough cut (silence + flub/retake removal). Use when cutting a raw talking-head or screen recording: remove dead air AND bad takes/restarts. Proven recipe with real gotchas baked in. Triggers: "rough cut", "cut the silences", "remove flubs/retakes", a raw screen recording to trim. Part of avenox-video step 2.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 127% | 0% |
Two kinds of cut: silence (dead air, mechanical → auto-editor) and flubs/retakes (a restarted sentence, semantic → transcript + agent judgment). The director approves the flub list before anything is cut.
Job dir (LOCAL — never inside a synced/cloud folder): $STUDIO_JOBS/<job>/{raw,cut,transcript,frames}
> Set STUDIO_JOBS to wherever you keep heavy media, e.g. > export STUDIO_JOBS=~/video/projects. Keeping media out of a synced folder > matters: cloud sync will thrash on multi-GB intermediates.
bashcd "$STUDIO_JOBS/<job>" python3 -c " import os, certifi; os.environ['SSL_CERT_FILE']=certifi.where(); os.environ['REQUESTS_CA_BUNDLE']=certifi.where() import mlx_whisper, json r=mlx_whisper.transcribe('<RAW>', path_or_hf_repo='mlx-community/whisper-large-v3-turbo', language='<LANG>', word_timestamps=False) segs=[{'i':i,'start':round(s['start'],2),'end':round(s['end'],2),'text':s['text'].strip()} for i,s in enumerate(r['segments'])] json.dump({'text':r['text'].strip(),'segments':segs}, open('transcript/raw_timed.json','w'), ensure_ascii=False, indent=1) "
~48s for 14 min of audio on an M-series Mac. Local is the default — it is faster and cheaper than any API round trip at this length. Note that most LLM-routing proxies have no whisper endpoint; if you must go remote, use a dedicated speech API.
Scan raw_timed.json for:
Present as a table (mm:ss + text). The director approves before cutting. This step stays human-gated — an agent cutting semantic content unreviewed will eventually remove a real point.
Order matters: flub timecodes are in RAW coordinates, so cut flubs first; silence removal shifts the timeline underneath them.
Flubs via ffmpeg select (frame-precise; build KEEP as the complement of the cut ranges):
bashKEEP="between(t,4.96,46.16)+between(t,48.98,69.42)+...+between(t,LAST,99999)" ffmpeg -y -i "<RAW>" \ -vf "select='$KEEP',setpts=N/FRAME_RATE/TB" \ -af "aselect='$KEEP',asetpts=N/SR/TB" \ -c:v h264_videotoolbox -b:v 18M -c:a aac -b:a 256k cut/flubcut.mp4
Silence via auto-editor:
bashexport SSL_CERT_FILE="$(python3 -c 'import certifi;print(certifi.where())')"; export REQUESTS_CA_BUNDLE="$SSL_CERT_FILE" python3 -m auto_editor cut/flubcut.mp4 --edit "audio:threshold=8%" --margin 0.5s \ -c:v h264_videotoolbox -b:v 16M --no-open -o cut/draft_v1.mp4
CERTIFICATE_VERIFY_FAILED. Always export SSL_CERT_FILE first.
--cut-out for flubs. In v29 a multi-range--cut-out a,b c,d … leaks the last range as a positional input file ("Could not open input file"). Use the ffmpeg select filter for content cuts — it is also frame-precise, where auto-editor's cuts are coarser.
--margin, not --threshold. 0.15s ≈ very tight(~0.3s pauses); 0.5s ≈ ~1s max pauses, which reads as flowy rather than clipped. Tune margin for rhythm, leave threshold alone.
threshold=8% is calibrated to one specific voice/mic. Re-calibrate foryour own setup: too low clips soft word-endings, too high leaves dead air.
wrapper into its own cache.
h264_videotoolbox) for fastreview; produce the master later via mltgen/.mlt, or a single-pass keep-list at libx264 CRF 18.
land accurately → hand to the avenox-video graphics step.
Other measured skills in the registry, with their headline benchmark lift.