Free multicam audio sync for Mac: line up cameras and recorders by their sound and get a Premiere Pro / DaVinci Resolve timeline. An open alternative to PluralEyes and Syncaila.
翻訳待ち
Loading the full README.
Read the full README ↗Waveform-based multicam sync for FCP7 XML (xmeml) timelines — an open, scriptable
equivalent of PluralEyes 4 / Syncaila.
Companion to ActionCheese — Multicam Remote: record the takes there, sync the timeline here.
Feed it a timeline exported from Premiere Pro (or Resolve, or Media Composer) with one camera or recorder per track, or just the folders off the cards — one per camera — or any mix of the two. It analyses the audio, works out where every clip really belongs, and writes a timeline with everything in sync. Clips it cannot match are never dropped — they are moved onto newly created tracks placed after the last synced clip.
Material that arrives already synced, such as an ActionCheese shoot recorded by several phones against one shared clock, keeps its relationships without being re-measured.
Download ActionCheese Sync for Mac — free, Apple silicon, macOS 11 or later. Product page and full help: actioncheese.com/sync.html.
Signed with Developer ID and notarized by Apple, so it opens like any other app.
ffmpeg and ffprobe on PATH (brew install ffmpeg)uv venv && uv pip install -e ".[dev]"
packaging/build_app.sh # bundles ffmpeg -> runs on any Mac
packaging/build_app.sh --no-ffmpeg # smaller; recipient must have ffmpeg
Produces dist/ActionCheese Sync.app (~120 MB bundled). To share it:
ditto -c -k --keepParent "dist/ActionCheese Sync.app" dist/ActionCheeseSync-mac.zip
To sign, notarize and zip it for a release (needs the IMGXMEDIA Developer ID certificate
and a notarytool profile, see the script):
packaging/sign_and_notarize.sh
The bundle also carries the CLI:
"ActionCheese Sync.app/Contents/MacOS/ActionCheese Sync" --cli sync in.xml -o out.xml
Licence note: Homebrew's ffmpeg is built with GPL components, so a bundled build is subject to the GPL — anyone you give it to is entitled to the corresponding source. This project is GPL-3.0 and its source is this repository; the bundled ffmpeg is Homebrew's build of the upstream release, whose source is at https://ffmpeg.org/download.html and https://github.com/Homebrew/homebrew-core/blob/master/Formula/f/ffmpeg.rb.
Run the GUI from a checkout with actioncheese-sync-gui.
Export your timeline from Premiere with File → Export → Final Cut Pro XML, then:
actioncheese-sync sync timeline.xml -o timeline-synced.xml --report report.json
Inputs are positional and can be mixed freely. A folder is one camera or recorder — nested card structure does not matter, everything under it belongs to that device:
actioncheese-sync sync ~/cards/cam-a ~/cards/cam-b ~/cards/recorder -o synced.xml
Three kinds of input are recognised:
| Input | Treated as |
|---|---|
.xml (FCP7 / xmeml) | A timeline; its clips keep their positions |
An ActionCheese shoot folder (has .saycheese-shoot.json) | One device per phone, already in sync with each other; camera folders nested inside it are picked up as further devices |
| Any other folder | One device; clips ordered by when they were recorded |
Recording times come from a Sony card's own *M01.XML clip sidecar where there is one —
it records the moment recording started, and reading it is both faster and more
trustworthy than probing the movie — and from the container's creation_time otherwise.
# a shoot folder with the cards dropped inside it: one argument does the lot
actioncheese-sync sync /Volumes/T7/actioncheese/2026-09-27 -o synced.xml
# see what would be read, without analysing anything
actioncheese-sync probe /Volumes/T7/actioncheese/2026-09-27
One timeline on its own is edited in place: its document is copied and only numbers in it change, so every Premiere-specific detail survives. Anything else has to be assembled into a new timeline — clips keep their media, in and out points and positions, but effects, labels and speed changes on them do not carry over.
Markers come across and follow the clip they were made on, so they still mark the same moment after everything has moved. A marker made between takes keeps its distance from the takes either side.
Markers from an ActionCheese shoot follow that shoot's own cameras, never a camera card: the shoot's clock is the one that timed them, so anchoring one to a card whose clock was 40 s out would drag it 40 s off when that card is moved into place.
Stated timings are treated as strong evidence, not as fact: where a confident audio
match disagrees, the audio wins. Measured against the ActionCheese app's own shoot index
on two real shoots, its clip starts were good to about 0.03 s for most phones — but one
handset was out by up to 0.7 s, which the audio caught and corrected. Pass
--trust-synced to keep the stated timing exactly instead.
Either way the report lists every already-synced clip the audio moved, and by how much, so the accuracy of whatever produced those timings is visible rather than assumed.
Import timeline-synced.xml back into Premiere (File → Import).
Inspect a timeline without analysing anything:
actioncheese-sync probe timeline.xml
Analyse and report without writing an output file:
actioncheese-sync sync timeline.xml --dry-run
This is the beginning of the README. Read the rest at the original. Read the full README ↗