
Ich möchte einem Video (von Benutzern hochgeladen) ein Wasserzeichen-Logo hinzufügen und es mit einem Intro verknüpfen. Das resultierende Video muss dasselbe Format wie das Eingabevideo haben.
Das Problem beginnt, wenn das hochgeladene Video mehr als einen Audiostream hat und Untertitel enthält.
Ich habe das Audioproblem mit einem Befehl wie diesem gelöst.
ffmpeg -i intro.mp4 -i input.mkv -i logo.png -filter_complex "[0:v] scale=480:270,setdar=16/9 [a]; [1:v] scale=480:270,setdar=16/9 [b]; [2:0] scale=480:270 [wm]; [b][wm] overlay[ov]; [a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]" -map "[vd]" -map "[a0]" -map "[a1]" -y output.mkv
Die Ausgabe enthält jedoch keine Untertitel.
Kann jemand helfen?
Antwort1
Verwenden
ffmpeg -i intro.mp4 -i input.mkv -itsoffset 4.5 -i input.mkv -i logo.png
-filter_complex
"[0:v] scale=480:270,setdar=16/9 [a];
[1:v] scale=480:270,setdar=16/9 [b];
[3:0] scale=480:270 [wm];
[b][wm] overlay[ov];
[a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]"
-map "[vd]" -map "[a0]" -map "[a1]" -map 2:s? -c:s copy -y output.mkv
Sobald Sie Map-Anweisungen angeben, werden nur die zugeordneten Streams einbezogen. Sie müssen also alle Untertitel-Streams explizit zuordnen. Da es möglicherweise keine gibt, habe ich ein Ende hinzugefügt, ?
um eine bedingte Zuweisung anzuzeigen.
Ich habe das Eingangsvideo zweimal eingespeist, da die Untertitel-Zeitstempel in der Ausgabe falsch wären, da das Intro nun dem Video vorangeht. Dem zweiten Eingang wird ein Zeitstempel-Offset hinzugefügt und der Untertitel wird aus diesem Feed zugeordnet. Der itsoffset
Wert sollte der Dauer des Intros (in Sekunden) entsprechen. Es sollte nicht nötig sein, die Untertitel zu transkodieren.