Skip to content

Commit

Permalink
Add some tolerance to account for rounding errors
Browse files Browse the repository at this point in the history
  • Loading branch information
osaajani committed Jan 11, 2025
1 parent ac2ef2d commit 1ab989a
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 14 deletions.
6 changes: 3 additions & 3 deletions moviepy/Clip.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,6 @@ def subclipped(self, start_time=0, end_time=None):
+ "should be smaller than the clip's "
+ "duration (%.02f)." % self.duration
)


new_clip = self.time_transform(lambda t: t + start_time, apply_to=[])

Expand All @@ -423,13 +422,14 @@ def subclipped(self, start_time=0, end_time=None):
end_time = self.duration + end_time

if end_time is not None:
if (self.duration is not None) and (end_time > self.duration):
# Allow a slight tolerance to account for rounding errors
if (self.duration is not None) and (end_time - self.duration > 0.00000001):
raise ValueError(
"end_time (%.02f) " % end_time
+ "should be smaller or equal to the clip's "
+ "duration (%.02f)." % self.duration
)

new_clip.duration = end_time - start_time
new_clip.end = new_clip.start + new_clip.duration

Expand Down
12 changes: 6 additions & 6 deletions moviepy/video/io/ffmpeg_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,12 +476,12 @@ def parse(self):
# for default streams, set their numbers globally, so it's
# easy to get without iterating all
if self._current_stream["default"]:
self.result[f"default_{stream_type_lower}_input_number"] = (
input_number
)
self.result[f"default_{stream_type_lower}_stream_number"] = (
stream_number
)
self.result[
f"default_{stream_type_lower}_input_number"
] = input_number
self.result[
f"default_{stream_type_lower}_stream_number"
] = stream_number

# exit chapter
if self._current_chapter:
Expand Down
1 change: 0 additions & 1 deletion tests/test_VideoClip.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,6 @@ def test_afterimage(util):

def test_add():
clip = VideoFileClip("media/fire2.mp4")
print(clip.duration)
new_clip = clip[0:1] + clip[1.5:2]
assert new_clip.duration == 1.5
assert np.array_equal(new_clip[1.1], clip[1.6])
Expand Down
7 changes: 3 additions & 4 deletions tests/test_issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,9 +303,8 @@ def test_issue_470(util):
audio_clip = AudioFileClip("media/crunching.mp3")

# end_time is out of bounds
subclip = audio_clip.subclipped(start_time=6, end_time=9)

with pytest.raises(IOError):
with pytest.raises(ValueError):
subclip = audio_clip.subclipped(start_time=6, end_time=9)
subclip.write_audiofile(wav_filename, write_logfile=True)

# but this one should work..
Expand Down Expand Up @@ -334,7 +333,7 @@ def test_issue_636():

def test_issue_655():
video_file = "media/fire2.mp4"
for subclip in [(0, 2), (1, 2), (2, 3)]:
for subclip in [(0, 2), (1, 2), (2, 2.10)]:
with VideoFileClip(video_file) as v:
with v.subclipped(1, 2) as _:
pass
Expand Down

0 comments on commit 1ab989a

Please sign in to comment.