.. note::
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 [|link_sf_facebook|] y únete hoy mismo.
.. _py_video:
Grabar Video
==================
Este ejemplo te guiará sobre cómo utilizar la función de grabación.
**Ejecutar el Código**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 6_record_video.py
Después de ejecutar el código, puedes ingresar ``http://:9000/mjpg`` en el navegador para ver la pantalla de video, por ejemplo: ``http://192.168.18.113:9000/mjpg``.
.. image:: img/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**
.. 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()
**¿Cómo funciona?**
#. 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.
#. Preparar la Carpeta de Video
.. code-block:: python
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í.
#. Iniciar la Cámara
.. code-block:: python
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.
#. Configuración del Estado de Grabación
.. code-block:: python
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
#. Esperar Entrada del Teclado
.. code-block:: python
key = readchar.readkey().lower()
El programa espera a que se presione una tecla.
#. Presione Q para Iniciar la Grabación
.. 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()
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
#. Presione Q Otra Vez para Pausar
.. code-block:: python
elif rec_flag == 'start':
Vilib.rec_video_pause()
Si la grabación ya está en curso,
presionar Q pausará la grabación.
#. Presione Q Otra Vez para Continuar
.. code-block:: python
elif rec_flag == 'pause':
Vilib.rec_video_start()
Si la grabación está en pausa,
presionar Q nuevamente continuará la grabación.
#. Presione E para Detener la Grabación
.. code-block:: python
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/``
#. Salir del Programa de Forma Segura
.. code-block:: python
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.