⚠️ IMPORTANT NOTICE / DISCLAIMER: This project was generated by an AI (LLM). I WILL NOT MAINTAIN THIS REPOSITORY. No issue tracking, no bug fixes, no feature updates. It worked on my machine™ and is shared "as-is".Why release it then? Because the AI output produced consistently good results for syncing cinematic clips to music beats. Use at your own risk.
Automatically cut and sync cinematic video clips (Minecraft, gameplay, montages, B-roll) precisely to the beats, kick drums, snares, and synth drops of any song.
No manual editing in Premiere Pro, DaVinci Resolve, or CapCut needed. One command syncs your video to the music. 🚀
Never used Python or the terminal before? No problem — follow the steps below. The Linux instructions are written for Ubuntu, Debian, and Pop!_OS.
- Python 3 runs the program.
- FFmpeg reads, cuts, scales, and joins video and audio files.
- librosa analyzes the music and detects onsets/beats.
- NumPy and SoundFile support the audio analysis.
- PyQt6 creates the graphical user interface (GUI).
- A virtual environment keeps this project's Python packages separate from the rest of your system.
On Pop!_OS, Ubuntu, or Debian, press Ctrl + Alt + T to open a terminal.
Copy and paste this command:
sudo apt update
sudo apt install -y python3 python3-pip python3-venv ffmpeg gitWhat each part does:
sudoruns the installation with administrator permissions. Your password may be requested; nothing will appear while you type it.apt updaterefreshes the list of available system packages. It does not install the program yet.apt installinstalls packages.-yautomatically answers “yes” to the installation prompts.python3installs Python.python3-pipinstalls Python's package installer.python3-venvallows us to create a virtual environment. This package is easy to miss and is required for the setup below.ffmpegandgitinstall the video tools and Git.
If you downloaded the project as a ZIP file, extract it first. Then run cd with the path to the extracted folder. For example:
cd ~/Downloads/Beat-Sync-Cutter-master/Beat-Sync-Cutter-mastercd means change directory. It tells the terminal where the project files are located.
You can check that you are in the correct folder with:
pwd
lspwdprints the current folder.lslists the files in the current folder. You should seebeat_sync_cutter.pyandgui.py.
If you prefer to clone the project with Git instead of downloading a ZIP, use:
git clone -b master https://github.com/DasFletchi/Beat-Sync-Cutter.git
cd Beat-Sync-Cuttergit clonedownloads the project and its Git history.-b masterchecks out the project'smasterbranch.cd Beat-Sync-Cutterenters the newly downloaded folder.
A Git clone is recommended if you want to receive future updates with git pull. A ZIP download does not contain the hidden .git folder and cannot use git pull until you clone the repository separately.
Run this once, from inside the project folder:
python3 -m venv venvWhat this command does:
python3 -m venvtells Python to run its built-in virtual-environment tool.- The final
venvis the folder name that will be created inside the project. - The environment contains its own Python and its own installed packages.
You only need to create this environment once. It is intentionally not uploaded to GitHub because it is specific to your computer.
Run:
source venv/bin/activatesource loads a script into the current terminal session. This script changes the terminal to use the Python inside venv.
After activation, your terminal prompt should begin with something like:
(venv) user@computer:~/...$
Seeing (venv) is important: it means that the project's Python packages will be used.
With (venv) active, run:
python -m pip install --upgrade pip
python -m pip install librosa numpy soundfile PyQt6What each command does:
pythonnow means the Python insidevenv.-m pipruns the package installer belonging to that exact Python. This avoids installing packages into the wrong Python installation.install --upgrade pipupdates the package installer.install librosa numpy soundfile PyQt6installs all Python libraries required by Beat-Sync Cutter.
Still in the same terminal and with (venv) active, run:
python beat_sync_cutter.py --guipython beat_sync_cutter.pyruns the main program.--guitells it to open the graphical interface.
A window should open with video/audio file selectors, render settings, a progress bar, and logs.
You do not need to reinstall the packages every time. Open a new terminal and run:
cd ~/Downloads/Beat-Sync-Cutter-master/Beat-Sync-Cutter-master
source venv/bin/activate
python beat_sync_cutter.py --guiThe commands mean:
- Enter the project folder.
- Activate the existing virtual environment.
- Start the GUI using the correct Python and installed packages.
If you cloned the repository instead, use the path of that clone:
cd ~/Beat-Sync-Cutter
source venv/bin/activate
python beat_sync_cutter.py --guiWhen you are finished, you can leave the virtual environment with:
deactivateThis only exits the environment for the current terminal. It does not delete anything.
On many Linux systems, the command is called python3, not python. After activating venv, the command python works because the virtual environment provides it. If you are not using an activated environment, use python3.
The required packages are not installed in the Python environment that started the program. Run:
cd ~/Downloads/Beat-Sync-Cutter-master/Beat-Sync-Cutter-master
source venv/bin/activate
python -m pip install librosa numpy soundfile PyQt6
python beat_sync_cutter.py --guiIf venv does not exist yet, create it first:
python3 -m venv venvInstall the missing system package and create the environment again:
sudo apt install -y python3-venv
python3 -m venv venvInstall FFmpeg:
sudo apt update
sudo apt install -y ffmpegUse the actual path where you extracted or cloned the project. You can type cd (including the space) and then drag the project folder from your file manager into the terminal. Press Enter afterwards.
These commands only work if you used git clone. They do not work in a ZIP folder because a ZIP does not contain Git history.
First enter the folder and check whether you have local changes:
cd ~/Beat-Sync-Cutter
git status --short --branchgit statusshows which files were changed locally.--shortkeeps the output brief.--branchalso shows your current branch.
If you changed README.md or another project file, make a backup before pulling:
cp README.md README.backup.mdcp means copy. This creates a separate backup of your README. You can also commit your changes before updating:
git add README.md
git commit -m "Update README"git addselects the changed file for the next commit.git commitsaves the change in Git history on your computer.
source venv/bin/activate
git pull --ff-only origin master
python beat_sync_cutter.py --guiWhat they do:
source venv/bin/activateactivates the project's existing Python environment.git pull --ff-only origin masterdownloads the latestmasterbranch and updates your local copy without creating an unexpected merge commit.- The final command starts the updated program.
git pull --ff-only does not silently overwrite local changes. If your local version and GitHub's version conflict, Git stops and prints an error so you can resolve it safely.
If Git says not a git repository, you are in a ZIP/extracted folder or the wrong directory. Go back to the clone folder, or clone the repository again using the instructions above. Do not run git init in a folder containing work you want to keep unless you know exactly what you are doing.
- Download and install Python. During installation, enable “Add Python to PATH”.
- Download and install FFmpeg, then add it to your System Environment Variables (
PATH). - Open PowerShell in the project folder.
- Create and activate the environment:
py -m venv venv
.\venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install librosa numpy soundfile PyQt6
python beat_sync_cutter.py --guiInstead of the GUI, you can run the cutter directly:
python beat_sync_cutter.py \
--video "YourVideo.mp4" \
--audio "YourSong.mp3" \
--output "SyncedOutput.mp4"Example:
python beat_sync_cutter.py \
--video "gameplay.mp4" \
--audio "song.mp3" \
--output "synced_output.mp4" \
--min-cut-dur 0.5 \
--scale 1920:-2Make sure the virtual environment is activated first on Linux:
source venv/bin/activate| Parameter | Description | Default / Example |
|---|---|---|
--video / -v |
(Required) Path to input video file | --video "gameplay.mp4" |
--audio / -a |
(Required) Path to input audio file | --audio "song.mp3" |
--output / -o |
Path for final synced video | --output "synced.mp4" |
--min-cut-dur |
Minimum clip length in seconds (prevents seizure-inducing flicker) | --min-cut-dur 0.35 |
--scale |
Output video resolution via FFmpeg | --scale 1280:-2 |
MIT License