FFmpeg is now automatically downloaded on first run if not found, eliminating the need for vcpkg or manual FFmpeg installation on Windows. Changes: - Add FFmpeg availability check and auto-download on startup - Use ffprobe_path() for auto-downloaded binaries in video decoder - Track FFmpeg availability in app state with graceful degradation - Show warning banner when video conversion is unavailable - Skip video files when adding to queue if FFmpeg unavailable - Simplify build instructions in README (remove vcpkg recommendation)
5.4 KiB
5.4 KiB
AVIF Maker
A native GUI application to convert images and videos to AVIF format.
Features
- Drag and drop files or use the file picker
- Batch conversion - queue multiple files
- Animated AVIF - convert GIFs and videos to animated AVIF
- Alpha channel support - preserves transparency from GIF, PNG, and video sources
- Configurable quality - separate quality controls for color and alpha
- Speed/quality tradeoff - encoder speed setting from 0 (best) to 10 (fastest)
- Lossless mode - perfect quality output
Supported Input Formats
| Format | Decoder | Alpha Support | Notes |
|---|---|---|---|
| GIF | gif crate |
1-bit | Animated, frame delays |
| PNG/APNG | image crate |
Full | Static images |
| JPEG | image crate |
N/A | No alpha |
| WebP | image crate |
Full | Static only |
| MP4/MOV/WebM | ffmpeg-sidecar |
Codec-dependent | FFmpeg auto-downloaded on first run |
Build Requirements
macOS
# Install build dependencies (libavif is built from source)
brew install cmake nasm
# Build and run
cargo build --release
./target/release/avif-maker
FFmpeg is automatically downloaded on first run if not found in PATH.
Linux (Ubuntu/Debian)
# Install build dependencies (libavif is built from source)
sudo apt install build-essential cmake nasm
# Build and run
cargo build --release
./target/release/avif-maker
FFmpeg is automatically downloaded on first run if not found in PATH.
Windows
The application automatically downloads FFmpeg on first run if not found. No manual setup required for end users.
To build from source, install:
- Visual Studio Build Tools (with C++ workload)
- CMake
- NASM (add to PATH)
# Build
cargo build --release
# Run
.\target\release\avif-maker.exe
Usage
- Add files - Drag and drop files onto the window, or click to browse
- Configure settings - Adjust quality, speed, and output options in the left panel
- Convert - Click "Convert All" to process the queue
- Access outputs - Click "Open" or "Show in Finder" on completed files
Settings
- Quality (0-100): Higher = better quality, larger file. Default: 75
- Alpha Quality (0-100): Separate quality for transparency. Default: 90
- Speed (0-10): 0 = slowest/best quality, 10 = fastest. Default: 6
- Lossless: Perfect quality at the cost of file size
- FPS Override: Override detected framerate for video inputs
- Output Directory: Save to same folder as source, or a custom folder
Test Files
Three test files are included:
Highlander-IMustFlip.mp4- Video (tests ffmpeg decoder)Highlander-IMustFlipSmaller-OG.gif- Animated GIF without transparencyBTS-240-art.gif- Animated GIF with transparency (1-bit alpha)
Building Distributable Packages
Build distributable packages for multiple platforms from a single macOS machine.
Prerequisites
# Install build tools
cargo install cargo-bundle
# Ensure Docker Desktop is installed and running (for Linux/Windows builds)
docker info
Docker Configuration (Apple Silicon Mac)
Before cross-compiling Linux/Windows targets, configure Docker Desktop to share the Homebrew path:
- Open Docker Desktop
- Go to Settings → Resources → File Sharing
- Add
/opt/homebrewto the shared paths - Click Apply & Restart
Building
# First-time setup: Build Docker images (for Linux/Windows targets)
./scripts/build-all.sh --setup-docker
# Build all targets (macOS, Linux, Windows)
./scripts/build-all.sh
Output
After building, packages are in dist/<version>/:
| Platform | Files | Notes |
|---|---|---|
| macOS | .dmg, .app.zip |
Native build |
| Linux x86_64 | .deb, .rpm, .tar.gz |
Cross-compiled via Docker |
| Linux ARM64 | — | Build natively on ARM64 Linux |
| Windows x86_64 | .zip |
Cross-compiled via Docker |
Note: Linux ARM64 cross-compilation is disabled due to an upstream zune-jpeg NEON bug. Build ARM64 natively on a Linux ARM64 system.
Architecture
avif-maker/
├── src/
│ ├── main.rs # Application entry point
│ ├── app.rs # Main application state
│ ├── decoder/
│ │ ├── mod.rs # Decoder trait and dispatch
│ │ ├── gif.rs # GIF decoder (pure Rust)
│ │ ├── image.rs # PNG/JPEG/WebP decoder
│ │ └── video.rs # FFmpeg-based video decoder
│ ├── encoder/
│ │ ├── mod.rs
│ │ └── avif.rs # libavif encoder wrapper
│ └── ui/
│ ├── mod.rs
│ ├── drop_zone.rs # Drag-and-drop area
│ ├── settings.rs # Settings panel
│ └── queue.rs # Job queue display
├── resources/
│ └── AppIcon.icns # macOS app icon
├── docker/ # Cross-compilation Dockerfiles
├── scripts/
│ └── build-all.sh # Build script for all platforms
└── Cargo.toml
License
MIT