Automated release: version and notes generated from pull requests merged since 3.8.21.
Fixed
reverse.pykeeps a variable-rate picture with its sound (#523).reversegives the
reversed frames the forward timestamps in order, so a VFR source's gaps stayed where they were
in forward time and every flash of a 27 fps average clip came 0.19 s after its reversed beep
(0.23 s late with--no-audio, whose picture also ran 74 ms long). The picture is now put on
the delivered grid before the reversal, each slot taking the last frame that starts before the
slot ends, so the reversed clip still opens on the source's last frame; the flashes land within
half a frame of where they belong, with and without sound (FFmpeg 6.1.1). A constant-rate source
is reversed as before.speedramp.py,fit.py --method speedandaudio.py --tempokeep each sound where the
retiming puts it (#523).atempolays its first window down without retiming it and sets
everything after it about half a window early (1024 samples at 44.1 and 48 kHz): 21 ms at 1x
and 40 ms at 0.5x inspeedramp.py, 17-25 ms infit.py --method speed, 10-31 ms inaudio.py --tempoand about 100 ms through a chain of two stages (0.3). Each chain is now led by a
window and a half of silence and a window is cut off after it, so through one stage (0.5x to
3x) the beeps of a test clip land within 5 ms of their place on average; through a chain below
0.5x, where a short sound is laid down as several grains, each lands within one atempo window
(43 ms at 48 kHz) of its place instead of 70-155 ms early. A short sound at the very start
keeps its level (a first try with half a window faded a 10 ms tone there by 7 dB, or lost it). A 1x
speedramp.pysegment is no longer put throughatempoat all. Thetiming.atempostages
audio.pyreports are unchanged.freeze.py --atinside a gap of a variable-rate source keeps what follows with its sound
(#523). The picture after the hold came 56 ms (--at 0.15) and 93 ms (--at 2.2) early
against its sound on a clip with gaps from 0.1 s and 2.1 s, and the picture ran short. A hold
inside the clip now conforms the picture as it is decoded and cuts, holds and counts on the
delivered grid, so every frame of it is there and each flash stays within half a frame of its
beep. A hold of one frame (--hold 0.04at 30 fps, any source) no longer loses that frame and
runs the rest of the picture a frame before its sound.- Not changed: in a
render.pyproject of several clips,--export-timelinestill sizes the
sequence fromframewhile the render reframes the join withfit(#526); which of the two
wins is a decision for a minor release, with the options indocs/design-decisions.md. - fix: variable-frame-rate sources in reverse and freeze, and atempo's early sound in speedramp, fit and audio (#541)
What's Changed
- fix: variable-frame-rate sources in reverse and freeze, and atempo's early sound in speedramp, fit and audio by @kajisho5 in #541
Full Changelog: v3.8.21...v3.8.22