Sie haben wahrscheinlich keinen Keyframe an der 3-Sekunden-Marke. Da Nicht-Keyframes Unterschiede zu anderen Frames codieren, benötigen sie alle Daten, beginnend mit dem vorherigen Keyframe.
Mit dem mp4-Container ist es möglich, einen Nicht-Keyframe zu schneiden, ohne ihn mithilfe einer Bearbeitungsliste neu zu codieren. Mit anderen Worten, wenn der nächste Keyframe vor 3s bei 0s liegt, wird das Video ab 0s kopiert und der Player mithilfe einer Bearbeitungsliste angewiesen, 3 Sekunden später mit dem Spielen zu beginnen.
Wenn Sie das neueste ffmpeg von git master verwenden, wird dies mithilfe einer Bearbeitungsliste durchgeführt, wenn Sie mit dem von Ihnen angegebenen Befehl aufgerufen werden. 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 spielen immer alle Medien in der Datei von Anfang bis Ende ab.
Wenn Sie genau ab einem Nicht-Keyframe schneiden möchten und es ab dem gewünschten Punkt auf einem Player abspielen möchten, der keine Bearbeitungslisten unterstützt, oder sicherstellen möchten, dass sich der ausgeschnittene Teil nicht tatsächlich in der Ausgabedatei befindet (z. B.) Wenn es vertrauliche Informationen enthält, können Sie dies tun, indem Sie neu codieren, sodass genau zum gewünschten Startzeitpunkt ein Keyframe vorhanden ist. Die Neucodierung ist die Standardeinstellung, wenn Sie nichts angeben copy
. 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 hinzufügen. Weitere Informationen finden Sie im x264-Codierungshandbuch von ffmpeg für Video und im AAC-Codierungshandbuch für Audio.
Außerdem gibt die -t
Option eine Dauer und keine Endzeit an. Der obige Befehl codiert 8 Sekunden Video ab 3 Sekunden. Um bei 3s zu beginnen und bei 8s zu enden, verwenden Sie -t 5
. Wenn Sie eine aktuelle Version von ffmpeg verwenden Sie auch ersetzen können -t
mit -to
in dem obigen Befehl zu Ende zu der angegebenen Zeit.