Je pense qu'il est préférable de répondre à cette question en donnant un aperçu de la façon dont les choses fonctionnent un peu plus bas. D'abord une mise en garde cependant: je ne suis pas un expert en micrologiciel par aucun effort d'imagination; ma compréhension plutôt approximative du fonctionnement du module de caméra Pi est basée sur mon expérience d'écriture de la bibliothèque picamera et d'interaction avec les développeurs de firmware beaucoup plus compétents sur les forums Pi. Si vous entendez des informations contradictoires de la part des développeurs de micrologiciels, c'est eux qui font autorité, pas moi! Avec cela à l'écart ...
Dès que le module de caméra du Pi est initialisé, il capture des images. Ces images sont (en ce qui concerne l'utilisateur final) vidées mais à l'intérieur du firmware de l'appareil photo, il se passe beaucoup plus. Les images sont mesurées pour déterminer le gain à appliquer au capteur (AGC), la balance des blancs à alimenter à l'algorithme de correction AWB, etc. Par exemple, si vous démarrez l'appareil photo et commencez immédiatement l'enregistrement, vous verrez généralement le la balance des blancs se corrige au cours des premières images de l'enregistrement:
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_recording('video1.h264')
time.sleep(5)
camera.stop_recording()
Cependant, si vous placez un délai avant de commencer l'enregistrement, vous verrez que la balance des blancs est stable au début de l'enregistrement:
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()
Donc, étant donné que l'appareil photo capture toujours des images même lorsque nous ne capturons pas d'images ou n'enregistrons pas de vidéos, que se passe-t-il réellement lorsque nous choisissons de capturer une image? Nous demandons au micrologiciel d'activer la capture, et le micrologiciel attend que la prochaine image soit terminée avant de nous la renvoyer (en fait, si vous capturez des images à partir du port fixe au lieu du port vidéo, il y a beaucoup plus qui se passe, y compris commutateurs de mode, mais vous êtes préoccupé par le port vidéo, alors ignorons cela).
Considérez ce que cela signifie pour la synchronisation (votre cas d'utilisation particulier). L'appareil photo n'est pas "prêt" à capturer une image à un moment donné. Il capture déjà un cadre et lorsque vous en demandez un, il vous remettra le prochain complet qui deviendra disponible. Afin de synchroniser les cadres des caméras, toutes les caméras devraient être initialisées exactement en même temps, puis leurs horloges internes devraient fonctionner précisément en synchronisation (les caméras ont leur propre horloge interne; elles ne dépendent pas de la Horloge de Pi).
Malheureusement, je ne pense pas que ce soit vraiment une perspective réaliste. Si je me souviens bien, le module de calcul Pi (qui a 2 ports de caméra intégrés et prend en charge 2 modules de caméra simultanément) utilise des appels spéciaux dans le firmware pour que les 2 modules utilisent un seul signal d'horloge (je ne sais pas comment cela fonctionne au niveau matériel mais je suppose qu'il utilise quelque chose de spécifique au module de calcul); Je ne peux pas imaginer comment vous feriez quelque chose de similaire sur 4 Pis.
Mise à jour:
Je dois ajouter qu'il est possible de faire une synchronisation approximative avec des connaissances de réseau raisonnables (par exemple, des paquets de diffusion UDP). En d'autres termes, il est possible d'obtenir tous les Pi sur un réseau pour déclencher une capture à une milliseconde près (en supposant un réseau décent à faible latence comme Ethernet), mais comme décrit ci-dessus, cela ne garantit toujours pas que toutes les caméras seront réellement capturer une image en même temps; il y aura jusqu'à une valeur de décalage d'une trame (plus la latence du réseau) entre les heures de début des captures résultantes.
Si ce niveau de synchronisation est suffisant pour les gens, ils voudront peut-être consulter le projet compoundpi qui est un autre projet que j'ai écrit sur picamera à cette fin.