Nota

Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirti a noi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a promozioni e concorsi durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca [qui] e unisciti oggi stesso!

6. Registra Video

Questo esempio ti guiderà su come utilizzare la funzione di registrazione.

Esegui il Codice

cd ~/picrawler/examples
sudo python3 6_record_video.py

Dopo l’esecuzione del codice, puoi inserire http://<il tuo IP>:9000/mjpg nel browser per visualizzare lo schermo video. Ad esempio: http://192.168.18.113:9000/mjpg

../_images/display.png

La registrazione può essere avviata o interrotta premendo i tasti sulla tastiera.

  • Premi q per avviare la registrazione o mettere in pausa/continuare, e per fermare la registrazione o salvare.

  • Per uscire dal programma, premi Ctrl+C.

Codice

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()

Come funziona?

  1. Cosa fa questo programma

    Questo programma consente di controllare la registrazione video utilizzando la tastiera.

    • Q → Avvia / Pausa / Continua la registrazione

    • E → Interrompe la registrazione

    • Ctrl+C → Esce dal programma

    Il video registrato verrà salvato nella cartella Videos.

  2. Preparare la cartella Video

    USERNAME = getlogin()
    VIDEO_PATH = f"/home/{USERNAME}/Videos/"
    os.makedirs(VIDEO_PATH, exist_ok=True)
    

    Il programma individua il tuo nome utente corrente e crea una cartella Videos se non esiste già.

    Tutti i video registrati verranno salvati qui.

  3. Avviare la fotocamera

    Vilib.camera_start(vflip=False, hflip=False)
    Vilib.display(local=False, web=True)
    sleep(0.8)
    

    La fotocamera viene attivata. L’anteprima web viene abilitata così puoi guardare lo streaming live nel browser.

    Il breve ritardo consente alla fotocamera di avviarsi correttamente.

  4. Impostazione dello stato di registrazione

    rec_flag = 'stop'
    vname = None
    

    Il programma utilizza una variabile chiamata rec_flag per ricordare lo stato corrente della registrazione:

    • stop → non sta registrando

    • start → sta registrando

    • pause → in pausa

  5. Attendere l’input da tastiera

    key = readchar.readkey().lower()
    

    Il programma attende la pressione di un tasto.

  6. Premere Q per avviare la registrazione

    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()
    

    Quando premi Q per la prima volta:

    • Viene generato un nome file utilizzando la data e l’ora correnti

    • La registrazione inizia immediatamente

    Esempio di nome file: 2026-03-03-15.30.21.avi

  7. Premere di nuovo Q per mettere in pausa

    elif rec_flag == 'start':
        Vilib.rec_video_pause()
    

    Se la registrazione è già in corso, premendo Q la registrazione verrà messa in pausa.

  8. Premere di nuovo Q per continuare

    elif rec_flag == 'pause':
        Vilib.rec_video_start()
    

    Se la registrazione è in pausa, premendo di nuovo Q la registrazione continuerà.

  9. Premere E per interrompere la registrazione

    elif key == 'e' and rec_flag != 'stop':
        Vilib.rec_video_stop()
    

    Premendo E la registrazione verrà interrotta completamente.

    Il file video verrà salvato in: /home/your_username/Videos/

  10. Uscire dal programma in modo sicuro

    finally:
        if rec_flag != 'stop':
            Vilib.rec_video_stop()
        Vilib.camera_close()
    

    Quando il programma termina:

    • La registrazione viene interrotta (se è ancora in esecuzione)

    • La fotocamera viene chiusa in modo sicuro

    Questo evita file video danneggiati o errori della fotocamera.