Automated release: version and notes generated from pull requests merged since 2.19.0.
Added
join.pyreports the clips' own total beside the joined length. The expected length a join is checked against comes from the transition the join applied, so a fade that took time out of the material passed unseen. 15 s of clips joined with the default fade play as 14 s.inputs_durationandtransition_shorteningnow sit next toexpected_duration, the duration step carriesinputs_total, andnotessays when the transitions shortened the join.silence.pysays which removed spans were digital silence. Quiet sound under--threshold(room tone, a breath, a whisper) and digital silence were removed alike and both reported assilences. They still are, butsilence_kindslabels each spandigitalorbelow_threshold, andsilence_breakdowngives the count and seconds of each.
Fixed
loudness.pyno longer lengthens the sound. Through the AAC encoder its output ran longer than the input: 0.015 s on a 6 s clip, 0.1 s on a 90 s one. The sound is trimmed to the input's length, and adurationstep measures it.export.pymeasures the length its preset promises. It trimmed to the platform maximum but never re-read what it wrote. With--normalize, a Reels export left at 90.10 s by the loudness pass came backverified: true, andcheck.pyfailed the same file. Adurationstep now holds the written file to the same limitcheck.pyuses.- Lengths and silences are checked against a yardstick the tool did not make (#372)
What's Changed
Full Changelog: v2.19.0...v2.20.0