feat:优化架构

This commit is contained in:
Daniel
2026-03-25 13:43:00 +08:00
parent 8991f2a2d7
commit a2f224d01f
7 changed files with 509 additions and 5 deletions

27
engine/assembler.py Normal file
View File

@@ -0,0 +1,27 @@
from __future__ import annotations
from pathlib import Path
from moviepy import VideoFileClip, concatenate_videoclips
def assemble_clips(clips: list[str | Path], output_path: str | Path) -> Path:
out = Path(output_path)
out.parent.mkdir(parents=True, exist_ok=True)
if not clips:
raise ValueError("clips must not be empty")
vclips: list[VideoFileClip] = []
for c in clips:
vclips.append(VideoFileClip(str(c)))
final = concatenate_videoclips(vclips, method="compose")
try:
fps = vclips[0].fps if vclips and vclips[0].fps else 24
final.write_videofile(str(out), codec="libx264", audio_codec="aac", fps=fps, preset="medium", threads=4)
finally:
final.close()
for c in vclips:
c.close()
return out