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}")