Wie füge ich mein Logo für die ersten 30 Sekunden in einem Video mit ffmpeg hinzu?

9

Ich versuche, mein Logo für die ersten 30 Sekunden in einem Video mit ffmpeg hinzuzufügen. Ich habe ein Video namens d1.mp4und ein Logo namens logo.png.

Wenn das Video gestartet wird, sollte sich das Wasserzeichen in der oberen linken oder oberen rechten Ecke des Videos befinden und nach 30 Sekunden verschwinden.

Können Sie mir bitte zeigen, wie man es hinzufügt?

iwocan
quelle
Mein Video Name ist d1.mp4 und mein Logo Name ist logo.png, danke ..
iwocan
Was ffmpeg -i d1.mp4 -i logo.pngzeigt sich dann? Bitte geben Sie einfach diesen Befehl ein und zeigen Sie uns, was die Ausgabe ist. Wenn Sie Fragen zu stellen ffmpeg, sollten Sie immer so viele Details wie möglich darüber angeben, welches Video- / Audiomaterial Sie haben, was Sie bereits ausprobiert haben und die vollständige Befehlszeilenausgabe von allem, was Sie versucht haben.
Slhck
Folgendes bekomme ich auf meinem cmd-Bildschirm. pastebin.com/bPCnhXh2
iwocan

Antworten:

13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Dies setzt voraus, dass das Logo ein einzelnes Standbild mit einem Alphakanal ist und Sie es über ein Video mit einer Bildrate von 30000/1001 (NTSC-Rate) legen möchten. Ändern Sie das -framerate, um es an Ihr Eingangsvideo anzupassen, falls es anders ist. Wenn Ihr Logo ein Video ist, lassen Sie es weg -framerate 30000/1001 -loop 1. Wenn das Logo keinen Alphakanal hat, fügen Sie einen hinzu, indem Sie z . B. format=yuva420p,unmittelbar zuvor einfügen fade.

Dadurch wird das Logo 30 Sekunden lang an der x, y-Position 10,10 angezeigt, gefolgt von einem 1-Sekunden-Ausblenden.

mark4o
quelle
1
Sehr interessant! Können Sie erklären, warum das framerateund loopin diesem Fall erforderlich ist und nicht für eine einfache Überlagerung ohne Überblendfilter?
Rajib
Vielen Dank mark40, aber wenn ich diesen Code schreibe, hört der cmd-Bildschirm nicht auf. Ich weiß nicht warum, aber es hat bei mir nicht funktioniert.
iwocan
Hallo LordNeckbeard, hier ist ein Screenshot .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@iwocan Ich glaube, Sie können Sachen aus der Windows-Eingabeaufforderung kopieren. Ich nahm an, Sie würden suchen, wie es geht, aber schauen Sie in der Windows-Eingabeaufforderung in die Zwischenablage kopieren .
Llogan
4
@ Rajib: Der Grund für das -framerateund -loopfür ein Standbild ist, dass das Ausblenden funktioniert. Wenn es nur ein einzelnes Bild gibt, kann es nicht über einen Zeitraum von 1 Sekunde ausgeblendet werden. Idealerweise sollte es die gleiche Bildrate wie das Video haben, damit die Überblendung so gleichmäßig wie möglich ist.
Mark4o
19

Verwenden des overlayVideofilters zum Hinzufügen eines Logos zu einem Video:

Geben Sie hier die Bildbeschreibung ein

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Um diesen Befehl zu verstehen, müssen Sie wissen, was ein Stream-Bezeichner ist, und das Lesen der Einführung in die FFmpeg-Filterung hilft. [0:v]bezieht sich auf den / die Videostreams des ersten Eingangs ( video.mp4) und [1:v]auf den Videostream des zweiten Eingangs ( logo.mp4). So können Sie feststellen, overlaywelche Eingänge verwendet werden sollen. Sie können weglassen [0:v][1:v]und overlayfunktionieren weiterhin, es wird jedoch empfohlen, explizit zu sein und sich nicht auf möglicherweise unbekannte Standardeinstellungen zu verlassen.

Standardmäßig wird das Logo oben links platziert.

Mit -codec:a copywird das Audio kopiert . Dadurch wird das Audio einfach neu gemuxt, anstatt es neu zu codieren. Stellen Sie sich das als "Kopieren und Einfügen" des Audios vor.

Logo verschieben

In diesem Beispiel wird das Logo um 10 Pixel nach rechts und um 10 Pixel nach unten verschoben: Geben Sie hier die Bildbeschreibung ein

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

In diesem Beispiel wird das Logo 10 Pixel von der rechten Seite und 10 Pixel nach unten verschoben:

Geben Sie hier die Bildbeschreibung ein

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wbezieht sich auf die Breite des "Haupt" -Eingangs (Hintergrund oder [0:v]) und overlay_wbezieht sich auf die Breite des "Overlay" -Eingangs (Logo oder [1:v]). Im Beispiel kann dies also in overlay=320-90-10:10oder übersetzt werden overlay=220:10.

Timing der Überlagerung

Einige Filter können die Zeitleistenbearbeitung verarbeiten, sodass Sie mithilfe von arithmetischen Ausdrücken bestimmen können, wann ein Filter angewendet werden soll. Lesen Sie, ffmpeg -filterswelche Filter die Timeline-Bearbeitung unterstützen.

In diesem Beispiel wird das Logo bis 30 Sekunden lang angezeigt:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Wenn Sie das Logo ausblenden möchten, lesen Sie die Antwort von mark4o .

llogan
quelle
Vielen Dank! :) Ich entschuldige mich wieder für mein gebrochenes Englisch. Dieser Befehl funktioniert perfekt! :)
Iwocan
endlich etwas verständliches! Was soll ich verwenden, um es am Anfang als am Ende erscheinen zu lassen?
Cikatomo
Ich wollte am Anfang und am Ende erscheinen? Zweimal. Ich habe versucht, enable = zwischen (t \, 0 \, 30): enable = zwischen (t \, 50 \, 60), aber die einzige letzte Zeitleiste ist in Kraft
Cikatomo
@ Cikatomo enable=not(between'(t,30,50)'). Dadurch wird die Überlagerung jederzeit angezeigt, jedoch nicht mit einer Dauer von 30 bis 60 Sekunden.
Llogan
Perfekt, danke. Trotz Ihrer Warnung, nicht overlayalles alleine zu verwenden, habe ich es getan, weil die Standardposition oben links genau das war, was ich wollte. (Also am Ende waren meine Flaggen einfach filter_complex overlay.)
Felwithe