Das Ausschneiden eines Teils einer AVI-Datei ist nicht korrekt, wenn die Ausgabe als AVI-Datei angegeben ist (aber wenn die Ausgabe als MP4-Datei angegeben ist, ist es korrekt).

Das Ausschneiden eines Teils einer AVI-Datei ist nicht korrekt, wenn die Ausgabe als AVI-Datei angegeben ist (aber wenn die Ausgabe als MP4-Datei angegeben ist, ist es korrekt).

Ich versuche, einen Teil auszuschneiden.aviDatei mit dem Befehl

ffmpeg -ss 346 -i input.avi -t 5 -c copy -y output.avi

Die Gesamtlänge des Ausgabevideos beträgt etwa 13 Sekunden, also 8 Sekunden länger als nötig. Wenn die Erweiterung der Ausgabedatei jedoch wie folgt angegeben wird:.mp4, dann ist das Schneiden genau. Ich würde gerne verstehen, warum das passiert.

Jede Hilfe wird geschätzt.

Antwort1

AVI und MP4 sind Container für Datenströme, wobei MP4 weitaus leistungsfähiger ist.

Der MP4-Container ermöglicht Ihnen die Erstellung präziser Schnitte aus einem Quellvideostream an Stellen ohne Keyframes, ohne dass Sie ihn erneut kodieren müssen. Dazu verwenden Sie intern einenListe bearbeiten.

Angenommen, Sie möchten aus Ihrem Quellvideo die Sekunden 346–351 kopieren (und das ist es, was Sie anscheinend tun). Wenn der nächste Keyframe vor 346 bei 338 liegt, kopiert ffmpeg das Video tatsächlich ab 338, verwendet aber die Editierlistenmagie von MP4, um Mediaplayer anzuweisen, die ersten 8 Sekunden zu überspringen.

Die gleiche Logikkönntegilt auch für das Ende eines Schnitts (nicht sicher, müsste getestet werden). Wenn ja, würde die Schnittliste den Mediaplayern auch sagen, dass sie die Wiedergabe früher beenden sollen.

AVI unterstützt im Gegensatz zu MP4 keine Schnittlisten, weshalb Sie beim AVI-Container den vollständigen 13-Sekunden-Schnitt sehen.

Ich hoffe, das ist verständlich. Hinterlassen Sie einen Kommentar, wenn Sie Fragen haben, und ich werde versuchen, diese zu klären.

BearbeitenIch habe ein Diagramm erstellt, um visuell darzustellen, was ffmpeg macht:

Wie ffmpeg Schnitte vornimmt, wenn Sie nicht neu kodieren

verwandte Informationen