it-swarm.com.de

Schneiden Sie die Videos basierend auf Start- und Endzeit mit ffmpeg

Ich habe versucht, das Video mithilfe der Start- und Endzeit des Videos mit dem folgenden Befehl zu schneiden

ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4

Mit dem obigen Befehl möchte ich das Video von 00:00:03 zu 00:00:08 schneiden. Aber es schneidet das Video nicht zwischen diesen Zeiten, stattdessen schneidet es das Video mit den ersten 11 Sekunden. kann mir jemand helfen wie das zu lösen ist?

Edit 1:

Ich habe versucht, mit dem folgenden Befehl zu schneiden, der von mark4o vorgeschlagen wird

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

Es wurde aber folgender Fehler angezeigt.

der Encoder 'aac' ist experimentell, aber experimentelle Codecs sind nicht aktiviert

also habe ich den -strict -2 in den Befehl eingefügt, d. h.

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4

Jetzt funktioniert es gut.

429
Kalai

Bei der 3-Sekunden-Marke haben Sie wahrscheinlich keinen Keyframe. Da Nicht-Keyframes Unterschiede zu anderen Frames codieren, sind alle Daten erforderlich, die mit dem vorherigen Keyframe beginnen.

Mit dem mp4-Container ist es möglich, Bilder ohne Keyframe auszuschneiden, ohne eine neue Codierung mithilfe einer Bearbeitungsliste vorzunehmen. Mit anderen Worten, wenn der nächste Keyframe vor 3s bei 0s liegt, wird das Video ab 0s kopiert und eine Bearbeitungsliste verwendet, um den Player anzuweisen, in 3 Sekunden mit der Wiedergabe zu beginnen.

Wenn Sie das neueste ffmpeg vom Git-Master verwenden, wird dies unter Verwendung einer Bearbeitungsliste durchgeführt, wenn es mit dem von Ihnen angegebenen Befehl aufgerufen wird. Wenn dies bei Ihnen nicht funktioniert, verwenden Sie wahrscheinlich entweder eine ältere Version von ffmpeg oder Ihr Player unterstützt keine Bearbeitungslisten. Einige Player ignorieren die Bearbeitungsliste und geben immer alle Medien in der Datei von Anfang bis Ende wieder.

Wenn Sie ab einem Nicht-Keyframe präzise schneiden und ab dem gewünschten Punkt auf einem Player wiedergeben möchten, der keine Bearbeitungslisten unterstützt, oder sicherstellen möchten, dass der ausgeschnittene Teil nicht tatsächlich in der Ausgabedatei enthalten ist (z. B. Wenn es vertrauliche Informationen enthält, können Sie dies tun, indem Sie es neu codieren, sodass genau zum gewünschten Startzeitpunkt ein Keyframe erstellt wird. Die Neucodierung ist die Standardeinstellung, wenn Sie copy nicht angeben. Zum Beispiel:

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

Bei der Neucodierung möchten Sie möglicherweise auch zusätzliche qualitätsbezogene Optionen oder einen bestimmten AAC-Encoder einbeziehen. Weitere Informationen finden Sie unter ffmpegs x264-Codierungshandbuch für Video und AAC-Codierungshandbuch für Audio.

Außerdem gibt die Option -t eine Dauer und keine Endzeit an. Der obige Befehl codiert 8s Video ab 3s. Um um 3s zu beginnen und um 8s zu enden, verwenden Sie -t 5. Wenn Sie eine aktuelle Version von ffmpeg verwenden, können Sie -t auch durch -to im obigen Befehl ersetzen, um zum angegebenen Zeitpunkt zu enden.

481
mark4o

Versuchen Sie dies. Es ist der schnellste und beste Weg, wie ich es herausgefunden habe:

 ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4

Dieser Befehl schneidet Ihr Video in Sekunden!

Ich habe es in meinem Blog erklärt hier :

- i: Dies gibt die Eingabedatei an. In diesem Fall ist es (input.mp4).
- ss: Wird mit -i verwendet, sucht dieses in der Eingabedatei (input.mp4) nach Position.
00:01:00: Dies ist die Zeit, mit der Ihr zugeschnittenes Video beginnt.
- bis: Dies gibt die Dauer vom Start (00:01:40) bis zum Ende (00:02:12) an.
00:02:00: Dies ist die Zeit, mit der Ihr zugeschnittenes Video endet.
- c copy: Dies ist eine Option zum Zuschneiden per Stream-Kopie. (NB: Sehr schnell)

Das Zeitformat ist: hh: mm: ss

Bitte beachten Sie, dass die derzeitige hochgelobte Antwort veraltet ist und der Zuschnitt extrem langsam sein würde. Weitere Informationen finden Sie in diesem offiziellen ffmpeg Artikel .

293
George Chalhoub
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

Verwenden Sie - c copy, um sofort einzuspielen. In diesem Fall kodiert ffmpeg das Video nicht neu, sondern schneidet es nur auf die entsprechende Größe.

77
Vlad Hudnitsky
    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

Lasse alles außer der 3. bis zur 8. Sekunde fallen.

26
JFMD

Geben Sie die Endzeit als Eingabeoption und die Startzeit als Ausgabeoption an.

ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg

Dies ergibt einen 15 Sekunden langen Schnitt von 0:45 bis 1:00.

Dies liegt daran, dass, wenn -ss als Ausgabeoption angegeben wird, die verworfene Zeit weiterhin in der Gesamtzeit enthalten ist, die von der Eingabe gelesen wird, die -t verwendet, um zu wissen, wann zu stoppen ist. Wenn -ss als Eingabeoption angegeben wird, wird die Startzeit gesucht und nicht gezählt , woher die Verwirrung kommt.

Es ist langsamer als das Suchen, da das ausgelassene Segment noch verarbeitet wird, bevor es verworfen wird, aber dies ist meines Wissens die einzige Möglichkeit, dies zu tun. Wenn Sie tief aus einer großen Datei herausschneiden, ist es klüger, nur zu rechnen und -ss für die Eingabe zu verwenden.

15
Ryan Yoosefi