FFMPEG: silencia o reactiva el audio de la transmisión entrante mientras se ejecuta ffmpeg

FFMPEG: silencia o reactiva el audio de la transmisión entrante mientras se ejecuta ffmpeg

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 sendcmdo zmq.

Esto es lo que tengo para .batiniciar 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.zipla 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@myutiliza "nombre interactivo" para el filtro de volumen.
  • azmqes necesario para permitir comandos interactivos para el filtro de audio que viene después azmq(comandos interactivos para el volumefiltro).

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 pingcomando 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...

información relacionada