Eu acho que é melhor responder a essa pergunta, dando uma ideia de como as coisas funcionam um pouco mais abaixo. Primeiro, porém, uma ressalva: eu não sou especialista em firmware por nenhuma extensão da imaginação; meu entendimento bastante aproximado de como o módulo de câmera Pi funciona baseia-se em minha experiência de escrever a biblioteca picamera e interagir com os desenvolvedores de firmware muito mais experientes nos fóruns Pi. Se você ouvir informações contraditórias dos desenvolvedores de firmware, eles são a autoridade nisso, não eu! Com isso fora do caminho ...
Assim que o módulo de câmera do Pi é inicializado, ele está capturando quadros. Esses quadros são (no que diz respeito ao usuário final) despejados, mas dentro do firmware da câmera há muito mais acontecendo. Os quadros são medidos para determinar o ganho a ser aplicado ao sensor (AGC), o balanço de branco para alimentar o algoritmo de correção AWB, etc. Por exemplo, se você iniciar a câmera e iniciar imediatamente a gravação, verá normalmente o o balanço de branco se corrige nos primeiros quadros da gravação:
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_recording('video1.h264')
time.sleep(5)
camera.stop_recording()
No entanto, se você colocar um atraso antes de iniciar a gravação, verá que o balanço de brancos é estável quando a gravação começa:
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
time.sleep(5)
camera.start_recording('video2.h264')
time.sleep(5)
camera.stop_recording()
Portanto, como a câmera está sempre capturando quadros, mesmo quando não estamos capturando imagens ou gravando vídeos, o que realmente acontece quando escolhemos capturar uma imagem? Dizemos ao firmware para ativar a captura, e o firmware aguarda a conclusão do próximo quadro antes de devolvê-lo (na verdade, se você estiver capturando imagens da porta estática em vez da porta de vídeo, ainda há muito mais, incluindo comutadores de modo, mas você está preocupado com a porta de vídeo, então vamos ignorar isso).
Considere o que isso significa para sincronização (seu caso de uso específico). A câmera não está "pronta" para capturar um quadro em qualquer ponto específico. Ele já está capturando um quadro e, quando você pedir um, ele entregará o próximo quadro completo que estiver disponível. Para sincronizar os quadros das câmeras, todas as câmeras teriam que ser inicializadas exatamente ao mesmo tempo, e então seus relógios internos teriam que funcionar precisamente em sincronia (as câmeras têm seu próprio relógio interno; elas não confiam no Relógio do Pi).
Infelizmente, não acho que essa seja realmente uma perspectiva realista. Se bem me lembro, o módulo de computação Pi (que tem 2 portas de câmera on-line e suporta 2 módulos de câmera simultaneamente) usa algumas chamadas especiais no firmware para fazer com que os 2 módulos usem um único sinal de relógio (não tenho idéia de como isso funciona no nível do hardware, mas presumo que ele esteja usando algo específico para o módulo de computação); Não consigo imaginar como você faria algo semelhante em quatro Pis.
Atualizar:
Devo acrescentar que é possível fazer uma sincronização grosseira com algum conhecimento razoável de rede (por exemplo, pacotes de transmissão UDP). Em outras palavras, é possível obter todos os Pi's em uma rede para disparar uma captura dentro de um milissegundo um do outro (assumindo uma rede decente de baixa latência como a Ethernet), mas conforme descrito acima, isso ainda não garante que todas as câmeras realmente capturar um quadro ao mesmo tempo; haverá um atraso de até um quadro (mais a latência da rede) entre os horários de início das capturas resultantes.
Se esse nível de sincronização é suficiente para as pessoas, elas podem conferir o projeto compositepi, que é outro projeto que escrevi no topo da picamera para esse fim.