FFMPEG - Ton vom eingehenden Stream stummschalten oder die Stummschaltung aufheben, während ffmpeg ausgeführt wird

FFMPEG - Ton vom eingehenden Stream stummschalten oder die Stummschaltung aufheben, während ffmpeg ausgeführt wird

Ich habe das folgende Problem:

Ich möchte den Ton eines FFMPEG-Streams stummschalten und die Stummschaltung aufheben können, während FFMPEG ausgeführt wird. Ich habe jetzt schon eine Weile danach gesucht und mich gefragt, wie man das machen würde. Ich habe viel im Internet gelesen, aber ich habe das gesuchte Problem nicht gefunden.

Ich weiß jetzt nur, dass man es mit Sendcmd- oder ZMQ-Filtern machen kann, aber die API von ffmpeg bringt mich hierfür nicht weiter.

Kann mir jemand erklären wie das geht? Wenn ich das richtig verstehe muss man die Filterparameter über sendcmdoder zmqFilter in das laufende Programm einfügen.

Folgendes habe ich, um .batffmpeg zu starten:

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

Antwort1

Zum interaktiven Stummschalten und Aufheben der Stummschaltung können Sie verwendenAbonnierenFiltern mitVolumenFilter.

Für die Verwendung interaktiver Befehle benötigen wir ein Tool namens zmqsend.
Sie können ffmpeg-tools.zipdie Windows-Version von herunterladenHier. (Zum Testen habe ich die Tools so extrahiert, dass sie im selben Ordner wie ffmpeg.exe liegen.)


Fügen Sie Ihrem FFmpeg-Befehl den folgenden Audiofilter hinzu -af "azmq,volume@my=volume=1".

  • volume@myverwendet „interaktiven Namen“ für den Lautstärkefilter.
  • azmqwird benötigt, um interaktive Befehle für den nachfolgenden Audiofilter zu ermöglichen azmq(Interaktive Befehle an den volumeFilter).

Hier ist eine Batchdatei, die FFplay ausführt und den FFmpeg RTMP-Stream abhört:

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

Die obigen Befehle streamen synthetisches Audio und Video (zum Testen).

Der pingBefehl wird verwendet, um einige Sekunden zu warten, bevor FFmpeg gestartet wird.
Sie können die Batchdatei im selben Ordner wie ffmpeg.exe und zmqsend.exe ablegen.


Führen Sie die Batchdatei aus ...

Um den Ton stummzuschalten, führen Sie (von der Konsole aus) Folgendes aus:

echo volume@my volume 0 | zmqsend

Um die Stummschaltung des Audios aufzuheben, führen Sie Folgendes aus:

echo volume@my volume 1 | zmqsend

Es gibt möglicherweise andere Methoden, aber das Thema interaktive Befehle ist nicht gut dokumentiert ...

verwandte Informationen