Automated release: version and notes generated from pull requests merged since 3.6.2.
Fixed
join.pycuts every clip to whole frames and its sound to whole samples (#455). Each clip
was trimmed to its length in milliseconds (trim=duration=0.167for 5 frames at 30 fps), and the
next clip started after it: 60 five-frame clips had one-frame holes from about 8 s. The picture
is now cut withtrim=end_frame, the sound withatrim=end_sampleat the samples those frames
last (counted from the running total, so the sound stays within a sample of the picture), at the
first clip's exact rate (30000/1001, where the fps filter used to run at 29.97). The result
reportsframe_rate,clip_framesandtransition_frames.- A
join.pytransition starts on its frame (#468). The xfade offset was written to the
millisecond, and xfade starts on the first frame at or after it: 2.566667 s written 2.567
started the fade a frame late (138 frames where 137 were due). Offsets are now frames of the
output rate, written rounded down to the microsecond, the transition is a whole number of frames
(at least one:--duration 0with a transition builtacrossfade=ns=0, which FFmpeg refuses)
and each acrossfade overlaps the samples of those frames, taken from the output's rounded frame
positions so the sound never runs a sample longer per transition. join.pyreads a short clip without a last-frame duration at its own rate (#475). FFmpeg 7.1
read a 5-frame MOV that stores no duration for its last frame as 0.1333 s at 37.5 fps; join.py
ran the whole join at that rate and held every clip to its 0.1667 s sound, 7 frames each (60
clips: 418 frames for 300). The clip's declaredr_frame_rateis used when the average is short
by exactly the last frame, and its picture counts every frame it holds.- A slow
lateston npm no longer stops the MCP Registry publish. The release job waited five
minutes for npm'slatestto read the new version and then failed, which skipped every later
step: 3.6.2 was on npm but not on the MCP Registry until the job was re-run. It now waits for
npm to have the version (that is what the registry steps need), runs the registry steps, and
only then fails the job iflatestis still behind after ten minutes. - fix(join): whole-frame clip lengths and frame-exact xfade offsets; release waits for the npm version, not for latest (#473)
What's Changed
- fix(join): whole-frame clip lengths and frame-exact xfade offsets; release waits for the npm version, not for latest by @kajisho5 in #473
Full Changelog: v3.6.2...v3.6.3