()
| 164 | |
| 165 | |
| 166 | def main(): |
| 167 | parser = argparse.ArgumentParser(description="Extract per-frame audio visualization data") |
| 168 | parser.add_argument("input", help="Audio or video file") |
| 169 | parser.add_argument("-o", "--output", default="audio-data.json", help="Output JSON path") |
| 170 | parser.add_argument("--fps", type=int, default=30, help="Frames per second (default: 30)") |
| 171 | parser.add_argument("--bands", type=int, default=16, help="Number of frequency bands (default: 16)") |
| 172 | args = parser.parse_args() |
| 173 | |
| 174 | if args.fps < 1: |
| 175 | parser.error("--fps must be at least 1") |
| 176 | if args.bands < 1: |
| 177 | parser.error("--bands must be at least 1") |
| 178 | |
| 179 | data = extract(args.input, args.fps, args.bands) |
| 180 | |
| 181 | with open(args.output, "w") as f: |
| 182 | json.dump(data, f) |
| 183 | |
| 184 | print(f"Wrote {args.output} ({data['totalFrames']} frames, {data['bands']} bands)", file=sys.stderr) |
| 185 | |
| 186 | |
| 187 | if __name__ == "__main__": |
no test coverage detected