v1.4.14
Automated release: version and notes generated from pull requests merged since 1.4.13.
- Boundary sweep (561 runs, 42 tools × 23 inputs). Two runs writing the same output at once both reported
completedwhile one of them described the other's file:run()now holds a lock file (.<name>.ffskill-lock, pid inside) next to the output and the second run is refused askind: input; a lock whose pid is dead or older than an hour is taken over. - Odd source dimensions (641x359 screen captures, 4:4:4 masters) failed 15 tools with "width not divisible by 2":
run()retries the encode with an even-dimension scale in front of the filter chain; a-filter_complexgraph that cannot take it is refused askind: inputwith the fix named. cut.py's re-encode path andpad.py --startstream-copied a subtitle track whose cues then fired early (cut's container grew to 2 s for a 1 s cut): both drop it and reportdropped_non_av_streams, asfit/freezealready did.cut.pycounts a keyframe snap of exactly the tolerance as outside it.render.py --dry-runplanned ten commands for a clip whose source does not exist; the source is checked first.render.pyandreport.pyanswered an unwritable output directory with a traceback; an unwritable directory is now refused askind: inputby every writing tool before ffmpeg runs.verify.py --jsonprinted two JSON documents for a non-media input.color.py --correct/--luton an HDR source tagged PQ/HLG pixels as BT.709 without a tone map: refused askind: inputnaming--to-sdr(--forcegrades the raw values anyway).redact.py --mode blurfailed on regions under 40 px with the default radius (clamped, chroma planes get their own).loudness.py --measure-only --jsonprints the contract's document shape.- Sweep P3s:
export.py's HDR warning is in the JSON (notes);graphics.pyrefuses a frame under 64 px instead of building a 0-height bar;insert.pyrefuses a video where it wants a still;look.pybuilds a sheet from a one-frame clip instead of printing "wrote" and then failing;batch.py --dry-runleaves no directories behind andrender.pyremoves its auto-named work directory on every exit path. - fix: boundary sweep -- output lock, even-dimension retry, subtitle drops in cut/pad, unwritable dirs, dry-run source check, verify single JSON, redact radius, HDR refusal in color, and the P3s (#190)
What's Changed
- fix: boundary sweep (561 runs) -- output lock, even-dimension retry, subtitle drops, unwritable dirs, dry-run checks, and the P3s by @claude[bot] in #190
Full Changelog: v1.4.13...v1.4.14