我遇到了以下问题:
我希望能够在 ffmpeg 运行时静音和取消静音 ffmpeg 流中的音频。我搜索了一段时间,想知道你会怎么做。我在网上读了很多资料,但没有找到我搜索的问题。
我现在只知道可以使用 sendcmd 或 zmq 过滤器来完成此操作,但是 ffmpeg 的 API 对此没有任何帮助。
有人能解释一下怎么做吗?如果我理解正确的话,您必须通过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
可能还有其他方法,但交互式命令主题没有得到很好的记录......