video.py
1.0 kB · python · 30 lines
1import os2import subprocess3from .helpers import logger45def create_video(frames_dir: str, output_path: str, fps: int = 8, format: str = "png", prefix: str = "frame") -> str:6 logger.debug(f"Creating video from {frames_dir}")7 os.makedirs(os.path.dirname(output_path), exist_ok=True)8 pattern = f"{frames_dir}/{prefix}_%03d.{format}"9 run_ffmpeg(pattern, output_path, fps)10 logger.info(f"Saved: {output_path}")11 return output_path1213def run_ffmpeg(pattern: str, output_name: str, fps: int):14 cmd = [15 "ffmpeg", "-y",16 "-framerate", str(fps),17 "-i", pattern,18 "-vf", "pad=ceil(iw/2)*2:ceil(ih/2)*2",19 "-c:v", "libx264",20 "-r", str(fps),21 "-pix_fmt", "yuv420p",22 output_name,23 ]24 result = subprocess.run(cmd, capture_output=True, text=True)25 if result.stdout:26 logger.debug(result.stdout)27 if result.stderr:28 logger.debug(result.stderr)29 if result.returncode != 0:30 raise RuntimeError(f"ffmpeg failed with exit code {result.returncode}")