Quellcode: Zusammenführung von Videoschnipsel zu einem Gesamtvideo

Funktionen:

  1. Einlesen eines Ordners
  2. Einlesen der Dateinamen
  3. Zusammenführung der Dateien zu einem Gesamtvideo
  4. Einblendung von Untertitel, die sich aus den Datennamen (2) generieren.
import os
from moviepy.editor import VideoFileClip, concatenate_videoclips, CompositeVideoClip, ImageClip
from PIL import Image, ImageDraw, ImageFont

def create_text_clip(text, duration, fontsize=60, color='white'):
    # Erstelle ein leeres Bild mit transparentem Hintergrund
    img = Image.new('RGBA', (640, 100), (0, 0, 0, 0))  # Transparenter Hintergrund
    d = ImageDraw.Draw(img)
    
    # Schriftart laden
    try:
        font = ImageFont.truetype("Arial.ttf", fontsize)
    except IOError:
        font = ImageFont.load_default()

    # Berechne die Größe des Textes
    text_width, text_height = d.textbbox((0, 0), text, font=font)[2:]

    # Text in die Mitte zeichnen
    d.text(((640 - text_width) // 2, (100 - text_height) // 2), text, fill=color, font=font)

    # Speichere das Bild temporär
    img.save("temp_text_clip.png")
    
    # Erstelle einen VideoClip aus dem Bild
    return ImageClip("temp_text_clip.png").set_duration(duration).set_position(('left', 'bottom')).margin(left=10, bottom=10)

# Pfad zum Ordner mit den .mp4-Dateien
ordner_pfad = '_test'

# Liste zum Speichern der einzelnen Clips
clips = []

# Zähler für die Video-Nummerierung
video_counter = 1

# Durchlaufe alle Dateien im Ordner und Unterordnern
for root, dirs, files in os.walk(ordner_pfad):
    for datei_name in sorted(files):  # sortiert nach Dateinamen
        if datei_name.endswith(".mp4"):
            datei_pfad = os.path.join(root, datei_name)
            # VideoClip laden
            clip = VideoFileClip(datei_pfad)

            # Dateiname ohne .mp4 und Nummer hinzufügen
            titel_text = f"{video_counter}: {os.path.splitext(datei_name)[0]}"  # Zähler

            # TextClip für den Dateinamen als Untertitel erstellen
            text_clip = create_text_clip(titel_text, clip.duration)

            # Clip zur Liste hinzufügen
            video_mit_untertitel = CompositeVideoClip([clip, text_clip])
            clips.append(video_mit_untertitel)

            # Zähler erhöhen
            video_counter += 1

# Videos zusammenfügen
if clips:
    final_video = concatenate_videoclips(clips, method="compose")

    # Ausgabe-Datei speichern
    final_video_output = os.path.join(ordner_pfad, "zusammengefuegtes_video.mp4")
    final_video.write_videofile(final_video_output, codec="libx264", fps=24)

    print(f"Video erfolgreich erstellt: {final_video_output}")
else:
    print("Keine .mp4-Dateien gefunden.")

Kommentare sind deaktiviert.