Ich habe herumgespielt und ein paar Standbilder in eine Diashow mit h.264 verwandelt, hauptsächlich, um die Komprimierungseffizienz von JPG mit h.264 zu vergleichen. Ich habe einige nützliche Antworten über die technischen Auswirkungen von x264-Entwicklern auf doom9 erhalten. Erzwingen Sie beispielsweise, dass x264 keine B-Frames verwendet, da für nicht sehr verwandte Bilder viele I-Makroblöcke erforderlich sind und das Codieren in B-Frames teurer ist.
Das Verhalten von Software-Playern mit Videos mit niedrigen Bildern pro Sekunde war in der Vergangenheit nicht ideal. Ich denke, ein älterer Spieler hat nur nach Tastatureingaben gesucht, wenn er einen Frame angezeigt hat. Es gab also eine Verzögerung zwischen Benutzereingaben und Spielerantworten. mplayer2 und mpv haben dieses Problem nicht. Spieler, die nur nach Keyframes suchen können, suchen in wirklich großen Blöcken (ca. 2 Minuten!), Wenn Sie das Keyframe-Intervall nicht verkürzen. x264 fügt nicht überall IDR (GOP-Grenzen) ein, wenn die Bilder in irgendeiner Beziehung zueinander stehen.
Verwenden Sie x264 -tune stillimage
. Es kurbelt die psy - Optimierungen auf , weil die zeitliche Stabilität kein Problem für diesen Anwendungsfall ist. Weitere Suchergebnisse: von Google .
Ich würde anderen Vorschlägen zustimmen, einige doppelte Frames zu haben, um die FPS auf mindestens 5 oder so zu bringen, nur für den Fall von schlechten Spielern. Smartphones / Tablets sollten jedoch keine Probleme bei der Wiedergabe von Videos mit variablem FPS haben, da sie normalerweise so aufnehmen, wenn die Lichtverhältnisse sinken. Da es jetzt Videos mit variablen FPS von Telefonen gibt, sollte mit der Unterstützung von Hardware-Playern für diese Videos gerechnet werden. Ich würde keine Probleme erwarten , aber ich wäre auch nicht überrascht, wenn es zumindest einige alte Hardware-Player gäbe, die nicht gut damit umgehen.
Ein Frame aller "Überspringen" -Makroblöcke benötigt bei 1080p IIRC nur etwa 20 Byte. Ein Grund, warum ich doppelte Frames nicht mag, ist, dass es die Einzelschritte stört, die Bilder manuell durchzugehen.
Das Duplizieren von Frames hat jedoch einen Nachteil bei der Komprimierung : Wenn zwischen den verschiedenen Bildern viel Redundanz besteht (dh es handelt sich immer noch um ein Video, nicht um eine Diashow), wird das Auffüllen mit identischen Bildern für den Encoder schwieriger, dies zu finden und auszunutzen.
Abhängig von den Codierungseinstellungen behält der Encoder nur einige alte Frames als mögliche Referenzen für neue Frames bei und kann nur innerhalb einer GOP suchen (z. B. standardmäßig 250 Frames für x264). Wenn alle diese Kandidaten dasselbe Bild sind, gibt es nicht mehrere Optionen, um eine bessere Referenz für jeden Block zu finden.
Beispiel: Nachdem sich ein Vordergrundobjekt vor einem Hintergrunddetail bewegt hat, kann der Encoder Bits speichern, indem er darauf verweist, wie es in einem älteren Frame aussah, bevor es verdeckt wurde. h.264 kann Referenzrahmen pro Block auswählen. Dies ist ein relativ kleiner Effekt; Gute h.264-Encoder sind mit nur 1 Referenzrahmen in Ordnung, aber es ist immer noch etwas schädlich für die Komprimierungseffizienz und eine Verschwendung von Leistung / Akkulaufzeit / CPU-Zeit auf der Dekomprimierungsseite, um Speicher um das Decodieren und Anzeigen zusätzlicher Frames zu kopieren.
Durch das Wiederherstellen von VFR nach einem NLE werden alle Ihre Clips auf eine hohe Bildrate gebracht:
FFmpeg hat einen mpdecimate
Filter, der ähnliche Frames löscht. Sie können festlegen, wie viele Frames in einer Zeile gelöscht werden dürfen. Bei einer engen Ähnlichkeitsschwelle sollten Sie dafür sorgen, dass nur tatsächliche Duplikate gelöscht werden.
zB ffmpeg -i input.mp4 -vf mpdecimate=max=9:hi=400 -c:a copy -c:v libx264 -preset veryslow -tune film output_vfr.mkv
Tropfen in einer Reihe bis 9 Frames auf, und nur dann , wenn die am meisten andere Block war anders unter „400“ ist , und (Defaults): nicht mehr als 33% der Blöcke waren verschieden von „320“ -Einheiten. IIRC, es ist im Grunde ein 8x8 SAD auf Pixelkomponenten.
(FFmpeg standardmäßig CFR für .mp4
Ausgänge, obwohl, so Verwendung -vsync 2
für variable Bildrate .mp4
ausgegeben ich. Denke , das ist sicher: Probleme mit Framerate auf Video - Konvertierung mit libx264 mit ffmpeg )