Tengo el siguiente problema:
Quiero poder silenciar y reactivar el audio de una transmisión ffmpeg mientras se ejecuta ffmpeg. Estuve buscando por un tiempo y me preguntaba cómo lo harías. Leí mucho en Internet pero no encontré el problema que buscaba.
Ahora solo sé que puedes hacerlo con los filtros sendcmd o zmq, pero la API de ffmpeg para esto no me ayuda a avanzar.
¿Alguien puede explicarme cómo hacerlo? Si entiendo correctamente, debe insertar los parámetros del filtro en el programa en ejecución a través de filtros sendcmd
o zmq
.
Esto es lo que tengo para .bat
iniciar ffmpeg:
start cmd /K ffmpeg -i "rtsp://[IPADRESS]" -b:v 6000K -minrate 6000K -maxrate 6000K -vcodec copy -acodec copy -f flv rtmp://[IPADRESS]
Respuesta1
Para silenciar y reactivar el audio de forma interactiva, puede utilizarazmqfiltrar convolumenfiltrar.
Para usar comandos interactivos, necesitamos una herramienta llamada zmqsend
.
Puede descargar ffmpeg-tools.zip
la versión de Windows desdeaquí. (Para realizar pruebas, extraje las herramientas para que estén en la misma carpeta que ffmpeg.exe).
Agregue el siguiente filtro de audio: -af "azmq,volume@my=volume=1"
a su comando FFmpeg.
volume@my
utiliza "nombre interactivo" para el filtro de volumen.azmq
es necesario para permitir comandos interactivos para el filtro de audio que viene despuésazmq
(comandos interactivos para elvolume
filtro).
Aquí hay un archivo por lotes que ejecuta FFplay y escucha la transmisión FFmpeg RTMP:
start ffplay -listen 1 -timeout 10000 -f flv rtmp://127.0.0.1:5000/mystream/test
ping 127.0.0.1 -n 6 > nul
start ffmpeg -y -re -f lavfi -i testsrc=duration=25000:size=192x108:rate=25 -f lavfi -i sine=frequency=500 -af "azmq,volume@my=volume=1" -vcodec libx264 -tune zerolatency -crf 17 -pix_fmt yuv420p -f flv rtmp://127.0.0.1:5000/mystream/test
Los comandos anteriores transmiten audio y vídeo sintéticos (para pruebas).
El ping
comando se usa para esperar unos segundos antes de iniciar FFmpeg.
Puede colocar el archivo por lotes en la misma carpeta que ffmpeg.exe y zmqsend.exe.
Ejecute el archivo por lotes...
Para silenciar el audio, ejecute (desde la consola):
echo volume@my volume 0 | zmqsend
Para reactivar el audio, ejecute:
echo volume@my volume 1 | zmqsend
Puede haber otros métodos, pero el tema de los comandos interactivos no está bien documentado...