Consider this Hype's dirty little secret . All videos have one extra frame at the end. This is the consequence of a design decision in how we represent time and animations on the timeline, coupled by the fact that video export was added later.
Consider an animation that starts at
0:00.00. If you advance the playhead to the
0:01.00 mark and make an animation, it will end at the 1s mark. This would represent frame number 30, but because we're starting at 0, it is technically the 31st frame.
If we were to cut off the animation one frame early, it would not finish in its resulting position.
Different software handles this problem differently; I believe some start timecode indexing at the first frame, others are careful in how animations are created so they end on the
0:00.29 timecode. Since our animation system was already established and video came later, we decided to add an extra frame so that the entire animation would be represented and the "duration" in the video export panel is really the end time.
So the likely solution in your case is to make your animation one frame shorter.