A lightweight video editing UI for FFmpeg built with Rust and egui.
- Format Conversion: Convert videos between formats (MP4, MKV, AVI, MOV, WebM, etc.)
- Trim/Cut: Extract segments from videos with precise in/out points
- Crop: Crop video dimensions with visual preview
- Concatenate: Merge multiple video files into one
- Filters: Apply video filters (brightness, contrast, saturation, rotation, speed)
- Video Preview: Real-time video playback with audio
- Timeline: Professional editing timeline with waveform visualization
- Keyboard Shortcuts: Efficient editing with standard keyboard controls
- Rust 1.70 or higher
- FFmpeg installed and available in PATH
- Windows: Download from gyan.dev or install via
winget install FFmpeg - macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpegor equivalent
- Windows: Download from gyan.dev or install via
# Clone the repository
git clone https://github.com/yourusername/ffmpeg_ui.git
cd ffmpeg_ui
# Build in release mode
cargo build --release
# Run the application
cargo run --releaseThe compiled binary will be in target/release/ffmpeg_ui.exe (Windows) or target/release/ffmpeg_ui (Linux/macOS).
- Add Files: Click "Add Files" or drag and drop media files
- Select Tool: Choose from Convert, Trim, Crop, Concat, or Filters
- Configure Settings: Adjust parameters for the selected tool
- Preview: Use the video player to preview your changes
- Export: Click the action button to process the video
| Key | Action |
|---|---|
Space |
Play/Pause |
← / → |
Seek -5s / +5s |
J / L |
Seek -10s / +10s |
K |
Pause |
Home |
Go to start |
End |
Go to end |
I |
Set In point |
O |
Set Out point |
Convert videos to different formats with customizable settings:
- Output format (MP4, MKV, AVI, MOV, WebM)
- Video codec (H.264, H.265, VP9, copy)
- Audio codec (AAC, MP3, Opus, copy)
- Quality/bitrate settings
Extract a segment from a video:
- Set start and end times manually or using I/O points
- Option to copy codec (faster) or re-encode
Crop video dimensions:
- Set X, Y offset and width, height
- Visual preview of crop area
Merge multiple files:
- Add files in desired order
- All files should have compatible codecs
Apply video filters:
- Brightness adjustment
- Contrast adjustment
- Saturation adjustment
- Rotation (90°, 180°, 270°)
- Playback speed (0.5x - 2x)
ffmpeg_ui/
├── Cargo.toml # Dependencies and project config
├── src/
│ ├── main.rs # Application entry point
│ ├── app.rs # Main application state and logic
│ ├── ffmpeg/ # FFmpeg wrapper module
│ │ ├── mod.rs
│ │ ├── wrapper.rs # FFmpeg command execution
│ │ ├── probe.rs # Media file probing
│ │ ├── commands.rs # FFmpeg command building
│ │ └── progress.rs # Progress parsing
│ ├── player/ # Media player module
│ │ ├── mod.rs # Video playback
│ │ ├── audio_player.rs # Audio playback with rodio
│ │ ├── sync.rs # A/V synchronization
│ │ └── video_decoder.rs
│ ├── project/ # Project management
│ │ ├── mod.rs
│ │ ├── media.rs # Media file handling
│ │ ├── timeline.rs # Timeline data structures
│ │ └── export.rs # Export settings
│ ├── ui/ # User interface
│ │ ├── mod.rs
│ │ ├── main_window.rs # Main UI layout
│ │ ├── timeline_widget.rs # Timeline with waveform
│ │ └── tools.rs # Tool settings UI
│ └── utils/ # Utilities
│ ├── mod.rs
│ └── time.rs # Time formatting
- eframe - Immediate mode GUI framework
- egui - GUI library
- rodio - Audio playback
- tokio - Async runtime
- image - Image processing
- rfd - Native file dialogs
- serde - Serialization
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request