User Tools

Site Tools


fotografia:camaras:streaming:obs

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
fotografia:camaras:streaming:obs [2024/11/09 22:12] – created josefotografia:camaras:streaming:obs [2025/06/27 06:24] (current) jose
Line 1: Line 1:
 ====== OBS ====== ====== OBS ======
-Texto dinámico +Texto dinámico que lo coge de un fichero de texto \\
 https://www.youtube.com/watch?v=78CcCbUYwgg https://www.youtube.com/watch?v=78CcCbUYwgg
 +
 +Rótulo con animación. Hacer un grupo con texto y caja, botón derecho y "Show transaction" y "hide transaction" y se puede hacer que aparezca de derecha a izquierda\\
 +https://www.youtube.com/watch?v=1KhTqnv1SWE
 +
 +====== Configurar tecla con voz ======
 +<code>
 +import pyaudio
 +from vosk import Model, KaldiRecognizer
 +import json
 +import subprocess
 +from gtts import gTTS
 +import os
 +
 +# Cargar el modelo de Vosk
 +model = Model("vosk-model-es-0.42")
 +recognizer = KaldiRecognizer(model, 16000)
 +
 +p = pyaudio.PyAudio()
 +
 +# Configurar PyAudio para usar PulseAudio (índice 15)
 +stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000, input_device_index=15)
 +stream.start_stream()
 +
 +print("Esperando el comando de voz 'abracadabra rótulo uno'...")
 +
 +while True:
 +    data = stream.read(4000, exception_on_overflow=False)
 +    if recognizer.AcceptWaveform(data):
 +        result = recognizer.Result()
 +        result_json = json.loads(result)  # Convertir a JSON para extraer el texto
 +        text = result_json.get("text", "" # Obtener el texto reconocido
 +        
 +        # Imprimir el texto detectado
 +        print(f"Texto detectado: {text}")
 +
 +        # Comparar el texto detectado con el comando esperado
 +        if "abracadabra rótulo uno" in text.lower():
 +            print("Comando detectado: Lanzando teclas 'ctrl + super + 1'")
 +            # Activar la ventana de OBS
 +            subprocess.run(["xdotool", "search", "--name", "^OBS.*Profile: Youtube Jose", "windowactivate"])
 +            # Usa xdotool para simular la pulsación de teclas
 +            subprocess.run(["xdotool", "key", "ctrl+super+1"])
 +
 +            # Generar y reproducir el mensaje de audio en los auriculares Bluetooth
 +            tts = gTTS("rótulo uno ok", lang='es')
 +            tts.save("mensaje.mp3")
 +            # Reproducir el archivo de audio con mpv
 +            subprocess.run(["mpv", "--audio-device=pipewire", "mensaje.mp3"])
 +#            subprocess.run(["mpv", "--audio-device=pipewire/bluez_output.6F_32_EA_6B_C2_86.1", "mensaje.mp3"])
 +            os.remove("mensaje.mp3" # Elimina el archivo después de reproducirlo
 +
 +</code>
 +
 +====== Configurar cámara SRT ======
 +Para añadir una cámara por SRT tenemos que añadir "Media Source"
 +
 +Desmarcar "Restart playback when source becomes active" porque si no se para la transmisión SRT
 +
 +{{:fotografia:camaras:streaming:osb_01.png?600|}}
 +
 +{{:fotografia:camaras:streaming:osb_02.png?300|}}
 +
 +{{:fotografia:camaras:streaming:osb_03.png?600|}}
 +
 +
 +Con linux en la version 30 por temas de buffer se corta cada 5 segundos. He actualizado a la 31 y sin problema. Pero por si acaso esta es la solución:\\
 +Ponemos un servidor proxy con ffmpeg en medio que haga de proxy a UDP:
 +  fmpeg -fflags nobuffer -i "srt://192.168.2.11:4201" -f mpegts udp://127.0.0.1:5001
 +Y configuramos OBS con:
 +  udp://127.0.0.1:5001
 +====== Configuración OBS instagram ======
 +Configuración en vertical 1280x720
 +
 +====== Texto con Curva ======
 +Creamos el siguente fichero html:
 +
 +<code>
 +<svg width="500" height="200">
 +  <defs>
 +    <path id="curve" d="M 50 150 Q 250 100 450 150" />
 +  </defs>
 +  <text width="500">
 +    <textPath href="#curve" startOffset="50%" text-anchor="middle" font-size="32" fill="white">
 +      Colla Castellera de Madrid
 +    </textPath>
 +  </text>
 +</svg>
 +</code>
 +
 +Añadimos el fichero como Source/Browser
 +
 +====== Instalación Plugin ======
 +Plugin para programar cambios de sources con tiempo:
 +  flatpak install com.obsproject.Studio.Plugin.SceneSwitcher
 +  
 +====== Grabar todas las cámaras y emitir para poder hacer repetición ======
 +Para poder grabar todas las cámaras se puede instalar el plugin "Source Record". Con Linux y flaypak no he sido capaz.
 +
 +Otra forma que creo que es mas egiciente es con el proxy con ffmprg.
 +
 +Lanzamos el proxy con ffmpeg con comando reuse para poder conectar OBS y grabar para las 3 cámaras:
 +  ffmpeg -fflags nobuffer -i "srt://192.168.2.11:4201" -f mpegts udp://127.0.0.1:5001
 +  ffmpeg -fflags nobuffer -i "srt://192.168.2.12:4201" -f mpegts udp://127.0.0.1:5002
 +  ffmpeg -fflags nobuffer -i "srt://192.168.2.13:4201" -f mpegts udp://127.0.0.1:5003
 +
 +Grabamos cada cámara en un fichero:
 +  ffmpeg -i "udp://127.0.0.1:5001?reuse=1" -c copy CAM_1.mkv
 +Y configuramos OBS para cada cámara
 +  udp://127.0.0.1:5001?reuse=1
 +
 +Ahora podemos añadir un "Source Media" de vídeo normal y añadir los vídeos CAM_1.mkv, CAM_2.mkv y CAM_3.mkv para ver la repetición
 +
 +También podemos hacer la grabación cada 10 minutos para que haga vídeos mas pequeños:
 +  ffmpeg -i udp://127.0.0.1:5001 -c copy -f segment -segment_time 600 -reset_timestamps 1 cam1_%03d.mkv
 +
 +Otra opción es grabar 1 fichero grande y luego sacar uno pequeño con el cmoando:
 +Con duración
 +  ffmpeg -ss INICIO -i CAM_1.mkv -t DURACION -c copy CAM_1_001.mkv
 +O con tiempo:
 +  ffmpeg -ss INICIO -to DURACION -i CAM_1.mkv -c copy CAM_1_001.mkv
 +
 +
fotografia/camaras/streaming/obs.1731190345.txt.gz · Last modified: by jose