Video player but you can go frame by frame backwards and forwards and it can play multi track audio simultaneously.
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # Mac/Linux
# On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtpython run.py [video_file]| Key | Action |
|---|---|
Space |
Play / Pause |
Left |
Step back one frame |
Right |
Step forward one frame |
Up |
Volume up |
Down |
Volume down |
[ |
Skip back 5 seconds |
] |
Skip forward 10 seconds |
{ |
Skip back 15 seconds |
} |
Skip forward 30 seconds |
A |
Toggle audio mixer panel |
Ctrl/Cmd+O |
Open file |
pip install pyinstaller# Build executable
python build.py
# Build with installer (DMG on macOS, NSIS on Windows)
python build.py --installer
# Clean and rebuild
python build.py --clean# Build .app bundle
python build.py
# Output: dist/GoodPlayer.app
# Create DMG installer (requires create-dmg: brew install create-dmg)
python build.py --installerTo create a properly signed app for distribution:
# Sign the app (requires Apple Developer certificate)
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name" \
dist/GoodPlayer.app
# Notarize for Gatekeeper (requires App Store Connect API key)
xcrun notarytool submit dist/GoodPlayer-1.0.0.dmg \
--apple-id your@email.com \
--team-id YOURTEAMID \
--password @keychain:AC_PASSWORD# Build executable
python build.py
# Output: dist/GoodPlayer/GoodPlayer.exe
# Create installer (requires NSIS: https://nsis.sourceforge.io/)
python build.py --installer
# Output: dist/GoodPlayer-Setup.exeIf you prefer to run PyInstaller directly:
# Using spec file (recommended)
pyinstaller --clean GoodPlayer.spec
# Or simple one-liner
pyinstaller --name GoodPlayer --windowed --onedir run.py| Platform | Output | Description |
|---|---|---|
| macOS | dist/GoodPlayer.app |
Application bundle |
| macOS | dist/GoodPlayer-1.0.0.dmg |
DMG installer |
| Windows | dist/GoodPlayer/GoodPlayer.exe |
Portable executable |
| Windows | dist/GoodPlayer-Setup.exe |
NSIS installer |
PyAV bundles FFmpeg libraries, but if you encounter issues:
# macOS
brew install ffmpeg
# Windows - download from https://ffmpeg.org/download.htmlEnsure PortAudio is available. sounddevice usually bundles it, but if not:
pip install sounddevice --force-reinstallpip install PyQt6 --force-reinstall