Skip to main content

Overview

The movielite.vtx module provides video transition effects for creating smooth blends between graphic clips. Transitions modify clip opacity and visual effects to create professional-looking scene changes.

Available Transitions

CrossFade

Smoothly blends from one clip to another by cross-fading video and audio

Dissolve

Alias for CrossFade - gradually dissolves from one clip to another

BlurDissolve

Blurs and fades out the first clip while the second clip fades in sharply

Key Concepts

Clip Overlap Requirements

Most transitions require overlapping clips to work properly:
from movielite import VideoClip, vtx

# Clips MUST overlap for CrossFade/Dissolve
clip1 = VideoClip("scene1.mp4", start=0, duration=5)
clip2 = VideoClip("scene2.mp4", start=4.5, duration=5)  # 0.5s overlap

# Apply transition during the overlap period
transition = vtx.CrossFade(duration=0.5)
clip1.add_transition(clip2, transition)
The overlap duration must be at least as long as the transition duration. For example, a 1-second crossfade requires at least 1 second of overlap between clips.

BlurDissolve Exception

BlurDissolve is unique - it does NOT require overlapping clips:
# BlurDissolve works with consecutive clips (no overlap needed)
clip1 = VideoClip("scene1.mp4", start=0, duration=5)
clip2 = VideoClip("scene2.mp4", start=5.0, duration=5)  # No overlap

transition = vtx.BlurDissolve(duration=1.0, max_blur=21)
clip1.add_transition(clip2, transition)

Usage Pattern

All transitions follow the same application pattern:
from movielite import VideoClip, VideoWriter, vtx

# 1. Create clips with proper timing
clip1 = VideoClip("scene1.mp4", start=0, duration=5)
clip2 = VideoClip("scene2.mp4", start=4.0, duration=5)  # 1.0s overlap

# 2. Create and apply transition
transition = vtx.CrossFade(duration=1.0)
clip1.add_transition(clip2, transition)

# 3. Write output
total_duration = clip1.duration + clip2.duration - 1.0  # Account for overlap
writer = VideoWriter("output.mp4", fps=30, size=clip1.size, duration=total_duration)
writer.add_clips([clip1, clip2])
writer.write()

clip1.close()
clip2.close()

Transition Classes

All transition classes inherit from the base Transition class and implement the apply() method:
  • CrossFade - Video and audio crossfade with opacity blending
  • Dissolve - Alias for CrossFade (same behavior)
  • BlurDissolve - Blur effect combined with fade transition

Common Use Cases

Multiple Transitions

Chain multiple clips with different transitions:
clip1 = VideoClip("scene1.mp4", start=0, duration=4)
clip2 = VideoClip("scene2.mp4", start=3.5, duration=4)  # 0.5s overlap
clip3 = VideoClip("scene3.mp4", start=7.0, duration=4)  # 0.5s overlap

clip1.add_transition(clip2, vtx.CrossFade(duration=0.5))
clip2.add_transition(clip3, vtx.Dissolve(duration=0.5))

Image Slideshow

Create smooth photo slideshows:
from movielite import ImageClip, vtx

images = [
    ImageClip("photo1.jpg", start=0, duration=3),
    ImageClip("photo2.jpg", start=2.5, duration=3),     # 0.5s overlap
    ImageClip("photo3.jpg", start=5.0, duration=3),     # 0.5s overlap
]

for i in range(len(images) - 1):
    images[i].add_transition(images[i + 1], vtx.CrossFade(duration=0.5))
  • vfx - Visual effects (color, blur, etc.)
  • VideoClip - Video clip base class
  • GraphicClip - Base class for all visual clips

Build docs developers (and LLMs) love