def compose(self) -> VideoClip:
"""
Composes the music video into a VideoClip
"""
segments = [segment.crop_scale(self.dimensions) for segment in self.segments]
segments = [segment.apply_effects() for segment in segments]
# Add buffers for crossfaded video segments
buffered_video_segments = []
for index, segment in enumerate(segments):
buffered_video_segments.append(segment)
if index == len(segments) - 1:
continue
next_segment = segments[index + 1]
for effect in next_segment.effects:
if isinstance(effect, v_effects.CrossFade):
buffer = segment.trailing_buffer(effect.duration)
if buffer.audio:
buffer = buffer.set_audio(buffer.audio.audio_fadeout(effect.duration))
buffered_video_segments.append(buffer)
segments = buffered_video_segments
# Build composite video
composite_video_segments = [segments[0]]
for index, segment in enumerate(segments[1:]):
# Start current segment where previous segment ends in composite video
previous_segment = composite_video_segments[index]
segment = segment.set_start(previous_segment.end)
# Apply any crossfade for the current segment
for effect in segment.effects:
if isinstance(effect, v_effects.CrossFade):
segment = segment.set_start(previous_segment.end - effect.duration)
segment = segment.crossfadein(effect.duration)
if segment.audio:
segment = segment.set_audio(segment.audio.audio_fadein(effect.duration))
composite_video_segments.append(segment)
music_video = CompositeVideoClip(composite_video_segments)
if self.audio_file:
music_video.audio = AudioFileClip(self.audio_file)
return music_video
评论列表
文章目录