FFMPEG-在 ffmpeg 运行时对传入流中的音频进行静音或取消静音

FFMPEG-在 ffmpeg 运行时对传入流中的音频进行静音或取消静音

我遇到了以下问题:

我希望能够在 ffmpeg 运行时静音和取消静音 ffmpeg 流中的音频。我搜索了一段时间,想知道你会怎么做。我在网上读了很多资料,但没有找到我搜索的问题。

我现在只知道可以使用 sendcmd 或 zmq 过滤器来完成此操作,但是 ffmpeg 的 API 对此没有任何帮助。

有人能解释一下怎么做吗?如果我理解正确的话,您必须通过sendcmdzmq过滤器将过滤器参数插入正在运行的程序中。

.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

可能还有其他方法,但交互式命令主题没有得到很好的记录......

相关内容