.. note:: Bonjour, bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Explorez plus en profondeur l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi rejoindre ?** - **Support d'experts** : Résolvez les problèmes post-vente et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Bénéficiez d'un accès anticipé aux annonces de nouveaux produits et d'aperçus exclusifs. - **Réductions spéciales** : Profitez de remises exclusives sur nos produits les plus récents. - **Promotions festives et concours** : Participez à des concours et à des promotions spéciales. 👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _py_video: 6. Enregistrement Vidéo ======================== Cet exemple vous guide sur la façon d'utiliser la fonction d'enregistrement vidéo. **Exécuter le Code** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 6_record_video.py Une fois le code exécuté, vous pouvez entrer ``http://:9000/mjpg`` dans le navigateur pour afficher l'écran vidéo, par exemple : ``http://192.168.18.113:9000/mjpg`` .. image:: img/display.png L'enregistrement peut être démarré ou arrêté en appuyant sur les touches du clavier. * Appuyez sur ``q`` pour commencer l'enregistrement ou mettre en pause/reprendre, ``e`` pour arrêter l'enregistrement ou enregistrer. * Pour quitter le programme, appuyez sur ``Ctrl+C``. **Code** .. code-block:: python from time import sleep, strftime, localtime from vilib import Vilib import readchar from os import getlogin import os USERNAME = getlogin() VIDEO_PATH = f"/home/{USERNAME}/Videos/" MANUAL = ''' Press keys on keyboard to control recording: Q: record/pause/continue E: stop Ctrl+C: Quit ''' def print_overwrite(msg, end='', flush=True): """Overwrite the current terminal line.""" print('\r\033[2K', end='', flush=True) print(msg, end=end, flush=True) def safe_stop_recording(): """Stop recording safely (avoid exceptions during exit).""" try: Vilib.rec_video_stop() except Exception: pass def safe_close_camera(): """Close camera safely (avoid exceptions during exit).""" try: Vilib.camera_close() except Exception: pass def main(): rec_flag = 'stop' # Possible states: start, pause, stop vname = None # Ensure the video directory exists os.makedirs(VIDEO_PATH, exist_ok=True) # Set save path for recorded videos Vilib.rec_video_set["path"] = VIDEO_PATH # Start camera and preview Vilib.camera_start(vflip=False, hflip=False) Vilib.display(local=False, web=True) sleep(0.8) # Wait for camera startup print(MANUAL) try: while True: # Read keyboard input (no Enter needed) key = readchar.readkey().lower() # Q: start / pause / continue if key == 'q': if rec_flag == 'stop': rec_flag = 'start' # Generate filename based on timestamp vname = strftime("%Y-%m-%d-%H.%M.%S", localtime()) Vilib.rec_video_set["name"] = vname # Start recording Vilib.rec_video_run() Vilib.rec_video_start() print_overwrite('rec start ...') elif rec_flag == 'start': rec_flag = 'pause' Vilib.rec_video_pause() print_overwrite('pause') elif rec_flag == 'pause': rec_flag = 'start' Vilib.rec_video_start() print_overwrite('continue') # E: stop recording elif key == 'e' and rec_flag != 'stop': rec_flag = 'stop' safe_stop_recording() print_overwrite( "The video saved as %s%s.avi" % (Vilib.rec_video_set["path"], vname), end='\n' ) # Ctrl+C (readchar special key): quit elif key == readchar.key.CTRL_C: print('\nquit') break sleep(0.1) except KeyboardInterrupt: # Handle Ctrl+C from terminal as well print('\nquit') finally: # If recording is still active, stop it before closing camera if rec_flag != 'stop': safe_stop_recording() safe_close_camera() sleep(0.1) if __name__ == "__main__": main() **Comment ça fonctionne ?** #. Ce que fait ce programme Ce programme vous permet de contrôler l’enregistrement vidéo à l’aide du clavier. • Q → Démarrer / Mettre en pause / Reprendre l’enregistrement • E → Arrêter l’enregistrement • Ctrl+C → Quitter le programme La vidéo enregistrée sera sauvegardée dans le dossier Videos. #. Préparer le dossier vidéo .. code-block:: python USERNAME = getlogin() VIDEO_PATH = f"/home/{USERNAME}/Videos/" os.makedirs(VIDEO_PATH, exist_ok=True) Le programme récupère votre nom d’utilisateur actuel et crée un dossier Videos s’il n’existe pas déjà. Toutes les vidéos enregistrées seront sauvegardées ici. #. Démarrer la caméra .. code-block:: python Vilib.camera_start(vflip=False, hflip=False) Vilib.display(local=False, web=True) sleep(0.8) La caméra est activée. L’aperçu web est activé afin que vous puissiez voir le flux vidéo en direct dans votre navigateur. Le court délai permet à la caméra de démarrer correctement. #. Configuration de l’état d’enregistrement .. code-block:: python rec_flag = 'stop' vname = None Le programme utilise une variable appelée ``rec_flag`` pour mémoriser l’état actuel de l’enregistrement : • stop → pas d’enregistrement • start → enregistrement en cours • pause → en pause #. Attendre une entrée clavier .. code-block:: python key = readchar.readkey().lower() Le programme attend qu’une touche soit pressée. #. Appuyer sur Q pour démarrer l’enregistrement .. code-block:: python if rec_flag == 'stop': vname = strftime("%Y-%m-%d-%H.%M.%S", localtime()) Vilib.rec_video_set["name"] = vname Vilib.rec_video_run() Vilib.rec_video_start() Lorsque vous appuyez sur Q pour la première fois : • Un nom de fichier est généré à partir de la date et de l’heure actuelles • L’enregistrement démarre immédiatement Exemple de nom de fichier : 2026-03-03-15.30.21.avi #. Appuyer de nouveau sur Q pour mettre en pause .. code-block:: python elif rec_flag == 'start': Vilib.rec_video_pause() Si l’enregistrement est déjà en cours, appuyer sur Q mettra l’enregistrement en pause. #. Appuyer encore sur Q pour continuer .. code-block:: python elif rec_flag == 'pause': Vilib.rec_video_start() Si l’enregistrement est en pause, appuyer à nouveau sur Q reprendra l’enregistrement. #. Appuyer sur E pour arrêter l’enregistrement .. code-block:: python elif key == 'e' and rec_flag != 'stop': Vilib.rec_video_stop() Appuyer sur E arrêtera complètement l’enregistrement. Le fichier vidéo sera enregistré dans : ``/home/your_username/Videos/`` #. Quitter le programme en toute sécurité .. code-block:: python finally: if rec_flag != 'stop': Vilib.rec_video_stop() Vilib.camera_close() Lorsque le programme se termine : • L’enregistrement est arrêté (s’il est encore actif) • La caméra est fermée correctement Cela évite les fichiers vidéo corrompus ou les erreurs de caméra.