我遇到以下問題:
我希望能夠在 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
可能還有其他方法,但是互動式命令主題沒有很好的文檔記錄...