Funktionen:
- Einlesen eines Ordners
- Einlesen der Dateinamen
- Zusammenführung der Dateien zu einem Gesamtvideo
- 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.")