feat:优化架构
This commit is contained in:
27
engine/assembler.py
Normal file
27
engine/assembler.py
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user