Mein Beispiel ist dieses, das mit etwa 4 it/s läuft, wobei beide Videos eine Auflösung von 1920 x 1080 haben und beide 10 Sekunden lang sind:
Code: Select all
from moviepy.editor import *
from moviepy.config import change_settings
change_settings({"IMAGEMAGICK_BINARY": "D:\\ImageMagick-7.1.1-Q16-HDRI\\magick.exe"})
def create(vid_path: str) -> CompositeVideoClip:
vid: VideoFileClip = VideoFileClip(vid_path)
vid = vid.crossfadein(0.8)
vid = vid.crossfadeout(0.8)
name_square: ImageClip = ImageClip(".\\square.png")
name_square = name_square.set_position(('center', 856))
name_square = name_square.set_duration(vid.duration)
name_square = name_square.crossfadein(1)
name_square = name_square.crossfadeout(1)
name_text: TextClip = TextClip(txt="Hello", fontsize=90, color="gray", font="MomCake")
name_text = name_text.set_position(("center", 870))
name_text = name_text.set_duration(vid.duration)
name_text = name_text.crossfadein(1)
name_text = name_text.crossfadeout(1)
comp_clip: CompositeVideoClip = CompositeVideoClip([vid, name_text])
return comp_clip
final: VideoFileClip = concatenate_videoclips([create("vid1.mp4"), create("vid2.mp4")])
final.write_videofile(f"final_vid.mp4", threads=12, preset="ultrafast", ffmpeg_params=['-b:v','10000k'])
Code: Select all
Intel i7-9700K
Code: Select all
32GB of memory
Code: Select all
NVIDIA GeForce RTX 2060
Ich verwende so viele ffmpeg-Funktionen von MoviePy wie möglich, um die Dinge zu beschleunigen, außer der Funktion write_videofile ist immer noch sehr langsam. Ich habe alle Optimierungen ausprobiert, die ich finden konnte, aber keine hat einen Unterschied gemacht. Mit einigen von ihnen kann ich die Iteration pro Sekunde um einen erheblichen Betrag steigern, aber nach ein paar Sekunden der Verarbeitung fällt diese Zahl steil ab und geht zurück auf 3-5it/s. Einige der Optimierungen, die ich ausprobiert habe, sind:
Code: Select all
threads=12
Code: Select all
preset="ultrafast"
Code: Select all
audio=False
Code: Select all
logger=False
Code: Select all
ffmpeg_params=['-b:v','10000k']