Ich möchte mit einem einzigen Befehl eine Bildüberlagerung mit Überblendeffekt zu einem bestimmten Zeitpunkt im Video sowie Hintergrundaudio auf das Video anwenden. Das Video wird außerdem auf nur 15 Sekunden begrenzt sein.
Derzeit kann ich dies mit zwei Befehlen erreichen, die wiederum zwei Ausgaben erzeugen würden. Wie kann ich diese beiden Befehle zusammenführen?
Erster Befehl
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" incomplete.mp4
Zweites Kommando
ffmpeg -i audio.mp3 -i incomplete.mp4 -shortest finalVideo.mp4
Dies ist mein Versuch, die beiden Befehle zu einem einzigen Befehl zusammenzuführen. Das Video ist jetzt jedoch nicht mehr auf 15 Sekunden begrenzt und der Hintergrundton gilt nach Tests mit mehreren MP4-Videos nur für wenige Videos.
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -i audio.mp3 -shortest -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" finalVideo.mp4
Antwort1
Verwenden
ffmpeg -ss 00:00:00 -t 00:00:15 -i video.mp4 -loop 1 -i image.png -i audio.mp3
-filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i];
[0][i]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2:shortest=1[v]"
-map "[v]" -map 2:a -shortest incomplete.mp4
In ffmpeg ist die Platzierung der Optionen wichtig. Jede Option vor einer Eingabe gilt nur für diese Eingabe. In Ihrem versuchten kombinierten Befehl geben Sie das Audio nach den Zeitspezifikationen ein, sodass diese nur für die Audioeingabe spezifisch sind.
FFmpeg verwendet ein Zuordnungssystem, um zu entscheiden, welche Streams in die Ausgabe aufgenommen werden. Wenn keine Zuordnungszuweisungen explizit festgelegt sind, wählt die Standardzuordnung ein Audio aus den Eingängen aus. Anscheinend hatten einige Ihrer MP4s Audiostreams, die gegenüber den MP3s priorisiert wurden. Mit expliziten Zuweisungen wird das nicht passieren.