diff --git a/README.md b/README.md new file mode 100644 index 0000000..ea6f25b --- /dev/null +++ b/README.md @@ -0,0 +1,137 @@ +# fps-go-brr + +> **⚠️ Work in Progress**: This project is actively under development and not yet feature-complete! + +A Go CLI tool for video frame analysis and comparison. Analyze frame persistence, detect dropped frames, and export data for visualization tools like those used by Digital Foundry. + +## Features + +- **Frame Persistence Analysis**: Detect consecutive duplicate frames and measure persistence duration +- **CSV Export**: Generate data compatible with video analysis visualization tools +- **Multi-format Support**: Works with any video format supported by FFmpeg +- **Configurable Tolerance**: Adjust pixel difference sensitivity for noisy videos +- **Real-time Analysis**: Stream processing for efficient memory usage +- **Two-pass Architecture**: Accurate frame timing calculations for smooth visualizations + +## Quick Start + +### Installation + +Download the latest release from the [releases page](https://git.aria.coffee/aria/fps-go-brr/releases) or build from source: + +```bash +# Clone the repository +git clone https://git.aria.coffee/aria/fps-go-brr.git +cd fps-go-brr + +# Build normally +go build -o fps-go-brr . + +# Or build compact version (requires UPX) +./build-compact.sh +``` + +### Basic Usage + +```bash +# Analyze frame persistence with CSV export +./fps-go-brr analyze-frame-persistence video.mp4 --csv-output analysis.csv + +# With tolerance for noisy videos +./fps-go-brr analyze-frame-persistence video.mp4 --tolerance 10 --csv-output analysis.csv + +# Count total frames in a video +./fps-go-brr count-frames video.mp4 + +# Compare two individual frames +./fps-go-brr compare-frames frame1.png frame2.png +``` + +## CSV Output Format + +The `analyze-frame-persistence` command generates CSV files with the following columns: + +| Column | Description | +|--------|-------------| +| `frame` | Frame number (starts on 1) | +| `average_fps` | Running effective FPS calculation | +| `frame_time` | Current frame persistence duration (ms) | +| `unique_frame_count` | Cumulative unique frame count | +| `real_frame_time` | Total persistence time for smooth visualization | + +## Use Cases + +- **Game Performance Analysis**: Detect frame drops and stuttering in gameplay footage +- **Technical Reviews**: Generate data for Digital Foundry-style analysis + +## Development Status + +This project is under active development. Current feature wish list: + +- [ ] Enhanced frame comparison algorithms +- [ ] Performance optimizations for large videos +- [ ] Additional export formats +- [ ] Cross-platform testing and compatibility +- [ ] Documentation improvements +- [ ] Graph generation from CSV + +## Building + +### Prerequisites + +- Go 1.21 or later +- UPX (optional, for compact builds) + +### Commands + +```bash +# Standard build +go build -o fps-go-brr . + +# Compact build with UPX compression +./build-compact.sh +``` + +## Repository + +**Main Repository**: [https://git.aria.coffee/aria/fps-go-brr](https://git.aria.coffee/aria/fps-go-brr) +**Mirror (GitHub)**: [https://github.com/BuyMyMojo/fps-go-brr](https://github.com/BuyMyMojo/fps-go-brr) + +The main development happens on the personal Forgejo instance. The GitHub mirror also accepts pull requests and bug reports for convenience. + +## Contributing + +This is an early-stage project. Contributions, bug reports, and feature requests are welcome on either the main repository or the GitHub mirror! + +## Technical Details + +Built with: +- **CLI Framework**: [urfave/cli/v3](https://github.com/urfave/cli) +- **Video Processing**: [AlexEidt/Vidio](https://github.com/AlexEidt/Vidio) +- **Image Processing**: Go standard library + + + + +## Inspirations + +This project draws inspiration from: + +- **[Digital Foundry](https://www.youtube.com/@DigitalFoundry)** - Professional video game performance analysis and technical reviews +- **[Brazil Pixel](https://www.youtube.com/@brazilpixel)** - Technical video analysis and frame rate studies +- **[TRDrop](https://github.com/cirquit/trdrop)** - Raw video analysis program for framerate estimation and tear detection +- **[Original Python implementation](https://web.archive.org/web/20250613174657/https://snippets.aria.coffee/snippets/2)** - Early proof-of-concept for frame persistence analysis + +The goal is to provide similar professional-grade video analysis capabilities for the open-source community. + +## License + +SPDX-License-Identifier: MIT OR Apache-2.0 + +This project is dual-licensed under your choice of: +- MIT License - see [LICENSE.MIT](LICENSE.MIT) file for details +- Apache License 2.0 - see [LICENSE.Apache-2.0](LICENSE.Apache-2.0) file for details + +Copyright (c) 2025 Aria, Wicket + +---