
Ist es in FFmpeg möglich, einen Ausgang aus der Mitte einer Filterkette zuzuordnen?
Beispielsweise in diesem Befehl:
ffmpeg -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50[txt1];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50[txt2];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50[txt3];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50[txt4]" -map "[txt4]" -t 10 -y ~/Desktop/mapping.mp4
Das funktioniert: -map "[txt4]". Beim Versuch, -map "[txt3]" (oder txt2 oder txt1) zu verwenden, erhalte ich "
Ausgabe mit der Bezeichnung „txt3“ existiert in keinem definierten Filterdiagramm oder wurde bereits anderswo verwendet.“
Ich möchte den vollständigen Befehl aufrufen und verschiedene Teile der Filterkette ( -map [$val]
) verwenden, um unterschiedliche Dateien auszugeben.
Danke
Antwort1
Das ist möglich, aber wir müssenTeiltFilter für den "mittleren Filter".
Wenn der „mittlere Filter“ als Eingabe für einen anderen Filter verwendet wird, wird er von diesem Filter „verbraucht“ und kann später nicht mehr verwendet werden.
Hier ist ein Beispiel zum Erstellen von Videodateien aus allen „mittleren Filtern“ mit einem Befehl:
ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4]" -t 10 -map "[txt1out]" mapping1.mp4 -t 10 -map "[txt2out]" mapping2.mp4 -t 10 -map "[txt3out]" mapping3.mp4 -t 10 -map "[txt4]" mapping4.mp4
Um jede Datei einzeln zu kodieren, können wir hinzufügenStreamauswahlFilter, am Ende der Filterkette:
[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]
Set map=0
zum Auswählen [txt1out]
, Set map=1
zum Auswählen [txt2out]
...
Beispielbefehl:
ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4];[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]" -t 10 -map "[out]" mapping2.mp4
Hinweis:
Das Hinzufügen fontfile=arial.ttf
war erforderlich, damit es drawtext
unter Windows funktioniert.