FFMPEG - отключение или включение звука из входящего потока во время работы ffmpeg

FFMPEG - отключение или включение звука из входящего потока во время работы ffmpeg

У меня возникла следующая проблема:

Я хочу иметь возможность отключать и включать звук из потока ffmpeg во время работы ffmpeg. Я искал некоторое время и задавался вопросом, как это сделать. Я много читал в интернете, но не нашел проблему, которую искал.

Теперь я знаю только, что это можно сделать с помощью фильтров sendcmd или zmq, но API ffmpeg для этого не дает мне никаких результатов.

Кто-нибудь может объяснить, как это сделать? Если я правильно понял, то нужно вставить параметры фильтра в работающую программу через sendcmdили zmqфильтры.

Вот что у меня есть .batдля запуска ffmpeg:

start cmd /K ffmpeg -i "rtsp://[IPADRESS]" -b:v 6000K -minrate 6000K -maxrate 6000K -vcodec copy -acodec copy -f flv rtmp://[IPADRESS]

решение1

Для интерактивного отключения и включения звука вы можете использоватьазмкфильтр собъемфильтр.

Для использования интерактивных команд нам понадобится инструмент под названием zmqsend.
Вы можете загрузить ffmpeg-tools.zipверсию для Windows с сайтаздесь. (Для тестирования я извлек инструменты в ту же папку, что и ffmpeg.exe).


Добавьте следующий аудиофильтр: -af "azmq,volume@my=volume=1"к вашей команде FFmpeg.

  • volume@myиспользует «интерактивное имя» для фильтра громкости.
  • azmqтребуется для разрешения интерактивных команд для аудиофильтра, который идет после azmq(интерактивные команды для volumeфильтра).

Вот пакетный файл, который запускает FFplay и прослушивает поток 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

Приведенные выше команды транслируют синтетический звук и видео (для тестирования).

Команда pingиспользуется для ожидания нескольких секунд перед запуском FFmpeg.
Вы можете поместить пакетный файл в ту же папку, что и ffmpeg.exe и zmqsend.exe


Выполните пакетный файл...

Для отключения звука выполните (из консоли):

echo volume@my volume 0 | zmqsend

Чтобы включить звук, выполните:

echo volume@my volume 1 | zmqsend

Возможно, есть и другие методы, но тема интерактивных команд недостаточно хорошо документирована...

Связанный контент