Überspringen eines Frames, ohne H.264-Video neu zu codieren

1748
jellyjoe

Ich habe ein mp4 / h.264-Video, das nur I-Frames enthält. Ich möchte eines dieser I-Frames überspringen, ohne das gesamte Video neu zu codieren. Ich habe das versucht:

ffmpeg -i "file.mp4" -vf select='not(eq(n\,10))' "out.mp4"

Aber natürlich führt dies tatsächlich zu einer Umcodierung.

Ich würde es vorziehen, wenn die Lösung ffmpeg verwendet, aber jedes Programm, das unter Linux läuft, ist in Ordnung.

Um es klar zu sagen: Das Video enthält keine P- oder B-Bilder.

1

1 Antwort auf die Frage

2
slhck

Wenn Sie einen einzelnen I-Frame entfernen mögen, müssen Sie den Bitstrom zu einem Anhang B Format extrahieren (zB ffmpeg -i input.mp4 -c:v copy -an output.h264, und dann den Bytes finden, die die NAL - Einheit darstellen (n) mit dem Rahmen (s) Sie entfernen möchten. Entfernen diese Bytes bis zum nächsten Startcode, und speichern Sie den Stream.

Sie können das Video auch zusammenfügen, indem Sie die -frames:vOption zum Extrahieren der ersten n Frames verwenden:

ffmpeg -i input.h264 -c: v kopiert -frames: v n output.h264 

Anschließend können Sie mit dem -ssParameter zu der Position wechseln, an der Sie erneut beginnen möchten, und von dort auf dieselbe Weise ausschneiden. Sie können die Position ermitteln, indem Sie die Framerate mit n + 1 multiplizieren .

Es gibt keinen einfacheren Weg, den ich kenne, wenn Sie nicht neu codieren möchten.

Vielleicht war mir meine Frage nicht klar genug. Das Video enthält KEINE P- oder B-Bilder. Gibt es eine "automatische" Möglichkeit, den Rahmen zu entfernen? jellyjoe vor 9 Jahren 0
Ups, entschuldige, ich habe das zu voreilig geschrieben. Ich werde meine Antwort morgen überarbeiten, aber im Wesentlichen nein. Sie können das Video mit der Option -frames: v zusammenfügen und es dann wieder zusammenkleben. slhck vor 9 Jahren 0