Hinzufügen von Overlays während des präzisen Schnitts in ffmpeg

943
c97

Ich habe lange Videodateien, die ich gerne auf einen genauen Zeitstempel schneiden möchte, und ich muss auch ein Wasserzeichen hinzufügen. Bevor ich ein Wasserzeichen hinzufügen musste, habe ich diesen Befehl verwendet und er hat großartig funktioniert:

ffmpeg -ss 00:00:20.480 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.960 -c:a copy -c:v libx264 -filter:v "scale=1280:-1" -preset slow -crf 25 "OUTPUT.mp4" 

Aber jetzt muss ich ein Wasserzeichen hinzufügen. Ich habe versucht, einen Überlagerungsfilter (der eine zweite Eingabedatei verwendet) zu verwenden. Ich verwende ein Apng-Dateiformat, um Transparenz zu erreichen:

ffmpeg -ss 00:01:00.680 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.759 -i overlay.apng -c:a copy -c:v libx264 -filter_complex "crop=in_w-8:in_h-8,overlay,scale=1280:-1" -preset slow -crf 25 "OUTPUT.mp4" 

Leider ignoriert ffmpeg in diesem Fall den zweiten -ss-Schalter. Ohne diesen Schalter gibt es keinen präzisen Schnitt. Selbst wenn ich dem ersten -ss-Schalter einen richtigen Zeitstempel gebe, würde es beim Abspielen der ersten Sekunden einer Videodatei zu einem Frieren der Bilder kommen.

Ich kam mit einer hässlichen schnellen Lösung, indem ich zwei ffmpeg-Prozesse wie folgt verkettete:

ffmpeg -ss 00:00:15.640 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.800 -c:a copy -c:v huffyuv -f matroska - | ffmpeg -i pipe:0 -i overlay.apng -filter_complex "crop=in_w-8:in_h-8,overlay=y=main_h-overlay_h:x=0,scale=1280:-1" -c:a copy -c:v libx264 -preset slow -crf 25 "OUTPUT.mp4" 

In diesem Fall sinkt die gesamte Kodierungsleistung um 30%.

Mein Ziel ist das Ausschneiden und Hinzufügen von Wasserzeichen in einem einzigen Befehl. Bitte helfen

0

1 Antwort auf die Frage

1
Gyan

Option order matters. See https://ffmpeg.org/ffmpeg.html#Description

Use

ffmpeg -ss 00:01:00.680 -i "INPUT.mp4" -i overlay.apng -ss 00:00:10.000 -t 00:11:39.759 -filter_complex "[0]crop=in_w-8:in_h-8[a];[a][1]overlay,scale=1280:-1" -c:a copy -c:v libx264 -preset slow -crf 25 "OUTPUT.mp4" 

It's not clear what you meant to apply the crop to. I assume it's the first input since that's currently how ffmpeg is handling with your present command. If not, feed [1] to crop and [0][a] to the overlay.