from __future__ import annotations from dataclasses import dataclass, field from pathlib import Path @dataclass class FFmpegCommand: args: list[str] = field(default_factory=lambda: ["ffmpeg"]) def add(self, *args: object) -> "FFmpegCommand": self.args.extend(str(arg) for arg in args) return self def input(self, path: str | Path, **options: object) -> "FFmpegCommand": for key, value in options.items(): self.add(f"-{key}", value) self.add("-i", path) return self def overwrite(self) -> "FFmpegCommand": self.add("-y") return self def build(self) -> list[str]: return list(self.args)