FFMPEG fügt Keyframes ohne erneute Codierung hinzu

9657
Zoltán

Wie kann ich Keyframes für FLV-Dateien hinzufügen, ohne erneut kodieren zu müssen? Ich versuche diesen Befehl zu verwenden, aber ich tue nichts:

ffmpeg -i file.flv -vcodec copy -acodec copy -g 0 -y tmp.flv && yamdi -i tmp.flv -o out.flv 

Das (Quelle und dies) Ergebnis kann mit dem Flash Player nicht korrekt gesucht werden. Ich habe viel flv zu "reparieren".

1

2 Antworten auf die Frage

9
evilsoup

How can I add keyframes for FLV files without reencoding?

You can't.

A keyframe, or I-frame, is a frame that stands on it's own - it doesn't require any frames before or after in order to be decoded. Other frames are P-frames (which require one or more previous frames to be decoded, and base their contents on changes made to the previous frame rather than forming a complete picture in isolation) and B-frames (the same as P-frames, but reference frames both before and after them).

In order to change a P- or B-frame to an I-frame, you need to decode and then re-write the video stream. So you can't add keyframes without re-encoding.

Have a look at the x264 encoding guide on the ffmpeg wiki for some tips on how to get a good-looking encode.

1
Nick van Tilborg

Wenn Sie dies tun -vcodec copy, kopieren Sie den Videocodec vollständig. Dann können keine Parameter das Video beeinflussen, daher wird auch die GOP-Größe nicht erneut analysiert.

Versuchen Sie es einfach mit gopsize, ohne eine Kopie des Videocodecs:

ffmpeg -i file.flv -acodec copy -g 1 -sameq -y tmp.flv

Beachten Sie, dass der -sameqParameter denselben Quantisierer bedeutet. Er sollte nur verwendet werden, wenn Sie mit demselben Codec (wie MPEG-2 bis MPEG-2) decodieren und codieren, wie in Ihrem Fall, wenn Sie den Codec nicht ändern möchten.

it's made a bigger file with wrong quality. :( so there is no way without reencoding? Zoltán vor 11 Jahren 0
Die Datei ist zwar größer, da I-Frames eigentlich JPEG-Bilder sind. Bei den anderen Keyframes handelt es sich um Vorhersagen zur Erzeugung eines Bildes, um die Dateigröße zu verringern. Und nein, Sie MÜSSEN erneut kodieren, wenn Sie die GOP-Größe ändern. Wenn Sie Qualitätsverlust sehen, müssen Sie den Qualitätsfaktor anpassen. Dies ist der einzige Fall, in dem Sie den Parameter `-sameq` verwenden können, da Sie denselben Codec verwenden. Nick van Tilborg vor 11 Jahren 0
Der Grund, warum dieser Befehl schlechte Ergebnisse liefert, liegt an den fatalen Standardeinstellungen von ffmpeg. Wenn Sie `-c: v libx264 -crf 22` oder ähnliches verwenden, erhalten Sie ein anständig aussehendes Bild (siehe die Links in meiner Antwort für weitere Informationen). evilsoup vor 11 Jahren 0
@NickvanTilborg IIRC, neuere Versionen haben `-sameq` explizit deaktiviert, da es als" gleiche Qualität "missverstanden wurde. Wissen Sie, was der Ersatz in neueren Versionen ist? Alvin Wong vor 11 Jahren 0
@AlvinWong Es gibt keinen Ersatz für `-sameq`, da die meisten Leute es missbraucht haben und es nie richtig funktioniert hat. Siehe: [Was ist die Option "sameq" oder "same_quant" in FFmpeg? Bedeutet dies „gleiche Qualität“?] (Http://superuser.com/questions/478549/what-is-the-sameq-or-same-quant-option-in-ffmpeg-does-it-mean-same- Qualität) slhck vor 11 Jahren 0