Minimale Arbeitsbildrate für H264-Codec


7

Wenn Sie ein Video aus einzelnen Bilddateien erstellen, während jede Bilddatei etwa eine Sekunde lang sichtbar sein sollte, ist es sinnvoll, ein Video mit einer extrem niedrigen Bildrate wie 1 Bild pro Sekunde zu codieren. Für diese Art von Anwendung wäre jede höhere Bildrate eine Verschwendung von Ressourcen.

Ich frage mich, ob der H264-Codec (oder eine bestimmte Implementierung wie x264) selbst eine Untergrenze für die Bildrate hat, unter der technische Probleme oder Instabilitäten auftreten. Können wir erwarten, dass Videoplayer mit einer so ungewöhnlich niedrigen Bildrate richtig umgehen, falls es kein Problem mit der Codierung gibt?

Vielen Dank für Ihre Erfahrungen!


Antworten:


2

Ich bin bei AJ. Wenn Sie nicht die Eigenschaften jedes Spielers kennen, der dies möglicherweise sieht, ist es unklug, sich auf eine kleine Stichprobe von Testergebnissen zu verlassen. Wenn Sie eine Standard-Bildrate von 24 fps mit einem Keyframe-Intervall von 24 Bildern verwenden, erhalten Sie im Wesentlichen dasselbe ohne Kompromisse bei der Kompatibilität. Die Zwischenrahmen sind minimal klein, da keine zu codierenden Änderungen erkennbar sind.


1
Ja, ein bitidentischer Frame benötigt nur ungefähr 15 Bytes. Alle Makroblöcke = überspringen, und CABAC komprimiert das wiederholte Bitmuster dafür sehr gut.
Peter Cordes

2
Ich würde mir nur Sorgen um Hardware-Player machen, die davon ausgehen, dass sie ein 60- oder 50-Hz-TV-Signal ausgeben. h.264 kümmert sich nicht um das Timing, es sind nur Frames, selbst in einem VFR-Video. Frame-Zeitstempel sind ein Containerproblem. Containerformate sind sehr flexibel. Es ist leicht möglich, ein einzelnes Bild 1 Minute lang anzuzeigen, dann 150 Bilder pro Sekunde für mehrere Bilder, dann ein anderes Bild für eine Weile oder alles, was Sie möchten. Das Speichern von VFR-Videos in mkv, mp4 und einigen anderen modernen Containern ist ein gelöstes Problem.
Peter Cordes

5

Ich bin mir nicht sicher, wie es sich bei sehr niedrigen Bildraten verhalten wird, aber es ist erwähnenswert, dass dies auch Ihre Optionen einschränken würde, wie und wann Sie Bilder ändern könnten, da sie den Taktzyklen folgen müssten. Was in diesem Fall eher funktioniert, ist ein langes Keyframe-Intervall. Die meisten Frames in einer Komprimierung wie H.264 speichern nur die Änderungen gegenüber dem vorherigen Frame. Im Fall eines Standbilds sind die Komprimierungsverhältnisse sehr groß, da zwischen den Bildern nur sehr geringe (keine) Änderungen auftreten. Ich bin mir nicht sicher, ob Sie durch das Verringern der Bildrate wirklich genug Einsparungen erzielen würden, um den Verlust der Kontrolle darüber zu verdienen, wann Sie eine Änderung am Bild vornehmen können.

Am besten probieren Sie es mit Ihren Medien aus und sehen die Ergebnisse. Die Komprimierung hängt stark vom Inhalt ab, und die beste Qualität und Komprimierung für einen bestimmten Clip hängt stark von der Art des Clips ab. Daher ist das Testen immer noch der beste Weg, um ihn zu testen.


Es gibt einen Komprimierungsnachteil, der über meinen früheren Kommentar zu einer anderen Antwort hinausgeht: 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 zu finden und das ausnutzen. 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 das gleiche Bild sind, gibt es nicht mehrere Optionen, um eine bessere Referenz für jeden Block zu finden ...
Peter Cordes

... zB 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
Peter Cordes

Sicher, Sie benötigen immer noch die richtigen Codierungseinstellungen, aber Sie können Ihre GOP-Größe erhöhen, anstatt Ihre Bildrate zu verringern, wenn die Dinge so statisch sind. Wenn dies nicht der Fall ist, ist das Verringern der Bildrate zunächst keine gute Option. Ich frage mich, ob an einem variablen GOP-Format gearbeitet wurde.
AJ Henderson

Ich denke, wiederholte Bilder werden immer noch die Möglichkeit für nützliche B-Pyramiden- und Mehrfachreferenz-P-Frames-Optionen verringern. Aber ich denke, ein Encoder kann einen alten P-Frame von irgendwo innerhalb der GOP fernhalten, so dass der Verlust von Referenz-B-Frames wahrscheinlich alles in der Theorie ist, aber IDK in der Praxis.
Peter Cordes

1
Gute MPEG-2-Encoder können Keyframe-Entscheidungen basierend auf Szenenschnitten und P vs B-Frame-Entscheidungen basierend auf Inhalten treffen. : Der mpeg2videoEncoder von P ffmpeg listet eine -sc_thresholdOption und eine -b_strategyOption zur Steuerung der I / P / B-Auswahlstrategie auf. Trotzdem ist h.265 ordentlich, mit bis zu 32x32 DCT-Blöcken und sehr großen 64x64-Vorhersageeinheiten, die bei Bedarf in kleinere Blöcke zerlegt werden können. sonnati.wordpress.com/2014/06/20/h265-part-i-technical-overview . h.264 16x16-Makroblöcke mit nur 4x4- oder 8x8-DCT-Blöcken (nur mit hohem Profil). Auch forum.doom9.org/showthread.php?t=167081
Peter Cordes

2

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 mpdecimateFilter, 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.mkvTropfen 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 .mp4Ausgänge, obwohl, so Verwendung -vsync 2für variable Bildrate .mp4ausgegeben ich. Denke , das ist sicher: Probleme mit Framerate auf Video - Konvertierung mit libx264 mit ffmpeg )


1

Mit den meisten NLEs können Sie ein Standbild in der Form importieren, wie lange es in der Timeline angezeigt werden soll, vorausgesetzt, Sie haben die Projekteigenschaften auf eine Standard-Bildrate wie 30 fps oder 24 fps usw. eingestellt.

In Vegas Pro kann ich die Zeit einstellen, zu der ein Standbild auf der Timeline angezeigt werden soll, von Sekundenbruchteilen bis zu mehreren Sekunden. Wenn ich dies auf 1 Sekunde einstelle, generiert Vegas beim Ziehen und Ablegen eines Standbilds in der Timeline genügend Frames, um meine Anforderung zu erfüllen. Normalerweise bearbeite ich Videos mit 30 Bildern pro Sekunde. Wenn ich ein Standbild hinzufüge, mische ich eine Zeitleiste mit Videos mit 30 Bildern pro Sekunde, die bereits vorhanden sind (AVCHD 1080p).

Um Ihnen eine spezifische Antwort zu geben, müsste ich wissen, welchen NLE Sie verwenden.


Ich wende nur eine Rohcodierungssoftware wie ffmpegoder an avconv, sodass ich nicht über NLE sprechen muss. Ich denke, die Frage wird ziemlich oft mit "Gehen Sie einfach mit einer Standard-Framerate, mit der alle Spieler richtig umgehen können. Es gibt keine wirkliche" Verschwendung von Ressourcen ", da das Codierungsschema gut genug ist, um Standbilder effizient zu verarbeiten" beantwortet.
Jan-Philip Gehrcke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.