MoviePy write_videofile ist extrem langsamPython

Python-Programme
Anonymous
 MoviePy write_videofile ist extrem langsam

Post by Anonymous »

Also verwende ich die Funktion concatenate_videoclips von MoviePy, um zwei Videoclips zu kombinieren, auf denen jeweils ein Bild und etwas Text überlagert sind. Wenn ich die Videodatei schreibe, dauert es etwa GANZE 2 Minuten, bis sie fertig ist. Wenn ich es mit etwa 100 Clips mit denselben Informationen (ein Bild und etwas überlagerter Text) skaliere, dauert es für ein nur 15-minütiges Video etwa 4 Stunden. Ich frage mich, ob es eine Möglichkeit gibt, dieses Problem abzumildern. Ist MoviePy für so etwas nicht geeignet?
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'])
Die Spezifikationen meines PCs sind:

Code: Select all

Intel i7-9700K

Code: Select all

32GB of memory

Code: Select all

NVIDIA GeForce RTX 2060
Sie scheinen für einen Job wie diesen mehr als ausreichend zu sein. Es scheint auch, dass MoviePy meine GPU nicht nutzt und die gesamte Videokodierung auf die CPU überträgt.
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']

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post