ffmpeg filter_complex-Problem

Ich versuche, einen komplexen Effekt mit zu erzielen , aber ich scheine irgendwo ffmpegan der Syntax zu scheitern .-filter_complex

Das Ziel ist es, einen Teil des Bildschirms (mit UScreenCapture Direct Show Device) zu erfassen, wo ich zwei Bilder nebeneinander zeige (genannt [bg]und [key] oder [rgb]und [alpha]in der Filterkette). Links ist das Bild selbst, rechts sein Alphakanal, schwarz-weiß dargestellt. Dann möchte ich das über einer anderen Eingabe zusammensetzen (eine Videoeingabe von einer Datei oder einem anderen Aufnahmegerät ... aber in diesem Fall eine Datei, die [video]in der Filterkette aufgerufen wird).

Um die drei zusammen zu komponieren, mische ich zuerst das Alpha mit dem Video, mache alles außerhalb des weißen Alphas (geladen in [out1]) schwarz und mische den Bildhintergrund mit dem negativen Alpha (geladen in [out2]). Um die Kette zu beenden, füge ich die beiden Ausgänge mit Blend-Mode-Addition hinzu ... und entleere sie in eine Pipe

Theoretisch sollte es funktionieren, aber es beschwert sich immer wieder, dass der Stream-Bezeichner 'alpha' mit keinem Stream übereinstimmt:

ffmpeg -v debug -f dshow -i video=UScreenCapture -i chroma.mp4 -filter_complex \
"[0:v]split[bg][key]; \
 [bg]crop=720:576:0:0, format=gbrap,setsar=0:1[rgb]; \
 [key]crop=720:576:720:0,format=gray8,setsar=0:1,scale=720:576[alpha]; \
 [1:v]scale=720:576,format=yuv420p,setsar=0:1[video]; \
 [alpha]negate[neg_alpha]; \
 [video][neg_alpha]blend=all_mode='multiply':all_opacity=1[masked_video]; \
 [rgb][alpha]blend=all_mode='multiply':all_opacity=1[masked_3d]; \
 [masked_video][masked_3d]blend=all_mode='addition':all_opacity=1[out]" \
-map "[out]"-c:v mpeg2video -f avi - | ffplay -
Sie sollten Ihr Filterdiagramm nach Möglichkeit trimmen, um nur die minimalen Filter beizubehalten, die für das Auftreten des Problems erforderlich sind. Sie sollten auch die vollständige Konsolenausgabe Ihres Befehls einschließen.
Fügen Sie ein Leerzeichen vor -c:v mpeg2video hinzu
Hast du getestet, ob das funktioniert?

Antworten (1)

Filgergraph wie beschrieben kann nicht funktionieren, Sie können [alpha] nicht zweimal verwenden, Sie müssen es aufteilen:

[0:v]split[bg][key]; [bg]crop=720:576:0:0, format=gbrap,setsar=0:1[rgb]; [key]crop=720:576:720:0,format=gray8,setsar=0:1,scale=720:576,split[alpha2][alpha]; [1:v]scale=720:576,format=yuv420p,setsar=0:1[video]; [alpha]negate[neg_alpha]; [video][neg_alpha]blend=all_mode='multiply':all_opacity=1[masked_video]; [rgb][alpha2]blend=all_mode='multiply':all_opacity=1[masked_3d]; [masked_video][masked_3d]blend=all_mode='addition':all_opacity=1