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

可能還有其他方法,但是互動式命令主題沒有很好的文檔記錄...

相關內容