A Rust-based command-line application for extracting frames from video files using FFmpeg, supporting both sequential and parallel processing modes.
- Features
- Usage
- Command Line Arguments
- Requirements
- Development
- Building and Testing
- Contributing
- Troubleshooting
- Support for parallel processing using multiple CPU cores
- Robust error handling for file operations and FFmpeg interactions
- Comprehensive test suite for core functionality
The application provides several command-line options to control frame extraction.
To extract frames from a video file using default settings (every 30th frame):
cargo run -- --file input.mp4
The extracted frames will be saved as PNG files in the frames
directory.
To extract one frame per second using the seek-based method:
cargo run -- --file input.mp4 --use-seek
To enable parallel processing by splitting the video into segments and processing them concurrently:
cargo run -- --file input.mp4 --multicore
--file <PATH>
: Specify input video file (default: "video.mp4")--use-seek
: Enable seek-based frame extraction (one frame per second)--multicore
: Enable parallel processing using multiple CPU cores
- FFmpeg installed and available in system PATH
- Rust toolchain (including cargo)
To contribute to this project, you'll need:
- Rust toolchain (nightly version recommended)
just init-macos
orjust init-linux
- Clone the repository
- Run
just build
to compile the application - Run
just test
to execute the test suite - Run
cargo run -- --help
to see command-line options
You need to install these packages:
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavfilter-dev libavdevice-dev libavutil-dev yasm
Contributions are welcome! Please submit pull requests with clear descriptions of changes and ensure that all tests pass before submitting.
- If you encounter issues with FFmpeg, ensure it's installed and available in your system's PATH.
- If you experience errors during parallel processing, verify that your system has sufficient resources (CPU cores and memory).
- For other issues, please check the issues page or submit a new issue with detailed information about your problem.