FFmpeg: Wie ersetzt man die Videohintergrundfarbe durch Transparenz? (während der Aufnahme)

Ich möchte ein Fenster aufnehmen und es auf ein anderes Video legen.

Das ist mein Befehl:

ffmpeg -i MainVideo.avi 
-f gdigrab -framerate 25 -video_size 300x200 -i title="MyWindow" 
-filter_complex "[0]setpts=PTS-STARTPTS[b];[b][1:v]overlay=(main_w-overlay_w):main_h-overlay_h[v]"
-map "[v]" -c:v libx264 -r 25  out.mp4

Hintergrund meines Fensters ist schwarz.

Wie kann ich diese schwarze Farbe durch Transparenz ersetzen?

geht das per ffmpeg? (Ich denke, es ist mit Chromakey/Colorkey-Filtern möglich, aber ich bin mir nicht sicher, und ich weiß nicht, wie ich diese Filter verwenden soll.)

Danke.

AKTUALISIEREN:

Angenommen, dies ist ein Videobild, das ich möchte:Geben Sie hier die Bildbeschreibung ein

GDIgrab stellt einen RGB-Feed bereit, sodass Colorkey hier funktionieren kann, aber wenn Sie einen Beispielframe des Grabs teilen, kann ich sehen, ob eine effektivere Alt-Methode möglich ist.
@Mulvya, Hallo, meine Frage wurde aktualisiert.
Siehe hier . Aber fügen Sie format=yuv444pfilter vor geqund anstelle von 16ein, müssen Sie möglicherweise einen Wert von 0 oder nahe 0 verwenden

Antworten (1)

GDIgrab liefert einen RGB-Feed, damit der Colorkey-Filter hier arbeiten kann.

Versuchen

ffmpeg -i 1.mp4 -f gdigrab -framerate 25 -video_size 300x200 -i title="MyWindow"
-filter_complex
"[1]split[m][a];
 [a]format=yuv444p,geq='if(gt(lum(X,Y),0),255,0)',hue=s=0[al];
 [m][al]alphamerge[ovr];
 [0][ovr]overlay=(main_w-overlay_w):main_h-overlay_h[v]"
-map "[v]" -c:v libx264 -r 25 out.mp4

Möglicherweise müssen Sie einen Wert nahe 0 verwenden, wenn 0 nicht den gesamten transparenten Bereich erfasst.

Ich danke dir sehr! , bei mir funktioniert es mit 16 statt 0. ( ...(X,Y),16),255,0...statt...(X,Y),0),255,0...
@Gyan Kannst du einen Befehl teilen, der nur die Hintergrundfarbe in eine andere Farbe ändert. Mein Fall hat keine Videoskalierung, keinen Titel usw.