Warum ist der weiße Teil des Logos transparent, wenn ich ein Logo über das Video lege?

Ich überlagere mit dem folgenden Befehl:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[1]geq=r='r(X,Y)':a=0.1[a];[0][a] overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0" out.mp4

Ich habe versucht, die Deckkraft mit anzupassen

fmpeg -i video.mp4 -i logo.png -filter_complex "[1]format=rgba,geq=r='r(X,Y)':a='1*alpha(X,Y)'[a];[0][a] overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0" out.mp4

aber es ist immer noch transparent im weißen Farbteil.

Es scheint, als hätte der weiße Farbteil eine Transparenz von 0, was dazu führt, dass der zweite Befehl nicht funktioniert.

Gibt es einen Grund, warum dies geschieht? Das Logo, das ich ausprobiert habe, ist

Geben Sie hier die Bildbeschreibung ein

Wie kann ich die weiße Farbe erhalten?

Antworten (1)

Es gibt keine weiße Farbe. Das ist die Hintergrundfarbe der durchscheinenden Seite. Ihr Eingabe-PNG ist ein palettiertes 8-Bit-Bild, bei dem die schwarze Farbe Transparenz anzeigt.

Wenden Sie den folgenden Filter auf das Bild an, um schwarze Pixel in weiße umzuwandeln und eine einheitliche Transparenz festzulegen.

geq=r='if(p(X,Y),p(X,Y),255)':g='if(p(X,Y),p(X,Y),255)':b='if(p(X,Y),p(X,Y),255)':a=0.1
Ich verstehe nicht ganz, was du mit schwarzer Farbe meinst. Ich sehe keine schwarze Farbe. Können Sie auch erklären, was p(X,Y) ist? Die Dokumentation sagt Pixel in der aktuellen Ebene, was irgendwie vage ist.
Die im PNG hinterlegte eigentliche Farbe im Bereich des 'f' ist Schwarz, was der Betrachter als Transparenz interpretiert. Mein geq expr prüft, ob ein Pixel nicht schwarz ist. Wenn dies der Fall ist, wird es beibehalten, andernfalls wird es in Weiß geändert.