import os import shutil import subprocess from PIL import Image from alive_progress import alive_bar def main(): try: shutil.rmtree("tmp") except Exception: pass os.makedirs("tmp", exist_ok=True) fps = 60 width = 1920 height = 1080 bpm = 60 length_seconds = 20 color1 = (255, 0, 0) color2 = (0, 0, 255) total_frames = fps * length_seconds frames_per_beat = fps * 60 // bpm with alive_bar(total_frames, title="Generating images") as bar: for counter in range(total_frames): if counter % frames_per_beat == 0: img = Image.new("RGB", (width, height), color1) else: img = Image.new("RGB", (width, height), color2) img.save(f"tmp/{counter}.png") bar() # Increment the progress bar subprocess.run([ "ffmpeg", "-framerate", str(fps), "-i", "tmp/%d.png", "-c:v", "libx264", "-pix_fmt", "yuv420p", "output.mp4" ]) if __name__ == "__main__": main()