H.264 Reference Frames verstehen

  • Ersteller Ersteller H264Frage
  • Erstellt am Erstellt am
H

H264Frage

Gast
Moin,

MediaInfo gibt dies aus:

Code:
Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 2 min 40 s
Bit rate                                 : 7 569 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 29.970 (30000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.122
Stream size                              : 145 MiB (97%)
Writing library                          : x264 core 161
Encoding settings                        : cabac=1 / ref=2 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=4 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=15 / keyint_min=1 / scenecut=40 / intra_refresh=0 / rc_lookahead=15 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
Codec configuration box                  : avcC

Folgendes verstehe ich nicht: Oben steht "Format settings: CABAC / 4 Ref Frames", aber unter Encoding settings weiter unten steht "ref=2". Wie kann das sein? Müssten nicht beide Werte identisch sein? Oder hat sich der Encoder über die Einstellung hinweggesetzt? Oder ist MediaInfo verbuggt?

Da auch "bframes=3" angegeben ist: Wie setzt sich die Bildergruppe (GOP) also nun oben zusammen? So etwa?

Code:
IBBBP

Kann ich irgendwo ablesen, wie lang die Bildergruppe ist? Denn sie muss ja irgendwann mit einem I-Frame schließen. Ich habe nur das hier gefunden, aber das hilft mir nicht weiter: https://streaminglearningcenter.com/blogs/open-and-closed-gops-all-you-need-to-know.html .

Danke Euch! 😄
 
Das eine ist die Formatspezifikation und das Andere sind die konkreten Parameter die an den Encoder übergeben wurden, da musste jetzt im manual vom x264 nachschauen was ref=2 bedeutet.

Die GOP ist auch nicht fix soweit ich mich erinnere. Das Format gibt lediglich den worst-case vor. Was der Encoder letzten Endes macht ist in diesem Rahmen seine freie Entscheidung.
 
H264Frage schrieb:
verstehe ich nicht: Oben steht "Format settings: CABAC / 4 Ref Frames", aber unter Encoding settings weiter unten steht "ref=2". Wie kann das sein?
Meine Coding-Zeiten sind schon lang vorbei aber wenn ich mich richtig erinnere, dann ist so:
Das vordefinierte Profil AVC High@L4 sieht bei den CABAC Settings 4 Reference Frames vor.
Da du ja die Reference Frames selbst vor dem Encoden noch ändern kannst steht halt unten der Wert, welcher manuell dann während des Encodes genutzt wurde. In diesem Fall dann halt „nur“ 2 Reference Frames.
 
Das obere ist glaube ich die maximal vorgeschriebene/erlaubte Anzahl durch das Profil und unten das, was tatsächlich beim Endcoder eingestellt wurde.


H264Frage schrieb:
Da auch "bframes=3" angegeben ist: Wie setzt sich die Bildergruppe (GOP) also nun oben zusammen? So etwa?

Code:
IBBBP

Kann ich irgendwo ablesen, wie lang die Bildergruppe ist? Denn sie muss ja irgendwann mit einem I-Frame schließen. Ich habe nur das hier gefunden, aber das hilft mir nicht weiter: https://streaminglearningcenter.com/blogs/open-and-closed-gops-all-you-need-to-know.html .

Das entscheidet der Encoder selbst. Kannst du dir auch mit AVIdemnux anschauen. Da wird zu jedem Frame auch der Typ angezeigt.

Die Länge der Bildgruppe(GOP) definiert sich über "keyint" und "min-keyint". Die Werte sind hier die Anzahl der Frames. Der Standardwert ist --keyint 250 und --min-keyint 25.
Heißt der Encoder ist gezwungen die Größe der GOP zwischen 25 und 250 Frames zu wählen und welche Anzahl die GOP dann hat, entscheidet eben der Encoder selbst. Zum Beispiel wird beim Szenenwechsel ein neues I-Frame gesetzt. Das kann man mit --scenecut 40 beeinflussen "Legt fest, wie stark sich der Bildinhalt von einem Frame zum nächsten ändern muss, damit ein I-Frame eingefügt wird."

Bei --keyint 15 könnte die Bildgruppe so aussehen IBBBPBBBPBBBPBB(I)
 
Zuletzt bearbeitet:
Lieben Dank Euch! 😄

Ich habe mal ein bisschen mit Kdenlive experimentiert, das sind meine Ergebnisse:

Test 1Test 2Test 3Test 4Test 5Test 6Test 7Test 8Referenz
Quality151515154545454523
preset=slowermediumfasterultrafastslowermediumfasterultrafastfaster
Renderzeit1 m 22 s0 m 39 s0 m 29 s0 m 20 s0 m 31 s0 m 20 s0 m 20 s0 m 17 s0 m 28 s
Overall bit rate14.6 Mb/s15.1 Mb/s14.9 Mb/s26.8 Mb/s726 kb/s752 kb/s922 kb/s1 147 kb/s6 756 kb/s
Format profileHigh@L5High@L4High@L4Baseline@L4High@L5High@L4High@L4Baseline@L4High@L4
Format settingsCABAC / 8 Ref FramesCABAC / 4 Ref FramesCABAC / 4 Ref Frames1 Ref Frames / GOP: M=1, N=15CABAC / 8 Ref FramesCABAC / 4 Ref FramesCABAC / 4 Ref Frames1 Ref Frames / GOP: M=1, N=15CABAC / 4 Ref Frames
Writing libraryx264 core 161x264 core 161x264 core 161x264 core 161x264 core 161x264 core 161x264 core 161x264 core 161x264 core 161
Encoding settings (Auszug)ref=8 / bframes=3 / crf=15.0ref=3 / bframes=3 / crf=15.0ref=2 / bframes=3 / crf=15.0ref=1 / bframes=0 / crf=15.0ref=8 / bframes=3 / crf=45.0ref=3 / bframes=3 / crf=45.0ref=2 / bframes=3 / crf=45.0ref=1 / bframes=0 / crf=45.0ref=2 / bframes=3 / crf=23.0

So, wie ich das sehe, entsprechen die Encoding Settings hinsichtlich der Reference Frames und B-Frames in Kdenlive denen, die auch in der x264-Referenz angegeben sind: https://encodingwissen.de/codecs/x264/referenz/#preset-kompressionsvorlage-star .

@motorazrv3 & @wayne_757 & @Angel Of Death : Verstehe ich es also richtig, dass oben unter Format Info / Format Profile / Format Settings einfach nur die maximalen Vorgaben des jeweiligen Profils wiedergegeben werden, aber die tatsächlichen Werte unter "Encoding settings" durch die Presets festgelegt werden? Mein anfängliches Beispiel war mit "preset=faster" codiert worden (die Einstellungen entsprechen der Spalte "Referenz" in meiner Tabelle unten). Wenn ich wissen möchte, wie viele B-Frames und Reference Frames tatsächlich verwendet wurden, darf ich mich also auf die "Encoding settings" verlassen? 🤔 Verstehe ich das richtig?

Ich habe bislang die Standardeinstellungen von Kdenlive (Spalte "Referenz" verwendet) und hatte Sorge, dass mit 4 Reference Frames gerendert wird, weil ich gelesen habe, dass ältere Geräte dann wegen begrenzter Caches Probleme mit dem Decodieren haben könnten. Mein Anliegen ist einfach, dass die Videos möglichst kompatibel mit vielen Geräten sind. Aber wenn der tatsächliche Wert nun 2 und nicht 4 ist, dann sollte das okay sein, denke ich.

Eine letzte Sache noch: Die Standardparameter für x264 in Kdenlive sind "f=mp4 movflags=+faststart vcodec=libx264 crf=%quality g=15 acodec=aac ab=%audiobitrate+'k'". Der Parameter "g" gibt die "group of picture (GOP) size" an. Ist "15" ein normaler Wert? Dieser verändert sich durch die Presets tatsächlich gar nicht. 🤔

So, ich denke, das sollten alle meine Fragen zu dem Thema sein. Ich würde mich riesig über Eure Antworten freuen. Lieben Dank Euch! 😄
 
Zuletzt bearbeitet von einem Moderator: (Reihenfolge in Tabelle korrigiert)
Zur ersten Sache: ja.

Wenn es um Kompatibilität geht überschreitest du am besten Ref 4 und Profil High@L4.1 nicht. (bei 1080p) Bist dann aber auch auf 30FPS limitiert.

Zweite Sache: weiß nicht wie Kdenlive arbeitet. Anhand deines ersten Posts entnehme ich mal, dass g=15 keyint=15 setzt. (also Frames, gibt auch Programme wie OBS, da stellt man Sekunden ein)
Dieser Wert ist sehr klein und mach eigentlich nur bei Streaming Sinn(I-Frames sind immer "Punkte", an denen der Stream überhaupt starten kann) oder wenn das Video später nochmal ohne Reencode geschnitten werden soll. --> kleinere I-Frame Abstände

x264 ist ausgereift und auch die Standardparameter sind sehr ausgewogen. Default ist wie gesagt keyint=250 & min-keyint=25

Finde diese Übersicht ganz hilfreich
https://dev.beandog.org/x264_preset_reference.html
 
Ganz lieben Dank, @Angel Of Death !
  1. Perfekt. Dann merke ich mir einfach: Format Info / Format Profile / Format Settings zeigen die maximalen Vorgaben des jeweiligen Profils, die tatsächlichen Werte sind unter "Encoding settings" zu finden. (Das meintest Du doch mit "Zur ersten Sache: ja."?)
  2. Danke Dir! Meine Videos kommen bei Kdenlive mit 1,920×1,080@29.970 bei rund 8 000 kb/s raus (das entspricht sogar der YouTube-Empfehlung: https://support.google.com/youtube/answer/1722171?hl=de ). Warum das Rendern allerdings im Profil High@L4 passiert und nicht im Profil Main@L4 (was vermutlich noch kompatibler sein dürfte und bis 20 000 kb/s reicht) verstehe ich nicht so ganz. Auch verstehe ich nicht, warum YouTube für den Upload "Zwei aufeinanderfolgende B-Frames" empfiehlt, wenn 3 B-Frames laut Deinem Link (lieben Dank dafür! 😄) in fast allen Profilen Standard sind.
  3. Aller klar, ich verstehe. Sind die kleinen Werte "g=15" und "keyint=15" denn ein Kompatibilitätsproblem für die Ressourcen älterer Geräte oder kann ich die Einstellungen getrost so lassen? Wäre das einzige Manko also höchstens eine größere Datei, wenn die Werte so klein sind?
  4. In Ordnung, danke Dir! ☺
  5. Super Seite, danke für den Tipp! 👍
 
Es wäre voll lieb, wenn jemand noch kurz die Punkte 1 und 3 aus Post #7 bestätigen könnte, dann wäre das Thema für mich abgeschlossen. Lieben Dank Euch! 😄
 
Zurück
Oben