次のような問題が発生しました:
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
他にも方法があるかもしれませんが、対話型コマンドの件については十分に文書化されていません...