FFMPEG - ffmpeg の実行中に受信ストリームからのオーディオをミュートまたはミュート解除する

FFMPEG - ffmpeg の実行中に受信ストリームからのオーディオをミュートまたはミュート解除する

次のような問題が発生しました:

ffmpeg の実行中に、ffmpeg ストリームからのオーディオをミュートしたりミュート解除したりできるようにしたいです。しばらく検索していて、どうすればいいか知りたかったのです。インターネットでいろいろ読みましたが、探していた問題は見つかりませんでした。

今のところ、sendcmd または zmq フィルターを使用して実行できることはわかっていますが、これに対する ffmpeg の API では、それ以上のことはできません。

誰かやり方を説明してくれませんか? 私の理解が正しければ、フィルター パラメーターをsendcmdまたはzmqフィルター経由で実行中のプログラムに挿入する必要があります。

ffmpeg を起動するには、次のものが必要です.bat

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

答え1

音声をインタラクティブにミュートしたりミュート解除したりするには、アズムクフィルター音量フィルター。

対話型コマンドを使用するには、というツールが必要ですzmqsend。Windows版は以下から
ダウンロードできます。ffmpeg-tools.zipここ(テストのために、ツールを 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

他にも方法があるかもしれませんが、対話型コマンドの件については十分に文書化されていません...

関連情報