Communitygithub.com

moviepy (Python-Videokomposition)

Erstellen und bearbeiten Sie Videos in purem Python mit moviepy 2.x – fügen Sie Texteinblendungen, untere Drittel und Untertitel hinzu, schneiden und verbinden Sie Clips, fügen Sie Audio hinzu und bauen Sie kurze Single-File-build.py-Videos ohne Node. Verwenden Sie dies, wenn der Benutzer Python-basierte Videobearbeitung oder deterministischen Text über KI-generiertem Video wünscht.

Was ist moviepy (Python-Videokomposition)?

moviepy (Python-Videokomposition) ist eine Fähigkeit für KI-Agenten (Claude Code, Cursor, Codex usw.), die es Benutzern ermöglicht, Videos programmatisch mit der Python-Bibliothek moviepy 2.x zu komponieren und zu bearbeiten. Es eignet sich besonders für kurze, skriptgesteuerte Videos und das Platzieren von exaktem Text auf vorhandenem oder KI-generiertem Filmmaterial, ohne dass ein Node.js-Toolchain erforderlich ist. Die Fähigkeit bietet klare Anleitungen für die Einrichtung, grundlegende Operationen wie das Schneiden und Zusammenfügen von Clips, Texteinblendungen mit Schriftarten, Audiomanipulation und Muster, die an Sprachaufnahmen verankert sind. Sie enthält auch Ken-Burns-Effekte für Standbilder, Leistungsoptimierungstipps und eine Liste häufiger Fallstricke (z. B. API-Unterschiede zu moviepy 1.x). Die Dokumentation ist so strukturiert, dass der Agent sofort einsatzbereiten Python-Code generieren kann, wobei Determinismus und die Verwendung von Pillow für komplexe Texteffekte bei Bedarf betont werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/moviepy-python-video

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht moviepy (Python-Videokomposition)?

Am besten geeignet für kurze, skriptgesteuerte Videos und das Platzieren von exaktem Text auf Filmmaterial. Für lange, designintensive, wiederverwendbare Videos bevorzugen Sie Remotion.

Verwenden Sie moviepy, wennVerwenden Sie Remotion, wenn
Das Projekt ist ein einzelnes Python-SkriptSie React-Komponenten und ein Designsystem benötigen
Text auf vorhandenen oder KI-generierten Clips einblendenKomplexe animierte Grafiken und Diagramme benötigen
Batch-Bearbeitungen über viele Dateien hinwegEine Hot-Reload-Vorschau wichtig ist
Keine Node-Toolchain verfügbar istLangformatige, vorlagenbasierte Videos benötigen

Einrichtung

pip install "moviepy>=2" pillow
# oder: uv add moviepy pillow

Diese Fähigkeit zielt auf moviepy 2.x ab. Seine API unterscheidet sich von 1.x: Importe kommen direkt aus moviepy, und Methoden sind with_*/subclipped/resized, nicht set_*/subclip/resize.

Grundlagen

from moviepy import (VideoFileClip, AudioFileClip, ImageClip, TextClip,
                     CompositeVideoClip, CompositeAudioClip, concatenate_videoclips, vfx, afx)

clip = VideoFileClip("in.mp4").subclipped(5, 20)           # 15 s Ausschnitt
clip = clip.resized(height=1080)                            # Seitenverhältnis beibehalten
clip = clip.with_effects([vfx.FadeIn(0.5), vfx.FadeOut(0.5)])

joined = concatenate_videoclips([clip, VideoFileClip("b.mp4")], method="compose")
joined.write_videofile("out/result.mp4", fps=30, codec="libx264", audio_codec="aac")

Rufen Sie immer .close() bei Clips in langen Skripten auf oder verwenden Sie sie in einem with-Block, um Dateihandles freizugeben.

Texteinblendung (deterministischer Text auf Filmmaterial)

titel = (TextClip(font="C:/Windows/Fonts/arial.ttf",     # ein echter Schriftartdateipfad
                  text="Dr. Jane Doe
Chefwissenschaftlerin",
                  font_size=56, color="white",
                  stroke_color="black", stroke_width=2,
                  method="caption", size=(900, None))
         .with_start(1.0).with_duration(4.0)
         .with_position(("left", 860))
         .with_effects([vfx.CrossFadeIn(0.3), vfx.CrossFadeOut(0.3)]))

final = CompositeVideoClip([clip, titel])

Hinweise:

  • TextClip benötigt einen Schriftartdateipfad (TTF/OTF). Liefern Sie die Markenschriftart im Projekt mit.
  • Clip-Zeiten sind in Sekunden, relativ zum Start der Komposition.
  • Für stark gestalteten Text (abgerundete Pillen, Verläufe) rendern Sie ein PNG mit Pillow und verwenden Sie ImageClip.
  • Halten Sie Text innerhalb des sicheren Bereichs: mindestens 5% von jeder Kante.

Audio

voice = AudioFileClip("voiceover.mp3")
music = AudioFileClip("music.mp3").with_effects([afx.MultiplyVolume(0.12), afx.AudioFadeOut(2)])
music = music.with_duration(voice.duration + 1)
final = clip.with_audio(CompositeAudioClip([music, voice.with_start(0.5)]))

Lassen Sie das Voiceover die Zeitleiste bestimmen: Setzen Sie die Clip-Dauer auf voice.duration + padding, nicht umgekehrt.

Audio-verankertes Muster

szenen = [("szene1.mp3", "intro.png"), ("szene2.mp3", "diagramm.png")]
teile = []
for audio_path, image_path in szenen:
    a = AudioFileClip(audio_path)
    v = ImageClip(image_path).with_duration(a.duration + 0.6).with_audio(a)
    teile.append(v)
concatenate_videoclips(teile).write_videofile("out/erklaervideo.mp4", fps=30)

Ken Burns auf Standbildern

img = ImageClip("photo.jpg").with_duration(6)
img = img.resized(lambda t: 1.0 + 0.04 * t).with_position("center")
CompositeVideoClip([img], size=(1920, 1080)).write_videofile("out/kb.mp4", fps=30)

Leistung

  • Vorschau mit fps=12 und preset="ultrafast"; endgültige Version mit 30 fps rendern.
  • write_videofile(..., threads=4).
  • Vermeiden Sie Python-Lambdas pro Frame bei langen Clips. Verwenden Sie nach Möglichkeit FFmpeg für die Vorverarbeitung.

Fallstricke

ProblemUrsache und Lösung
ImportError: cannot import name 'editor'moviepy 2 hat moviepy.editor entfernt; importieren Sie von moviepy
AttributeError: set_durationVerwenden Sie with_duration; gilt auch für with_start, with_position
Textclip stürzt abÜbergeben Sie einen echten Schriftartdateipfad
Audio nach dem Zusammenfügen asynchronStellen Sie sicher, dass alle Clips die gleiche fps haben; Audio nach der Verkettung anwenden
Langsames RendernNiedrigere Auflösung für Entwürfe; große resized-Lambdas vermeiden

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

iamaanahmad/captions-subtitles

Create, edit, translate and burn in captions and subtitles - transcribe speech with Whisper, write SRT/VTT/ASS files, style them, and hard-burn word-highlight captions for Shorts, Reels and TikTok. Use for any captioning, subtitle, transcript or accessibility request.

iamaanahmad/ffmpeg-essentials

Core FFmpeg and ffprobe recipes for trimming, joining, converting, resizing, compressing, speed changes, fades, audio extraction and GIF conversion. Use for any direct media transformation task, or when a video will not play, has odd dimensions, or is out of sync.

iamaanahmad/motion-design-craft

Motion design rules for programmatic and edited video - durations, easing, springs, staggering, read time for on-screen text, beat grids, transitions and visual hierarchy, plus the defaults that make a video look AI-generated. Use when animating scenes, choosing timings, or reviewing a video that feels off.

iamaanahmad/remotion-programmatic-video

Build videos as React code with Remotion - compositions, sequences, springs, interpolation, audio sync, data-driven props, studio preview and rendering to MP4. Use for explainers, product demos, release notes, data charts, branded templates, or any video that should be reproducible from code.

iamaanahmad/screen-recording-demos

Record clean product and web app demos - scripted browser recording with Playwright, cursor and zoom polish, speed ramps, trimming dead time and syncing to narration. Use when the user wants a walkthrough, tutorial, UI demo or release video of a web app, or a repeatable recording.

iamaanahmad/voiceover-tts

Generate and time narration with text-to-speech (ElevenLabs, OpenAI TTS, Kokoro, Piper) or prepare a recorded voice - script prep, per-scene audio files, pacing, pronunciation, cleanup and loudness. Use when the user needs a voiceover, narration, dubbing, or voice cloning guidance.

Verwandte Skills