ffmpeg: Gedrehtes Video mit Transparenz überlagern

Ich bin neu bei ffmpeg (Videocodierung im Allgemeinen).

Ich habe zwei Videos, eines größer als das andere. Ich möchte das kürzere Video an definierten Koordinaten drehen, skalieren und über das größere Video legen.

Bisher mache ich das so:

  1. Alphakanal zu beiden Videos hinzufügen:ffmpeg -i demo.mov -vcodec qtrle -pix_fmt argb demo.mov
  2. Definieren Sie Fadein, Fadeout, Scale, Overlay, Perspektive und Rotation und geben Sie dann das Video aus:ffmpeg -y -i demo.mov -i demo2.mov -filter_complex "[1:v] fade=in:10:1:alpha=1, fade=out:500:1:alpha=1, scale=80:80, perspective=x0=0:y0=0:x1=W:y1=40, rotate=-0.1745:c=none [ov]; [0:v][ov] overlay=100:100 [v]" -map "[v]" out.mov

Bei diesem Vorgang stoße ich auf einige Probleme:

  1. Füge ich Alphakanäle richtig hinzu?
  2. Die endgültige Ausgabe hat einen flimmernden Hintergrund an der Stelle, an der das gedrehte Video Ränder hat.
  3. Die Überlagerung bleibt ein Quadrat. Ich möchte nicht, dass es quadratisch ist, sondern die vom perspectiveFilter angegebene Größe hat.

Einige der Parameter in den obigen Befehlen (wie perspective, fade) sind willkürlich.

Um einen besseren Überblick über das zu geben, was ich zu tun versuche: Ich versuche, ein Video hinzuzufügen, als ob es auf einem sich bewegenden Telefon abgespielt würde.

Ich habe im IRC nach Problemen gefragt und bin so weit gekommen. Ich weiß nicht, wie ich hier weiter vorgehen soll.

Hier ist die Ausgabe: https://youtu.be/yd4UWq5NO5M

Jede Hilfe wäre großartig.

Kannst du die Rohdaten hochladen?
@ Mulvya Sicher. download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/… Ich verwende dieselbe Quelle für beide - Hintergrund und Overlay der Einfachheit halber.
Ich habe diesem Eingang einen Alphakanal hinzugefügt.
Ich werde später genauer hinsehen, aber es gibt keinen Alphakanal. Das Pixelformat ist yuv420p. Wohlgemerkt, Sie brauchen keinen Alphakanal für das, was Sie zu tun versuchen. Womit würde der Alphakanal auf jeden Fall gefüllt werden?
Da Sie "versuchen, ein Video hinzuzufügen, als würde es auf einem sich bewegenden Telefon abgespielt", geschieht dies am besten in einer Compositing-App mit einem Tracker. Sehen Sie sich Natron – natron.fr oder Fusion – blackmagicdesign.com/in/products/fusion an , wenn Sie nach einer kostenlosen Lösung suchen. Sonst After Effects.
Warum ich einen Alphakanal hinzufüge: Als ich versuchte, das Video ohne Alphakanal zu überlagern, blieb beim Ausblenden ein schwarzer Hintergrund zurück. Durch das Hinzufügen des Alphakanals wurde es entfernt. Also füge ich den Kanal hinzu, damit beim Ausblenden keine Reste der Überlagerung zurückbleiben. Ich muss diese Funktionalität in meine App integrieren, daher ist es schöner, keine Lösungen von Drittanbietern zu verwenden :)
Kein Alphakanal erforderlich. Ihr letzter Filter sollte [0:v][ov] overlay=100:100:eof_action=pass [v] sein
Ja! Das hat funktioniert! Jetzt muss ich mir keine Gedanken mehr über großformatige Zwischenvideos machen. Danke! Das Problem mit dem Flackern ist aber immer noch da.
Das Seltsame ist, dass das Flackern fast vollständig verschwindet, wenn ich die Aufgabe in zwei Befehlen ausführe, dh einen ffmpeg-Befehl, um ein MOV mit dem transformierten Video mit den Überblendungen auszugeben, und einen Befehl, um die Überlagerung dieses MOV über dem Original auszuführen. Aber die identische Filterkette für den ersten Schritt, wenn sie in einen einzigen Befehl integriert wird, gibt ein Flackern.
Ich habe mehrere Videos ausprobiert. Alle haben das Flackern gegeben. Ich habe jedoch nicht versucht, die Filterketten zu trennen.
Versuchen Sie dies für den ersten Befehl: ffmpeg -y -i "input.mov" -vf "format=bgra, perspective=x0=0:y0=0:x1=W:y1=180, fade=in:10:1: alpha=1, fade=out:200:1:alpha=1, scale=-1:80, rotation=-0.1745:c=none:ow=rotw(iw):oh=roth(ih)" -c:v qtrle-Ausgabe.mov
Und zweitens: ffmpeg -y -i "input.mov" -i "output.mov" -filter_complex "[0:v][1:v] overlay=100:100:eof_action=pass [v]" -map "[ v]" final_out.mov
Flackert viel. Hier: youtu.be/ZzLBVRGfn60
Lassen Sie mich hier noch einmal nachsehen.

Antworten (1)

Das Aufteilen des Prozesses in zwei Schritte hat für mich funktioniert.

Sehen Sie sich meine Ausgabe mit den folgenden Befehlen unter http://sendvid.com/g56xjz04 an

Die von mir verwendeten Befehle:

ffmpeg -y -i "video for overlay.mov" -vf "format=bgra, perspective=x0=0:y0=0:x1=W:y1=180, fade=in:10:1:alpha=1, fade=out:200:1:alpha=1, scale=-1:80, rotate=-0.1745:c=none:ow=rotw(-0.1745):oh=roth(-0.1745)" -c:v qtrle overlay.mov

ffmpeg -y -i "base.mov" -i "overlay.mov" -filter_complex "[0:v][1:v] overlay=100:100:eof_action=pass [v]" -map "[v]" final_out.mov

Ich vermute, dass es in der komplexen Filterkette mit einem Befehl einen Fehler oder eine Nuance in Bezug auf die Alphakanaloperationen gibt, die einen verstümmelten Alphakanal erzeugen.

Wenn Sie einen einzelnen Befehl benötigen, ist es meiner Meinung nach am besten, einen Fehlerbericht an das ffmpeg-Team zu senden, einschließlich der Befehle und der Ausgabe sowohl des einzelnen Befehls als auch des zweistufigen Prozesses.

Stellen Sie außerdem sicher, dass Sie den neuesten oder einen relativ neuen ffmpeg-Build verwenden.
Ich habe gerade die beiden Befehle mit diesen Versionen getestet: N-76452-ga97f1e7und N-76045-g97be5d4. Kannst du mir sagen, welche Version du verwendest? Weil ich immer noch das Flackern bekomme.
Ich habe den statischen 64-Bit-Build N-75573-g1d0487f vom 29.09.2015 von dieser Website: ffmpeg.zeranoe.com/builds
Von den Nummern scheint es, dass meins neuer ist.
Hast du es selbst zusammengestellt?
Ich habe von hier aus kompiliert N-76452-ga97f1e7und hinzugefügt N-76045-g97be5d4- launchpad.net/~mc3man/+archive/ubuntu/trusty-media
Probieren Sie die neueste Version aus der Originalquelle aus: ffmpeg.org/download.html
Sollte ich mich für 2.8.1 (herunterladbares Tar) entscheiden oder von Git ziehen? Oh, ich habe gerade 2.8.1 kompiliert und da stehtNo such filter: 'perspective'
@DhavanVaidya Verwenden Sie immer Git, nicht Release.
@LordNeckbeard Okay. Ich werde das tun und posten, was passiert.