A graphical user interface for FFmpeg video conversion with both PyQt6 and Tkinter implementations.
- Dual GUI Options: Choose between PyQt6 or Tkinter interface
- Video Conversion: Support for various codecs, bitrates, and resolutions
- FFmpeg Integration: Built-in FFmpeg download and installation assistance
- Video Analysis: Display video information using ffprobe
- Cross-Platform: Works on Windows, macOS, and Linux
- Non-blocking Operations: Responsive UI during video processing
GUI_pyqt6_WINFF.py
— PyQt6 interface with additional featuresGUI_tkinter_WINFF.py
— Lightweight Tkinter interfaceutils_safe_extract.py
— Safe archive extraction utilitiesrequirements.txt
— Project dependenciesMakefile
— Development automation scripts
- Python 3.8 or higher
- FFmpeg (can be downloaded through the application)
Windows:
# Double-click setup_windows.bat or run in Command Prompt:
setup_windows.bat
# Then run the application:
run_windows.bat
macOS/Linux:
# Make executable and run setup:
chmod +x setup_macos.sh
./setup_macos.sh
# Then run the application:
./run_macos.sh
-
Clone the repository:
git clone https://github.com/yourusername/ffmpeg-gui-pyqt6.git cd ffmpeg-gui-pyqt6
-
Set up virtual environment:
Windows: See detailed guide in INSTALL_WINDOWS.md
python -m venv .venv .venv\Scripts\activate.bat
macOS/Linux:
python3 -m venv .venv source .venv/bin/activate
-
Install dependencies:
# All platforms pip install -r requirements.txt
-
Run the application:
Windows:
python GUI_pyqt6_WINFF.py rem Or Tkinter version python GUI_tkinter_WINFF.py
macOS/Linux:
python GUI_pyqt6_WINFF.py # Or Tkinter version python GUI_tkinter_WINFF.py
Pre-built executables are available for:
- macOS ARM64:
FFmpeg_GUI_macOS_ARM64.dmg
- Native .app bundle in DMG installer - Windows AMD64: Native build required (see
BUILD_WINDOWS_NATIVE.md
)
Note: Cross-compilation from macOS to Windows is not supported by PyInstaller. For Windows .exe, build on Windows system using provided spec files.
- Virtual environment with dependencies installed
- PyInstaller 6.0+ (included in requirements.txt)
# macOS ARM64 .app bundle
make build-macos
# Windows AMD64 executable (cross-platform)
make build-windows
# Clean build artifacts
make clean-build
# Universal build script
python build.py macos # macOS only
python build.py windows # Any platform
python build.py both # Both platforms
macOS ARM64:
dist/FFmpeg_GUI.app
- Application bundle- Optional: DMG installer
Windows AMD64:
dist/windows/FFmpeg_GUI_Windows_AMD64.exe
- ExecutableFFmpeg_GUI_Windows_AMD64.zip
- Distribution package
See build_info.md
for detailed build instructions and troubleshooting.
- Select Input File: Click "Browse" to choose your video file
- Set Output Directory: Choose where to save the converted video
- Configure Settings:
- Select video codec (H.264, H.265, VP9, etc.)
- Choose audio codec (AAC, MP3, etc.)
- Set bitrate and resolution
- Preview Command: Review the FFmpeg command before conversion
- Convert: Click "Convert" to start processing
If FFmpeg is not installed:
- Use "Baixar FFmpeg" to download FFmpeg binaries
- On Windows, use "Instalar FFmpeg (winget)" for automatic installation
- The app provides guided installation assistance
Using direnv (optional):
cp .envrc.example .envrc
direnv allow
# Run all tests
make test
# Or manually with pytest
pytest -v
# Install git hooks for pre-commit checks
make hooks
# The pre-commit hook will run:
# - File size limits check
# - pytest test suite
ffmpeg-gui-pyqt6/
├── GUI_pyqt6_WINFF.py # Main PyQt6 application
├── GUI_tkinter_WINFF.py # Tkinter alternative
├── utils_safe_extract.py # Security utilities
├── requirements.txt # Dependencies
├── Makefile # Development tasks
├── tests/ # Test suite
│ ├── test_command_build.py
│ └── test_safe_extract.py
├── .github/ # CI/CD workflows
└── .githooks/ # Git hooks
We accept contributions. Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature
- Install development dependencies:
make install
- Set up git hooks:
make hooks
- Make your changes
- Run tests:
make test
- Commit your changes with clear messages
- Push to your fork and submit a Pull Request
- Follow PEP 8 style guidelines
- Add tests for new functionality
- Keep commits focused and atomic
- Write clear commit messages
- All file extractions use safe extraction utilities
- FFmpeg downloads are verified and secured
- Input validation prevents command injection
This project implements several security measures:
- Safe Archive Extraction: Prevents directory traversal attacks
- Input Sanitization: Validates all user inputs
- Secure Downloads: HTTPS-only with certificate verification
- Command Injection Prevention: Proper escaping of shell commands
Report security vulnerabilities privately to the maintainers.
- Windows: Support with winget integration
- macOS: Native support with Homebrew compatibility
- Linux: Support across distributions
"FFmpeg not found"
- Use the built-in download feature
- Install via package manager:
brew install ffmpeg
(macOS) orapt install ffmpeg
(Ubuntu)
"Qt platform plugin not found"
- Install system Qt libraries or use the Tkinter version
- Set
QT_QPA_PLATFORM=offscreen
for headless environments
Permission errors on extracted files
- Ensure write permissions to output directory
- On macOS/Linux, check directory ownership
- Check the Issues page
- Review existing discussions and solutions
- Create a new issue with detailed information:
- OS and Python version
- Error messages
- Steps to reproduce
This project is licensed under the MIT License - see the LICENSE file for details.
- Original Tkinter implementation by Mauricio Menon
- FFmpeg team for the media processing framework
- PyQt6 and Tkinter communities for GUI frameworks
See CHANGELOG.md for detailed version history and updates.
This repository follows strict technical documentation standards. See CONTRIBUTING_RULES.md for details.