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 sendcmd
oder zmq
Filter in das laufende Programm einfügen.
Folgendes habe ich, um .bat
ffmpeg 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.zip
die 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@my
verwendet „interaktiven Namen“ für den Lautstärkefilter.azmq
wird benötigt, um interaktive Befehle für den nachfolgenden Audiofilter zu ermöglichenazmq
(Interaktive Befehle an denvolume
Filter).
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 ping
Befehl 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 ...