ffmpeg: Füge 3 Sekunden Schwarz zu Kopf und Schwanz des Videos hinzu

11

Angenommen, ich habe ein Video, das beliebige Abmessungen oder Codecs haben kann (z. B. mp4), und ich möchte seinem Kopf 3 Sekunden schwarze Frames hinzufügen.

Ich habe andere Varianten dieser Frage gesehen, die sich auf das Hinzufügen eines einzelnen Frames beziehen, sowie Antworten, die die Breite und Höhe des Videos angeben. Das Video kann jedoch eine beliebige Breite und Höhe haben, und ich möchte diese Werte nicht ändern. Fügen Sie einfach das Schwarz hinzu. In einem separaten Befehl möchte ich auch die schwarzen Sekunden zum Schwanz hinzufügen.

Im schwarzen Bereich sollte kein Audio vorhanden sein - das Schwarz sollte nur an der Vorderseite und am Ende verkettet werden. Außerdem möchte ich nach Möglichkeit vermeiden, das Video neu zu codieren, und das Ergebnis in eine neue Datei kopieren.

Jede Hilfe wäre dankbar.

batmannutjob
quelle
Ist Audio vorhanden? Und möchten Sie die Neucodierung des Hauptvideos überspringen?
Gyan
@ Mulvya danke für deine Eingabe. Ich habe meine Frage aktualisiert.
Matt C
@MattC Sie können den obigen Kommentar jetzt löschen. Dies erfordert mehrere Befehle, es sei denn, Sie codieren neu. Ist das in Ordnung?
Gyan
@ Mulvya ja mehrere Befehle sind gut. Danke noch einmal.
Matt C

Antworten:

12

Die grundlegende Methode zum Verbinden von Videos ohne Neucodierung ist die Verwendung des Concat-Demuxers. Für dieses Gerät müssen die zu verbindenden Dateien bestimmte Eigenschaften aufweisen, z. B. Codec, Bildrate, Videodimensionen, Zeitbasis usw.

Der erste Schritt besteht darin, das leere Segment zu erstellen, das sowohl am Kopf als auch am Schwanz verwendet werden kann.

ffmpeg -i fullvideo.mp4 -vf trim=0:3,geq=0:128:128 -af atrim=0:3,volume=0 -video_track_timescale 600 3sec.mp4

Sie müssen einen Buchhaltungsschritt für das vollständige Video ausführen. Andernfalls wird das kombinierte Video wahrscheinlich mit der falschen Geschwindigkeit ausgeführt.

ffmpeg -i fullvideo.mp4 -c copy -video_track_timescale 600 full600.mp4

Erstellen Sie als Nächstes eine Textdatei.

file 3sec.mp4
file full600.mp4
file 3sec.mp4

Dann renne

ffmpeg -f concat -i list.txt -c copy merged.mp4

In meinem ersten Schritt wird davon ausgegangen, dass der Videostream das am häufigsten verwendete Pixelformat hat yuv420p. Dies sollte in Ordnung sein, da dies das einzige Pixelformat ist, das von Web-Playern und Smartphone-Kameras, Consumer-Camcordern usw. unterstützt wird. Ist dies nicht der geqFall, kann der Filter ausfallen.

Ich gehe auch stillschweigend davon aus, dass das vollständige Video nicht mehr Referenzframes verwendet als mit der Voreinstellung mediumvon x264 erzeugt. Dies ist eine sichere Annahme für 95% der Videos.

Schließlich gehe ich davon aus, dass das vollständige Video AAC-LC als Audio-Codec hat. Wird voraussichtlich für die meisten Telefon- / Cam- / Webvideos zutreffen.

Gyan
quelle