Was sind MPEG I-, P- und B-Frames?

8

Ich habe kürzlich MPEG-Artikel und -Videos durchgesehen, um zu verstehen, wie es funktioniert. Ich verstehe, was ich, P und B Frames tun, aber ich verstehe nicht, wie die Vorhersage berechnet wird.
Angenommen, ich möchte ein Video von einem Ball aufnehmen, der vom Himmel auf den Boden fällt und dann ein paar Mal abprallt, bevor er schließlich zum Stillstand kommt.
Auch mit dem Konzept des 16x16-Makroblocks bin ich nicht klar. Bitte sag mir:

  • wie die Vorhersage berechnet wird
  • Was ist Makroblock und wie hilft es bei der MPEG-Codierung?

  • Meine Referenzen:
  • MPEG-Vorhersage
  • Video zur MPEG-Konvertierung
  • Fasih Khatib
    quelle

    Antworten:

    14

    Kurze Antwort :
    Blöcke sind Einheiten für den Vergleich zwischen Frames.
    Die Vorhersage basiert auf der Anzahl der Blöcke, die sowohl auf vorherigen als auch auf folgenden Bildern angezeigt werden.

    Längere Antwort :
    Als Eingabe empfängt ein Video-Encoder nur eine Folge von Frames .
    In den meisten Fällen sind die benachbarten Rahmen einander sehr ähnlich , und der Codierer versucht herauszufinden, ob diese Rahmen tatsächlich ähnlich sind.

    Wie sagt man, wenn zwei Bilder ähnlich sind?

    • Beide Bilder sind in Makroblöcke aufgeteilt (Sie können nicht ganze Bilder vergleichen, sie unterscheiden sich sicherlich!)
    • Der Algorithmus versucht herauszufinden, ob auf dem folgenden Bild ein Block aus dem vorherigen Bild vorhanden ist (in einer bestimmten Nähe zu seiner ursprünglichen Position).
    • Wenn bis zu einem bestimmten Schwellenwert die meisten Blöcke auf dem folgenden Bild vorhanden sind, wird das folgende Bild als Differenz zum vorherigen berechnet ( P-frame);
      • Natürlich werden unterschiedliche Blöcke unverändert codiert.
    • Wenn nicht, wird das folgende Bild als zu einer anderen Szene gehörend betrachtet, und es gibt keinen anderen Weg, als es vollständig beizubehalten ( I-frame).

    Schauen Sie sich dieses Bild an, um zu verstehen, wie die Vorhersage funktioniert. Es wird von einem deshakerPlug-In für erstellt VirtualDubund für einen anderen Zweck verwendet (Erkennen von Verwacklungen), scheint jedoch sehr repräsentativ zu sein:

    Deshaker

    Die Pfeile zeigen an, wie sich das aktuelle Bild vom vorherigen unterscheidet.
    Der gesamte Frame ist in Makroblöcke unterteilt (jedoch größer als 16 x 16).
    Die Differenz für jeden Block im Vergleich zum vorherigen Bild ist ein Bewegungsvektor ;
    Wie Sie sehen, folgen die meisten Makroblöcke (weiße Pfeile) dem allgemeinen Muster und können daher codiert werden, indem nur eine Transpositionsmatrix auf einen vorherigen Frame angewendet wird .
    Es gibt jedoch einige Blöcke (rote Pfeile), die nicht dem allgemeinen Muster entsprechen, und daher müssen sie unverändert codiert werden .
    Wenn alles rot ist, gibt es natürlich keine andere Wahl, als den gesamten Frame unverändert zu codieren.

    Bytebuster
    quelle