A native macOS app for common video and audio processing tasks.
Drag, drop, and go — with batch processing for multiple files at once.
No timelines, no complex UI — just quick conversions and edits powered by ffmpeg.
macOS 13+ · Apple Silicon & Intel
31 operations across 6 categories:
- Remove audio from video
- Extract audio to separate file
- Replace audio track
- Add audio layer (mix/overlay)
- Normalize volume
- Convert audio format (MP3, WAV, AAC, etc.)
- Adjust volume (boost or reduce)
- Remove silence
- Enhance audio (denoise, EQ, normalize)
- Change container (MP4, MOV, MKV) — fast, no re-encoding
- Compress video (quality presets)
- Convert to ProRes
- Resize video (4K, 1080p, 720p, 480p, 360p, or custom)
- Create proxy — low-res copies for smoother editing
- Trim (start to end time)
- Change speed (0.1x to 100x)
- Reverse
- Rotate (90, 180, 270)
- Flip / Mirror
- Crop to vertical (16:9 to 9:16)
- Black & White
- Split into X equal parts
- Split by duration (X seconds each)
- Split by file size (X MB each)
- Extract frames (by count, interval, or frame number)
- Create GIF
- Video summary (condense to short preview)
- Contact sheet (grid of thumbnails)
- Merge videos (combine multiple files)
- Burn subtitles (.srt hardcoded into video)
- Picture-in-Picture (with position and size options)
Three-panel interface:
- Files (left) — Drop files or folders, toggle selection with checkboxes
- Operations (middle) — Browse or search operations, star your favorites
- Options (right) — Configure the selected operation
Click Process to run the operation on all selected files. Each operation translates to optimized ffmpeg commands that use stream copying when possible (fast, no quality loss).
Video: MP4, MOV, MKV, AVI, WebM, M4V Audio: MP3, WAV, AAC, M4A, FLAC, OGG
- macOS 13.0 or later
- ffmpeg installed via Homebrew:
brew install ffmpeg - For Enhance Audio:
git clone https://github.com/richardpl/arnndn-models.git ~/arnndn-models
Download the latest DMG from the Releases page, open it, and drag Media Tools Suite to your Applications folder.
The app is signed and notarized with Apple Developer ID — no Gatekeeper warnings, installs and opens like any trusted Mac app.
Open in Xcode:
open VideoAudioSuite.xcodeprojThen build and run with Cmd+R.
Or build from the command line:
xcodebuild build \
-project VideoAudioSuite.xcodeproj \
-scheme VideoAudioSuite \
-configuration Debug \
-destination 'platform=macOS'The built app will be named "Media Tools Suite".
The project includes 141 unit tests and UI tests covering operation logic, state management, and UI flow.
Run all tests:
xcodebuild test \
-project VideoAudioSuite.xcodeproj \
-scheme VideoAudioSuite \
-destination 'platform=macOS'Run unit tests only:
xcodebuild test \
-project VideoAudioSuite.xcodeproj \
-scheme VideoAudioSuite \
-destination 'platform=macOS' \
-only-testing:VideoAudioSuiteTestsRun UI tests only:
xcodebuild test \
-project VideoAudioSuite.xcodeproj \
-scheme VideoAudioSuite \
-destination 'platform=macOS' \
-only-testing:VideoAudioSuiteUITestsVideoAudioSuite/
├── VideoAudioSuiteApp.swift # App entry point
├── ContentView.swift # Main view router
├── Models/
│ ├── AppState.swift # App state, batch file management
│ ├── BatchFile.swift # File with selection/status
│ ├── FavoritesStore.swift # Favorites persistence
│ ├── MediaFile.swift # File representation
│ └── Operation.swift # Operations & categories
├── Views/
│ ├── MainWorkspaceView.swift # Three-panel layout
│ ├── FileListPanel.swift # Left: file list with checkboxes
│ ├── OperationPanel.swift # Middle: operations + search
│ ├── OperationListView.swift # Flat operation list with stars
│ ├── OperationConfigView.swift # Config UI components
│ ├── QueueBarView.swift # Bottom: queue status + Process
│ ├── BatchProcessingView.swift # Progress during batch
│ ├── BatchCompletionView.swift # Results summary
│ └── CompletionView.swift # Legacy completion view
└── Services/
├── FFmpegService.swift # ffmpeg execution
├── OperationExecutor.swift # Operation logic & config
└── BatchExecutor.swift # Sequential batch processing
Operation.swift— Add a case to theOperationenum, updatename,description,outputSuffix,requiresSecondFile,requiresConfigurationOperationCategory— Add to the appropriate category'soperations(for:)methodOperationExecutor.swift— Add config properties toOperationConfigif needed, add a case tobuildArgumentsOperationConfigView.swift— Add a case to the switch, create a config UI component
See CLAUDE.md for more detail on architecture, ffmpeg patterns, and testing.
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b my-feature) - Make your changes
- Run the tests to make sure nothing is broken
- Commit and push to your fork
- Open a pull request
Please keep changes focused — one feature or fix per PR.
Found a bug or have a feature idea? Open an issue.
