Nota

Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. ¡Explora más a fondo Raspberry Pi, Arduino y ESP32 con otros entusiastas!

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y vistas previas.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo.

Grabar Video

Este ejemplo te guiará sobre cómo utilizar la función de grabación.

Ejecutar el Código

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

Después de ejecutar el código, puedes ingresar http://<tu IP>:9000/mjpg en el navegador para ver la pantalla de video, por ejemplo: http://192.168.18.113:9000/mjpg.

../_images/display.png

La grabación se puede detener o iniciar presionando teclas en el teclado.

  • Pulsa q para comenzar la grabación, pausar/continuar, y e para detener la grabación o guardar.

  • Si deseas salir del programa, presiona Ctrl+C.

Código

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

¿Cómo funciona?

  1. Qué Hace Este Programa

    Este programa permite controlar la grabación de video usando el teclado.

    • Q → Iniciar / Pausar / Continuar la grabación

    • E → Detener la grabación

    • Ctrl+C → Salir del programa

    El video grabado se guardará en la carpeta Videos.

  2. Preparar la Carpeta de Video

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

    El programa obtiene el nombre de usuario actual y crea una carpeta Videos si aún no existe.

    Todos los videos grabados se guardarán aquí.

  3. Iniciar la Cámara

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

    La cámara se enciende. Se habilita la vista previa web para que pueda ver la transmisión en vivo en el navegador.

    El pequeño retraso permite que la cámara se inicie correctamente.

  4. Configuración del Estado de Grabación

    rec_flag = 'stop'
    vname = None
    

    El programa utiliza una variable llamada rec_flag para recordar el estado actual de la grabación:

    • stop → no está grabando

    • start → grabando

    • pause → en pausa

  5. Esperar Entrada del Teclado

    key = readchar.readkey().lower()
    

    El programa espera a que se presione una tecla.

  6. Presione Q para Iniciar la Grabación

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

    Cuando presiona Q por primera vez:

    • Se genera un nombre de archivo usando la fecha y hora actuales

    • La grabación comienza inmediatamente

    Ejemplo de nombre de archivo: 2026-03-03-15.30.21.avi

  7. Presione Q Otra Vez para Pausar

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

    Si la grabación ya está en curso, presionar Q pausará la grabación.

  8. Presione Q Otra Vez para Continuar

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

    Si la grabación está en pausa, presionar Q nuevamente continuará la grabación.

  9. Presione E para Detener la Grabación

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

    Presionar E detendrá completamente la grabación.

    El archivo de video se guardará en: /home/your_username/Videos/

  10. Salir del Programa de Forma Segura

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

    Cuando el programa finaliza:

    • La grabación se detiene (si aún está en ejecución)

    • La cámara se cierra de forma segura

    Esto evita archivos de video dañados o errores de cámara.