Herramientas Informaticas

Etiqueta: Python

🎥📥 ¡Descarga Fácil y Rápido tus Videos y Audios de YouTube! 🎶💻

Entrada fija

🎥📥 ¡Descarga Fácil y Rápido tus Videos y Audios de YouTube! 🎶💻

¿Quieres tener tus videos favoritos de YouTube disponibles siempre, sin conexión? ¿O tal vez solo quieres guardar el audio para tus playlists? ¡Esta app es justo lo que necesitas! 🚀✨


🔥 ¿Qué es este programa?

Una herramienta GRATIS, sencilla y potente para descargar videos o solo audios de YouTube con la mejor calidad disponible. Perfecta para Windows y fácil de usar, sin complicaciones. 🎉


🚀 Características que amarás

  • 🎬 Descarga videos en alta definición
  • 🎵 Extrae solo el audio (MP3) para tus canciones favoritas
  • 🖥️ Interfaz moderna y amigable con estilo retro de terminal
  • 📂 Selecciona fácilmente dónde guardar tus archivos
  • Barra de progreso clara para que veas cómo avanza la descarga
  • 🔗 Valida URLs para evitar errores y frustraciones
  • 🔄 Descarga en segundo plano, sin congelar la app
  • 📁 Botón para abrir la carpeta de descarga inmediatamente

💡 ¿Por qué elegir este programa?

  • 🎉 100% Gratis y sin anuncios molestos
  • 🔒 Privacidad total — No se envía ningún dato externo
  • Ligero y rápido — Funciona bien en cualquier PC moderna
  • 🐍 Basado en Python, código limpio y abierto (si quieres explorar)
  • 💻 Compatible con Windows 7 y superiores sin instalaciones complicadas

🛠️ ¿Cómo usarlo? ¡Súper fácil!

  1. ✂️ Copia y pega la URL del video de YouTube
  2. 🔘 Elige entre descargar el video o solo el audio
  3. 📂 Selecciona la carpeta donde quieres guardar tu archivo
  4. ▶️ Haz clic en “Descargar” y mira la barra de progreso
  5. 📁 Al terminar, abre tu carpeta con un solo clic

📥 Descarga ahora

(Próximamente versión Android y más)


🖥️ Requisitos mínimos

  • Windows 7 o superior
  • Internet para descargar los videos
  • Espacio en disco suficiente para guardar tus archivos
  • No necesita instalación, solo ejecuta el archivo

📞 Soporte y contacto

¿Dudas o sugerencias? Escríbeme:
🌐 Visita mi blog: Shalom Now


⚠️ Nota importante

Esta herramienta es para uso personal y educativo. ¡Respeta los derechos de autor y las políticas de YouTube! 🙏


🎉 ¡Empieza a guardar y disfrutar tus videos favoritos OFFLINE hoy mismo! 🎉

🤖 Descargador de YouTube 2.0: Guía Definitiva de tu App Ciberpunk 💻

Entrada fija

🤖 Descargador de YouTube 2.0: Guía Definitiva de tu App Ciberpunk 💻

¡Hola! Has creado una aplicación increíblemente sofisticada. Con la incorporación de hilos, una barra de progreso y una interfaz de usuario con un estilo de terminal retro, este proyecto merece una publicación completa y visualmente atractiva.

A continuación, te presento el manual completo, en formato Markdown, que incluye tu código exacto y una explicación exhaustiva de cada una de sus nuevas características, desde la instalación hasta su uso.


Requisitos Esenciales 🛠️

  • Un sistema operativo Linux (la guía se basa en distribuciones como Ubuntu/Debian).
  • Una terminal.
  • El archivo cc_icon.png en el mismo directorio de tu script, si quieres que la aplicación muestre el ícono.

Paso 1: Preparando tu Entorno Python 🐍

Si ya tienes Python y pip instalados, puedes saltarte este paso. Si no, sigue estas instrucciones para prepararte.

Actualización del Sistema

Siempre es una buena práctica comenzar con una actualización de tus paquetes.

sudo apt-get update
sudo apt-get upgrade

Instalación de Python y pip

Estos comandos instalarán tanto el intérprete de Python como su gestor de paquetes.

sudo apt-get install python3
sudo apt-get install python3-pip

Para verificar que todo está en orden, ejecuta estos comandos y asegúrate de que se muestre un número de versión.

python3 --version
pip3 --version

Paso 2: Configuración e Instalación de Librerías 📦

Ahora que tu entorno base está listo, es vital usar un entorno virtual (venv) para aislar tu proyecto y mantenerlo ordenado.

Creando y Activando el Entorno Virtual

Crea una carpeta para tu proyecto, navega a ella y activa el entorno virtual.

mkdir descargador_yt_ciberpunk
cd descargador_yt_ciberpunk
python3 -m venv venv
source venv/bin/activate

Instalando las Bibliotecas Adicionales

Tu aplicación usa varias bibliotecas que no vienen por defecto. Con el entorno virtual activo, instala todas las dependencias con un solo comando.

pip install pytubefix

pytubefix es la biblioteca principal para la descarga. Los otros módulos que utilizas, como tkinter, ttk, threading y os, son parte de la librería estándar de Python y no necesitan instalación adicional.


Paso 3: ¡El Código Completo! Tu App Ciberpunk en Acción 💻

A continuación, se presenta el código completo. Es una obra de ingeniería que combina lógica robusta con una interfaz de usuario avanzada. Copia y pega el código exactamente como está en un archivo llamado descargador.py.

import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
from pytubefix.exceptions import RegexMatchError
import threading
import re
import os
import webbrowser --- Lógica de la Aplicación --- def es_url_youtube(url):
"""Valida si la cadena proporcionada es una URL de YouTube."""
patron = r"^(https?://)?(www.)?(youtube.com|youtu.be)/.+$"
return re.match(patron, url) is not None def progreso_descarga(stream, chunk, bytes_remaining):
"""Función para actualizar la barra de progreso."""
total_size = stream.filesize
bytes_descargados = total_size - bytes_remaining
porcentaje = (bytes_descargados / total_size) * 100
barra_progreso['value'] = porcentaje
ventana.update_idletasks() def descarga_completada(stream, file_path):
"""Función que se llama cuando la descarga se completa."""
estado.set("¡Descarga completada!")
messagebox.showinfo("Éxito", f"Descarga completada en: {file_path}")
boton_descargar.config(state=tk.NORMAL)
boton_abrir_carpeta.config(state=tk.NORMAL)
ruta_descarga_final = os.path.dirname(file_path)
boton_abrir_carpeta.config(command=lambda: os.startfile(ruta_descarga_final) if os.name == 'nt' else os.system(f'open "{ruta_descarga_final}"') if os.name == 'darwin' else os.system(f'xdg-open "{ruta_descarga_final}"'))
barra_progreso['value'] = 0 def descargar_video():
url = entrada_url.get()
carpeta = ruta_descarga.get()
descargar_audio_solo = opcion_descarga.get() == "audio" if not url: messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.") return if not es_url_youtube(url): estado.set("URL inválida.") messagebox.showerror("Error", "La URL ingresada no es una URL válida de YouTube.") return try: boton_descargar.config(state=tk.DISABLED) boton_abrir_carpeta.config(state=tk.DISABLED) estado.set("Validando URL...") yt = YouTube(url, on_progress_callback=progreso_descarga, on_complete_callback=descarga_completada) estado.set(f"Descargando: {yt.title} ({'Audio' if descargar_audio_solo else 'Video'})") if descargar_audio_solo: audio = yt.streams.filter(only_audio=True).order_by('abr').desc().first() if audio: audio.download(output_path=carpeta, filename=f"{yt.title}.mp3") else: raise Exception("No se encontraron streams de audio disponibles.") else: video = yt.streams.get_highest_resolution() if video: video.download(output_path=carpeta) else: raise Exception("No se encontraron streams de video de alta resolución disponibles.") except RegexMatchError: estado.set("Error: URL de YouTube no válida.") messagebox.showerror("Error", "La URL proporcionada no parece ser una URL válida de YouTube.") boton_descargar.config(state=tk.NORMAL) boton_abrir_carpeta.config(state=tk.DISABLED) barra_progreso['value'] = 0 except Exception as e: estado.set(f"Error en la descarga: {e}") messagebox.showerror("Error", str(e)) boton_descargar.config(state=tk.NORMAL) boton_abrir_carpeta.config(state=tk.DISABLED) barra_progreso['value'] = 0 def elegir_carpeta():
carpeta = filedialog.askdirectory()
if carpeta:
ruta_descarga.set(carpeta) def iniciar_descarga():
hilo = threading.Thread(target=descargar_video)
hilo.start() def abrir_enlace_acerca_de():
webbrowser.open_new_tab("https://shalom-now.blogspot.com/") --- Lógica de la Animación de Escritura --- palabras_animacion = ["FAST", "EASY", "FREE", "MP3"]
palabra_idx = 0
letra_idx = 0
cursor_visible = True def animar_escritura():
global palabra_idx, letra_idx
palabra_actual = palabras_animacion[palabra_idx] if letra_idx < len(palabra_actual): texto_dinamico.set(palabra_actual[:letra_idx + 1]) letra_idx += 1 ventana.after(150, animar_escritura) else: ventana.after(1500, animar_borrado) def animar_borrado():
global palabra_idx, letra_idx
if letra_idx > 0:
texto_dinamico.set(palabras_animacion[palabra_idx][:letra_idx - 1])
letra_idx -= 1
ventana.after(100, animar_borrado)
else:
palabra_idx = (palabra_idx + 1) % len(palabras_animacion)
ventana.after(500, animar_escritura) def animar_cursor():
global cursor_visible
if cursor_visible:
etiqueta_cursor.config(text="")
else:
etiqueta_cursor.config(text="|")
cursor_visible = not cursor_visible
ventana.after(500, animar_cursor) --- Configuración de la Interfaz Gráfica --- ventana = tk.Tk()
ventana.title("Descargador de YouTube")
ventana.geometry("800x600")
ventana.resizable(True, True)
ventana.configure(bg="#000000") Cargar icono de Creative Commons try:
icono_cc_img = tk.PhotoImage(file="cc_icon.png")
ventana.iconphoto(True, icono_cc_img)
except tk.TclError:
pass Variables de Tkinter (movidas después de crear la ventana) ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL…")
opcion_descarga = tk.StringVar(value="video")
texto_dinamico = tk.StringVar(value="") Estilo estilo = ttk.Style()
estilo.theme_use("clam") estilo.configure("TLabel", font=("Courier", 11), background="#000000", foreground="#00ff00")
estilo.configure("TEntry", font=("Courier", 11), fieldbackground="#0d0d0d", foreground="#00ff00", borderwidth=1, relief="solid")
estilo.configure("TButton", font=("Courier", 11), padding=6, borderwidth=1, relief="solid", background="#00ff00", foreground="#000000")
estilo.map("TButton", background=[('active', '#009900')]) Estilo para la barra de progreso estilo.configure("Custom.Horizontal.TProgressbar", thickness=25, troughcolor="#0d0d0d", background="#00ff00") estilo.configure("TRadiobutton", font=("Courier", 10), background="#000000", foreground="#00ff00")
estilo.configure("TLabelframe", background="#000000", borderwidth=1, relief="solid")
estilo.configure("TLabelframe.Label", font=("Courier", 11), background="#000000", foreground="#00ff00")
estilo.configure("Header.TLabel", font=("Courier", 24, "bold"), background="#000000", foreground="#00ff00") Widgets usando grid layout frame_header = tk.Frame(ventana, bg="#000000")
frame_header.grid(row=0, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew")
frame_header.columnconfigure(0, weight=1) etiqueta_estatica = tk.Label(frame_header, text="DESCARGADOR YT ", font=("Courier", 12), bg="#000000", fg="#00ff00", justify="right")
etiqueta_estatica.pack(side=tk.LEFT)
etiqueta_dinamica = tk.Label(frame_header, textvariable=texto_dinamico, font=("Courier", 12), bg="#000000", fg="#00ff00")
etiqueta_dinamica.pack(side=tk.LEFT)
etiqueta_cursor = tk.Label(frame_header, text="|", font=("Courier", 12), bg="#000000", fg="#00ff00")
etiqueta_cursor.pack(side=tk.LEFT) animar_escritura()
animar_cursor() ttk.Label(ventana, text="URL del video de YouTube:").grid(row=1, column=0, padx=20, pady=(10, 5), sticky="w")
entrada_url = ttk.Entry(ventana)
entrada_url.grid(row=1, column=1, columnspan=2, padx=20, pady=(10, 5), sticky="ew") frame_opciones = ttk.LabelFrame(ventana, text="Opciones de Descarga")
frame_opciones.grid(row=2, column=0, columnspan=3, padx=20, pady=10, sticky="ew")
frame_opciones.columnconfigure(0, weight=1) radio_video = ttk.Radiobutton(frame_opciones, text="Video (Máxima Calidad)", variable=opcion_descarga, value="video")
radio_video.grid(row=0, column=0, padx=20, pady=5, sticky="w") radio_audio = ttk.Radiobutton(frame_opciones, text="Solo Audio (Máxima Calidad)", variable=opcion_descarga, value="audio")
radio_audio.grid(row=1, column=0, padx=20, pady=5, sticky="w") ttk.Label(ventana, text="Carpeta de Descarga:").grid(row=3, column=0, padx=20, pady=(10, 5), sticky="w")
entrada_carpeta = ttk.Entry(ventana, textvariable=ruta_descarga, state="readonly")
entrada_carpeta.grid(row=3, column=1, padx=20, pady=(10, 5), sticky="ew")
boton_elegir_carpeta = ttk.Button(ventana, text="Elegir…", command=elegir_carpeta)
boton_elegir_carpeta.grid(row=3, column=2, padx=(0, 20), pady=(10, 5), sticky="w") boton_descargar = ttk.Button(ventana, text="Descargar", command=iniciar_descarga)
boton_descargar.grid(row=4, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew") barra_progreso = ttk.Progressbar(ventana, orient=tk.HORIZONTAL, mode='determinate', style="Custom.Horizontal.TProgressbar")
barra_progreso.grid(row=5, column=0, columnspan=3, padx=20, pady=10, sticky="ew") ttk.Label(ventana, textvariable=estado, foreground="#ff00ff").grid(row=6, column=0, columnspan=3, padx=20, pady=5, sticky="w") boton_abrir_carpeta = ttk.Button(ventana, text="Abrir Carpeta", state=tk.DISABLED)
boton_abrir_carpeta.grid(row=7, column=0, columnspan=3, padx=20, pady=(10, 20), sticky="ew") frame_acerca_de = ttk.LabelFrame(ventana, text="Acerca de")
frame_acerca_de.grid(row=8, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="ew") etiqueta_acerca_de = ttk.Label(frame_acerca_de, text="Este programa permite descargar videos o solo el audio de videos de YouTube. La descarga se realizará siempre con la máxima calidad disponible para la opción seleccionada.")
etiqueta_acerca_de.grid(row=0, column=0, padx=10, pady=5, sticky="w") enlace_acerca_de = ttk.Label(frame_acerca_de, text="Más información", cursor="hand2", foreground="#00ff00")
enlace_acerca_de.grid(row=1, column=0, padx=10, pady=5, sticky="w")
enlace_acerca_de.bind("", lambda e: abrir_enlace_acerca_de()) ventana.columnconfigure(1, weight=1)
frame_opciones.columnconfigure(0, weight=1)
frame_acerca_de.columnconfigure(0, weight=1) ventana.mainloop()

📦 Cómo convertir tu script de Python en un archivo EXE con interfaz gráfica

Entrada fija

Ya creaste tu aplicación para descargar videos de YouTube con una interfaz bonita y arte ASCII. Ahora te gustaría compartirla con otros sin que tengan que instalar Python, ¿cierto? Aquí te enseño cómo convertir tu script en un archivo ejecutable .exe de un solo archivo, listo para usar en Windows.


🧰 Requisitos previos

Debes tener instalado:

  • Python 3.10 o 3.11 (recomendado)
  • pip funcionando
  • El script principal, por ejemplo: descargador_youtube.py

🔧 Paso 1: Instalar pyinstaller

Abre una terminal (CMD o PowerShell) y ejecuta:


pip install pyinstaller

📦 Paso 2: Crear el archivo EXE de un solo archivo

Usa el siguiente comando para generar un ejecutable compacto:


pyinstaller --onefile --noconsole descargador_youtube.py

Opciones importantes:

  • --onefile: empaqueta todo en un solo archivo .exe
  • --noconsole: oculta la ventana de consola al abrir (ideal para apps con interfaz gráfica)

📂 Paso 3: Buscar el archivo generado

Después de ejecutar el comando, se generarán carpetas como dist y build. Tu ejecutable estará en la carpeta dist:


/dist/descargador_youtube.exe

¡Ese es el archivo que puedes compartir con otros usuarios de Windows! No necesitan instalar Python ni dependencias.


🧪 Paso 4: Probar el EXE

Haz doble clic en el archivo descargador_youtube.exe. Si todo salió bien, verás tu interfaz gráfica funcionando con arte ASCII incluido. Puedes elegir la carpeta, pegar una URL de YouTube y descargar.


🐞 ¿Problemas comunes?

  • 🔁 Si el video no descarga, asegúrate de estar usando pytubefix y no pytube.
  • 🖼 Si ves un error con tkinter, asegúrate de que tu Python lo incluya (instalación completa desde python.org).
  • 🛠 ¿No funciona en otra PC? Usa la opción --add-data si tienes archivos externos o logos.

💡 Bonus: crear un icono personalizado

Si tienes un ícono (.ico), puedes usarlo así:


pyinstaller --onefile --noconsole --icon=icono.ico descargador_youtube.py

📤 Compartir tu app

Ahora puedes subir el .exe a Google Drive, Dropbox o empaquetarlo en un archivo ZIP para compartir fácilmente.


🚀 ¿Quieres más?

  • Convertir a ejecutable en Linux o macOS
  • Versión con barra de progreso
  • Soporte para listas de reproducción

Déjamelo saber en los comentarios 👇

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

Entrada fija

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

¿Quieres tu propia app para descargar videos de YouTube de forma sencilla? Aquí te explico cómo hacerlo con Python, usando una interfaz gráfica moderna y arte ASCII decorativo. Usaremos pytubefix para evitar errores comunes como el 400 Bad Request.


✅ Paso 1: Instala las dependencias

Abre la terminal y escribe:


pip install pytubefix

🧱 Paso 2: Código completo del programa

Crea un archivo llamado descargador_youtube.py y copia el siguiente contenido:


import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
import threading

def descargar_video():
    url = entrada_url.get()
    carpeta = ruta_descarga.get()

    if not url:
        messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.")
        return

    try:
        boton_descargar.config(state=tk.DISABLED)
        estado.set("Descargando video...")

        yt = YouTube(url)
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()

        if not video:
            raise Exception("No se encontró un stream compatible.")

        video.download(output_path=carpeta)
        estado.set("¡Descarga completada!")
        messagebox.showinfo("Éxito", f"Video descargado: {yt.title}")
    except Exception as e:
        estado.set("Error en la descarga.")
        messagebox.showerror("Error", str(e))
    finally:
        boton_descargar.config(state=tk.NORMAL)

def elegir_carpeta():
    carpeta = filedialog.askdirectory()
    if carpeta:
        ruta_descarga.set(carpeta)

def iniciar_descarga():
    hilo = threading.Thread(target=descargar_video)
    hilo.start()

# Crear ventana
ventana = tk.Tk()
ventana.title("Descargador de YouTube")
ventana.geometry("600x460")
ventana.resizable(False, False)
ventana.configure(bg="#ffffff")

# Variables
ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL...")

# Arte ASCII decorativo
ascii_art = r"""
 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 
"""
etiqueta_ascii = tk.Label(
    ventana,
    text=ascii_art,
    font=("Courier", 10),
    bg="#ffffff",
    fg="#cc0000",
    justify="left"
)
etiqueta_ascii.pack(pady=(5, 0))

# Estilo
estilo = ttk.Style()
estilo.theme_use("clam")
estilo.configure("TButton", font=("Segoe UI", 10), padding=6)
estilo.configure("TLabel", font=("Segoe UI", 10), background="#ffffff")
estilo.configure("TEntry", font=("Segoe UI", 10))

# Widgets
ttk.Label(ventana, text="URL del video de YouTube:").pack(pady=10)
entrada_url = ttk.Entry(ventana, width=60)
entrada_url.pack(pady=5)

frame_carpeta = ttk.Frame(ventana)
frame_carpeta.pack(pady=10)

ttk.Entry(frame_carpeta, textvariable=ruta_descarga, width=45).pack(side=tk.LEFT, padx=(0, 10))
ttk.Button(frame_carpeta, text="Elegir carpeta", command=elegir_carpeta).pack(side=tk.LEFT)

boton_descargar = ttk.Button(ventana, text="Descargar Video", command=iniciar_descarga)
boton_descargar.pack(pady=15)

ttk.Label(ventana, textvariable=estado, foreground="blue").pack(pady=5)

ventana.mainloop()

🧪 Paso 3: Ejecuta tu aplicación


python descargador_youtube.py

🎨 Resultado del arte ASCII


 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 

💡 Siguientes pasos sugeridos

  • Agregar barra de progreso visual
  • Soporte para listas de reproducción
  • Conversión a MP3 automática

¿Te gustaría que publique otra guía con alguna de estas mejoras? ¡Déjame un comentario! 🚀

🎥 Detección de Personas en Video y Grabación Automática Usando Python y OpenCV

Entrada fija

En este artículo explicaremos cómo crear un sistema de detección de personas que grabe automáticamente la pantalla solo cuando se detecta presencia humana. Este proyecto es útil si usas cámaras IP o software como V380 y deseas una forma eficiente de grabar únicamente cuando hay movimiento humano en una región específica del escritorio.


✅ ¿Qué hace este script?

  • Captura un área definida de la pantalla (donde aparece el video de la cámara).
  • Usa un modelo de inteligencia artificial para detectar personas.
  • Comienza a grabar cuando detecta presencia humana.
  • Detiene la grabación si no se ve nadie por un período definido.
  • Guarda los videos automáticamente con marcas de tiempo.

🧠 Tecnologías y librerías usadas

  • OpenCV: procesamiento de imágenes y video.
  • mss: captura rápida de pantalla.
  • NumPy: procesamiento eficiente de matrices.
  • datetime y time: control de tiempo.
  • Modelo Caffe SSD preentrenado: para detección de rostros/personas.

📦 Requisitos

Asegúrate de tener Python 3.8+ (funciona en 3.12) y las siguientes librerías instaladas:

pip install opencv-python numpy mss

También necesitas dos archivos de modelo descargados:

  • deploy.prototxt
  • res10_300x300_ssd_iter_140000.caffemodel

Se pueden obtener desde los repositorios oficiales de OpenCV o desde:

wget https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt .

wget https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000_fp16.caffemodel -O res10_300x300.caffemodel

🧾 El código completo

import cv2
import numpy as np
import time
from mss import mss
from datetime import datetime

# === Configuraciones ===
monitor = {"top": 100, "left": 100, "width": 640, "height": 480}

prototxt = "deploy.prototxt"
model = "res10_300x300_ssd_iter_140000.caffemodel"
NO_PERSON_TIMEOUT = 5

net = cv2.dnn.readNetFromCaffe(prototxt, model)
sct = mss()
recording = False
video_writer = None
last_person_time = 0

def detect_person(frame):
    blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0,
                                 (300, 300), (104.0, 177.0, 123.0))
    net.setInput(blob)
    detections = net.forward()

    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.6:
            return True
    return False

def start_recording(filename, frame_size, fps=20):
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    return cv2.VideoWriter(filename, fourcc, fps, frame_size)

print("🔍 Monitoreando... Presiona ESC para salir.")

while True:
    frame = np.array(sct.grab(monitor))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)

    person_detected = detect_person(frame)
    current_time = time.time()

    if person_detected:
        last_person_time = current_time
        if not recording:
            filename = datetime.now().strftime("grabacion_%Y%m%d_%H%M%S.mp4")
            video_writer = start_recording(filename, (monitor["width"], monitor["height"]))
            print(f"🟢 Persona detectada – grabando en: {filename}")
            recording = True
    else:
        if recording and (current_time - last_person_time > NO_PERSON_TIMEOUT):
            print("🔴 No hay persona – deteniendo grabación.")
            recording = False
            video_writer.release()
            video_writer = None

    if recording and video_writer is not None:
        video_writer.write(frame)

    cv2.imshow("Vista", frame)
    if cv2.waitKey(1) == 27:  # ESC
        break

# Limpieza
if video_writer:
    video_writer.release()
cv2.destroyAllWindows()

🛠️ Cómo ajustar a tu uso

  • Cambia las coordenadas de monitor según dónde esté la imagen de la cámara en tu pantalla.
  • Puedes modificar el umbral de confianza (confidence > 0.6) si detecta demasiado o poco.
  • Cambia el tiempo NO_PERSON_TIMEOUT si quieres que espere más o menos antes de cortar la grabación.

📂 Salidas

  • Videos guardados en la misma carpeta, con nombre grabacion_YYYYMMDD_HHMMSS.mp4.
  • No graba sonido (ideal para privacidad o rendimiento).

🖥️ Requisitos mínimos de hardware

  • CPU moderna (Intel i5 o Ryzen 5 en adelante recomendado).
  • RAM: 4 GB mínimo (8+ recomendado).
  • Sistema operativo: Linux o Windows.
  • Sin GPU necesaria, ya que el modelo es liviano.

Como recortar silencios incómodos automáticamente en los videos en Windows 10

Dentro del software libre tenemos muchas herramientas que nos permiten realizar nuestro trabajo y en este caso que es la edición de video hay una herramienta hecha en Python que nos permite quitar los silencios en un video, es decir, quitar esas regiones del video en las que no hablamos.

Bien para ello necesitaremos descargar el software jumpcutter que la pueden descargar desde Github, https://github.com/carykh/jumpcutter

Primero necesitaremos tener instalado Python en nuestro Windows 10 para ello solo entramos al CMD y escribimos Python nos mandara a la tienda de Windows y allí solo le damos obtener

Creado con WordPress & Tema de Anders Norén