.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto 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. - **Preestrenos exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **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. .. _3.1.2_py_pi5: 3.1.2 Módulo de Video ======================== Introducción --------------- Además de tomar fotos, el módulo de cámara también puede usarse para grabar videos. Componentes Requeridos ------------------------- En este proyecto, necesitamos los siguientes componentes. .. image:: ../python_pi5/img/3.3.2_photograph_list.png :width: 800 Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ARTÍCULOS EN ESTE KIT - ENLACE * - Raphael Kit - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los siguientes enlaces. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DEL COMPONENTE - ENLACE DE COMPRA * - :ref:`cpn_camera_module` - |link_camera_buy| Procedimientos Experimentales --------------------------------- **Paso 1:** Entra en el escritorio de Raspberry Pi. Puede que necesites una pantalla para una mejor experiencia, consulta: `Conecta tu Raspberry Pi `_. O accede al escritorio de Raspberry Pi de forma remota, para un tutorial detallado, consulta :ref:`remote_desktop`. **Paso 2:** Abre una terminal y accede a la carpeta del código. .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecuta. .. code-block:: sudo python3 3.1.2_VideoModule_zero.py Ejecuta el código para comenzar a grabar. Presiona ``Ctrl+C`` para finalizar la grabación. Nombra el video ``my_video.h264`` y guárdalo en el directorio ``~``. .. note:: También puedes abrir ``3.1.2_PhotographModule_zero.py`` en la ruta ``~/raphael-kit/python-pi5`` con un IDE de Python, haz clic en el botón de ejecutar para iniciar y detén el código con el botón de detener. Si deseas enviar fotos a tu PC, consulta :ref:`filezilla`. .. warning:: Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc` **Código** .. code-block:: python #!/usr/bin/env python3 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput import os # Obtener el nombre de usuario actual user = os.getlogin() # Obtener la ruta del directorio home del usuario user_home = os.path.expanduser(f'~{user}') # Crear una instancia de Picamera2 camera = Picamera2() # Recuperar la configuración de vista previa predeterminada preview_config = camera.preview_configuration try: # Configurar tamaño y formato de vista previa preview_config.size = (800, 600) preview_config.format = 'XRGB8888' # Iniciar la vista previa de la cámara en modo QTGL camera.start_preview(Preview.QTGL) # Definir configuración de video con tamaño, velocidad de fotogramas y recuento de búfer conf = {'size': (800, 600)} controls = {'FrameRate': 40} config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12) # Crear un codificador de video con una tasa de bits especificada encoder = H264Encoder(bitrate=10000000) # Definir el archivo de salida para el video output = FfmpegOutput(f'{user_home}/my_video.mp4') # Configurar e iniciar la grabación camera.configure(config) camera.start_recording(encoder, output) # Grabar durante 10 segundos time.sleep(10) # Detener la grabación camera.stop_recording() except KeyboardInterrupt: # Detener la vista previa de la cámara si ocurre una interrupción de teclado (e.g., Ctrl+C) camera.stop_preview() pass **Explicación del Código** #. Importa las bibliotecas y clases necesarias. La biblioteca ``picamera2`` se usa para el control de la cámara, ``H264Encoder`` para la codificación de video, y ``FfmpegOutput`` para definir el archivo de salida del video. .. code-block:: python #!/usr/bin/env python3 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput import os #. Recupera el nombre de usuario actual y la ruta a su directorio home. .. code-block:: python # Obtener el nombre de usuario actual user = os.getlogin() # Obtener la ruta del directorio home del usuario user_home = os.path.expanduser(f'~{user}') #. Crea una instancia de la clase ``Picamera2`` y recupera la configuración de vista previa predeterminada. .. code-block:: python # Crear una instancia de Picamera2 camera = Picamera2() # Recuperar la configuración de vista previa predeterminada preview_config = camera.preview_configuration #. Establece el tamaño y formato de la vista previa de la cámara. El tamaño se establece en 800x600 píxeles, y el formato se establece en ``XRGB8888``. .. code-block:: python try: # Configurar tamaño y formato de vista previa preview_config.size = (800, 600) preview_config.format = 'XRGB8888' #. Inicia la vista previa de la cámara en modo QTGL, un modo de vista previa gráfica. .. code-block:: python try: ... # Iniciar la vista previa de la cámara en modo QTGL camera.start_preview(Preview.QTGL) ... #. Define la configuración del video con un tamaño de cuadro de 800x600 píxeles y una velocidad de fotogramas de 40 cuadros por segundo. .. code-block:: python try: ... # Definir configuración de video con tamaño, velocidad de fotogramas y recuento de búfer conf = {'size': (800, 600)} controls = {'FrameRate': 40} config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12) ... #. Crea un codificador de video con una tasa de bits especificada de 10 Mbps, usando el formato de codificación H.264. Configura la ruta del archivo de salida para el video, guardándolo como ``my_video.mp4`` en el directorio home del usuario. .. code-block:: python try: ... # Crear un codificador de video con una tasa de bits especificada encoder = H264Encoder(bitrate=10000000) # Definir el archivo de salida para el video output = FfmpegOutput(f'{user_home}/my_video.mp4') ... #. Configura la cámara con los ajustes de video definidos, inicia la grabación usando el codificador y el archivo de salida especificados, graba durante 10 segundos y luego detiene la grabación. .. code-block:: python try: ... # Configurar e iniciar la grabación camera.configure(config) camera.start_recording(encoder, output) # Grabar durante 10 segundos time.sleep(10) # Detener la grabación camera.stop_recording() #. Este bloque de código maneja una interrupción de teclado (como Ctrl+C) deteniendo la vista previa de la cámara. La declaración ``pass`` se usa para manejar la excepción sin hacer nada más. .. code-block:: python except KeyboardInterrupt: # Detener la vista previa de la cámara si ocurre una interrupción de teclado (e.g., Ctrl+C) camera.stop_preview() pass