A native macOS video compression app built with SwiftUI and FFmpeg.
- Single file and batch compression
- 11 presets across 6 categories (Universal, Archive, Lectures, Web, Extreme, Compatibility)
- Codecs: H.264, H.265, H.265 Apple Silicon (hardware), VP9, AV1
- Audio: Copy, AAC, Opus, MP3, FLAC
- Real-time encoding progress with speed, ETA, and compression estimate
- Post-encoding summary: time elapsed, size saved, compression ratio
- FFmpeg management — detects Homebrew install, checks for updates
- English / Russian UI localization
- macOS 13+ (Ventura and later)
- macOS 14.0 or later
- Xcode 15+
- FFmpeg installed via Homebrew:
brew install ffmpeg- Clone the repository
- Open
EasyFFmpeg.xcodeprojin Xcode - Select your signing team in Signing & Capabilities
- Build and run (⌘R)
FFmpeg is detected automatically from /opt/homebrew/bin/ffmpeg or /usr/local/bin/ffmpeg.
👉 Download the latest version from Releases
- Download the
.dmgfrom Releases - Open the
.dmg - Drag EasyFFmpeg.app into Applications
- Launch the app
If macOS blocks the app, run in Terminal:
xattr -rd com.apple.quarantine /Applications/EasyFFmpeg.appEasyFFmpeg/
├── EasyFFmpegApp.swift # App entry point (@main)
├── Models/
│ ├── Preset.swift # Preset, VideoCodec, AudioCodec, Resolution
│ ├── CompressionSettings.swift # FFmpeg argument builder
│ ├── CompletionStats.swift # Post-encoding result stats
│ ├── VideoMetadata.swift # File metadata
│ └── BatchJob.swift # Batch processing job model
├── Presets.swift # All 11 preset definitions
├── Services/
│ ├── FFmpegRunner.swift # Process launch, progress, cancellation
│ ├── FFmpegManager.swift # FFmpeg detection, Homebrew management
│ ├── FFprobeAnalyzer.swift # Video file analysis
│ ├── ProgressParser.swift # FFmpeg -progress output parser
│ └── SizeEstimator.swift # Output size/time estimation
├── ViewModels/
│ ├── MainViewModel.swift # Single file screen state
│ └── BatchViewModel.swift # Batch processing state
├── Views/ # All SwiftUI views
└── Localization/
├── L10n.swift # All strings (RU + EN)
├── LanguageManager.swift # Language persistence
└── LanguagePickerView.swift
- Progress written to a temp file (not pipe) to avoid stderr buffer deadlock
-vsync 1for ffmpeg 7.x compatibilityformat=yuv420pinside-vfchain for pixel format compatibility-tag:v hvc1added for bothlibx265andhevc_videotoolbox— required for QuickTime / Apple ecosystem playbackIOPMAssertionCreateWithNameprevents sleep during encoding
MIT License — see LICENSE for details.
This app uses FFmpeg, licensed under LGPL 2.1+ / GPL 2+.
See ffmpeg.org/legal.html for codec licensing details.