2016-07-25 13 views
1

Ich versuche FFMPEG zu verwenden, um ein Video mit einem überlagerten Video zu erstellen.FFMPEG: Überlagern Sie ein Video auf einem anderen, und machen Sie schwarze Pixel transparent

Ich habe 2 MP4s. Ich muss alle BLACK Pixel in der Overlay Video transparent machen, damit ich das Hauptvideo darunter sehen kann.

fand ich zwei Möglichkeiten, ein Video auf einem anderen zu überlagern:

Zunächst werden die folgenden Positionen der Überlagerung in der Mitte, und daher darunter den Teil des Haupt-Video versteckt:

ffmpeg -i 1.mp4 -vf "movie=2.mp4 [a]; [in][a] overlay=352:0 [b]" combined.mp4 -y 

und diese, legt sich den Overlay-Video auf der linken Seite, aber es ist Opazität auf 50% eingestellt, so zumindest andere darunter sichtbar ist:

ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS[top]; [1:v]setpts=PTS-STARTPTS, format=yuva420p,colorchannelmixer=aa=0.5[bottom]; [top][bottom]overlay=shortest=0" -acodec libvo_aacenc -vcodec libx264 out.mp4 -y 

Mein Ziel ist einfach zu mak Alle schwarzen Pixel im Overlay (2.mp4) sind vollständig transparent. Wie kann das gemacht werden?

Antwort

4

Der fiktive Weg, dies zu tun ist Chroma-Key das Blackout und dann Overlay, aber wie @MoDJ sagte, wird dies wahrscheinlich nicht zu zufriedenstellenden Ergebnissen führen. Weder wird die Methode, die ich unten vorschlage, aber es ist einen Versuch wert.

ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex 
"[1]split[m][a]; 
[a]geq='if(gt(lum(X,Y),16),255,0)',hue=s=0[al]; 
[m][al]alphamerge[ovr]; 
[0][ovr]overlay" 
output.mp4 

Oben, ich duplizieren Sie den Overlay-Video-Stream, dann verwenden Sie die geq Filter die Luma-Werte so zu manipulieren, dass jedes Pixel mit Luma von mehr als 16 (also nicht rein schwarz) hat seine Luma auf weiß gesetzt, sonst Null . Da ich für die beiden Farbkanäle keine Ausdrücke angegeben habe, greift geq auf den Luma-Ausdruck zurück. Wir wollen das nicht, also benutze ich den Filter hue, um diese Kanäle zu löschen. Dann verwende ich den Filter alphamerge, um diesen als Alpha-Kanal mit der ersten Kopie des Overlay-Videos zusammenzuführen. Dann das Overlay. Wie ich schon sagte, kann dies nicht zu zufriedenstellenden Ergebnissen führen. Sie können den Wert 16 im Geq-Filter ändern, um den Schwarz-Schwellenwert zu ändern. Vorgeschlagener Bereich ist 16-24 für Video-Dateien mit begrenzter Reichweite (Y: 16-235).

+0

Vielen Dank! Genau das habe ich gesucht. Zugegebenermaßen folge ich der Erklärung nicht ganz und hätte mir das nie einfach nur aus der FFMPEG-Dokumentation, die ich äußerst kryptisch finde, einfallen lassen. Ich denke, die Ergebnisse sind in der Tat zufriedenstellend, aber wenn mein Klient nicht einverstanden ist, werde ich mit MoDJ's Vorschlag gehen. (Danke euch beiden!) –

0

Sie können den Ansatz "schwarze Pixel ersetzen" nicht ordnungsgemäß ausführen. Was Sie eigentlich wollen, ist ein Vordergrundvideo mit einem echten Alphakanal, das manipuliert und getestet werden kann, bevor Sie einen Hintergrund überlagern. Für ein ausführliches Beispiel, das die Probleme beschreibt, werfen Sie bitte einen Blick auf meine blog post zum Thema. Wenn Sie FFMPEG verwenden, können Sie Alpha-Kanal-Video auf einfache Weise mit Quicktime mit dem Animations-Codec-Video mit 32 BPP verwenden.

+0

Ich bin wirklich neu in all dem, und ich finde die Syntax extrem verwirrend. Aber mir wurde gesagt, dass ich den Mischmodus im Overlay-Video ändern könnte, um die Transparenz zu erzeugen. Ist das nicht machbar? –

+0

Siehe meinen Blogbeitrag für die Details, das Problem ist Qualität und das tatsächliche Aussehen der Endergebnisse. Sie benötigen ein Eingangsvideo mit einem vollständigen Alphakanal. – MoDJ

Verwandte Themen