diff --git a/moviepy/Clip.py b/moviepy/Clip.py index efdfb22c6..da98764fd 100644 --- a/moviepy/Clip.py +++ b/moviepy/Clip.py @@ -264,6 +264,7 @@ def set_end(self, t): of the returned clip. """ self.end = t + if self.end is None: return if self.start is None: if self.duration is not None: self.start = max(0, t - newclip.duration) @@ -387,7 +388,6 @@ def subclip(self, t_start=0, t_end=None): t_start = self.duration + t_start #remeber t_start is negative if (self.duration is not None) and (t_start>self.duration): - raise ValueError("t_start (%.02f) "%t_start + "should be smaller than the clip's "+ "duration (%.02f)."%self.duration) diff --git a/moviepy/video/compositing/CompositeVideoClip.py b/moviepy/video/compositing/CompositeVideoClip.py index 30172b782..e65224864 100644 --- a/moviepy/video/compositing/CompositeVideoClip.py +++ b/moviepy/video/compositing/CompositeVideoClip.py @@ -95,7 +95,7 @@ def __init__(self, clips, size=None, bg_color=None, use_bgclip=False, # compute mask if necessary if transparent: maskclips = [(c.mask if (c.mask is not None) else - c.add_mask().mask).set_pos(c.pos) + c.add_mask().mask).set_pos(c.pos).set_end(c.end).set_start(c.start, change_end=False) for c in self.clips] self.mask = CompositeVideoClip(maskclips,self.size, ismask=True, diff --git a/tests/test_TextClip.py b/tests/test_TextClip.py index b07605c7b..41932d8b8 100644 --- a/tests/test_TextClip.py +++ b/tests/test_TextClip.py @@ -15,7 +15,7 @@ def test_duration(): return clip = TextClip('hello world', size=(1280,720), color='white') - clip.set_duration(5) + clip=clip.set_duration(5) assert clip.duration == 5 clip2 = clip.fx(blink, d_on=1, d_off=1) diff --git a/tests/test_issues.py b/tests/test_issues.py index c125b8faf..c819ca6ee 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -266,6 +266,19 @@ def test_audio_reader(): subclip.write_audiofile(os.path.join(TMP_DIR, 'issue_246.wav'), write_logfile=True) +def test_issue_547(): + red = ColorClip((640, 480), color=(255,0,0)).set_duration(1) + green = ColorClip((640, 480), color=(0,255,0)).set_duration(2) + blue = ColorClip((640, 480), color=(0,0,255)).set_duration(3) + + video=concatenate_videoclips([red, green, blue], method="compose") + assert video.duration == 6 + assert video.mask.duration == 6 + + video=concatenate_videoclips([red, green, blue]) + assert video.duration == 6 + if __name__ == '__main__': pytest.main() +