termin-2: restructure video compression into 3 numbered slides

- add "was ist ein digitales bild?" intro slide with context
- split compression into: spatial, temporal, motion compensation
- add i/p/b frame abbreviation explanations in speaker notes
- add terminology notes (intra/inter vs spatial/temporal)
- update motion compensation with 16x16 pixel block example
This commit is contained in:
2026-01-16 02:09:38 +01:00
parent 4fa64a6abd
commit 31790930de
4 changed files with 143 additions and 92 deletions

View File

@@ -138,13 +138,11 @@ Rechts: Stark komprimiert (JPEG-Artefakte sichtbar)
# Was ist ein digitales Bild?
**Rasterbild = Pixelraster**
Ein digitales Bild ist ein Raster aus Farbpunkten (Pixel).
Jeder Pixel speichert einen RGB-Farbwert (3 Bytes).
**Beispiel: Full HD (1920×1080)**
= 2.073.600 Pixel
**Jedes Pixel = 3 Bytes (RGB)**
2.073.600 × 3 = **6,2 MB**
= 2.073.600 Pixel × 3 Bytes = **6,2 MB**
<!--
Zoom auf Pixel-Ebene zeigen.
@@ -167,8 +165,9 @@ Smartphone-Speicher wäre ohne Kompression sofort voll.
**Speicherbedarf (unkomprimiert):**
Breite × Höhe × Farbtiefe (in Bytes)
**Farbtiefe:**
| Bits | Farben | Anwendung |
**Beispiele:** JPEG, PNG, WebP
| Bits (Farbtiefe) | Farben | Anwendung |
|-----:|-------:|-----------|
| 1 | 2 | Schwarz/Weiß (Fax) |
| 8 | 256 | Graustufen, GIF |
@@ -255,7 +254,7 @@ Keine Information geht verloren.
| **Dateigröße** | Abhängig von Auflösung | Abhängig von Komplexität |
| **Formate** | JPEG, PNG, WebP | SVG, PDF, AI |
| **Bearbeitung** | Pixel-basiert | Objekt-basiert |
| **Kompression** | Verlustbehaftet | Verlustfrei |
| **Kompression** | meistens verlustbehaftet | Verlustfrei |
<!--
Die Entscheidung hängt vom Inhalt ab:
@@ -301,6 +300,64 @@ Niedrige Frequenzen = langsame Wechsel = große Flächen
---
<!-- _header: '' -->
<!-- _footer: '' -->
<!--![bg contain 50%](./assets/Asterisk_with_jpg-artefacts.png)-->
![bg contain 50%](./assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg)
---
![bg contain right:34%](./assets/Posterization_example.jpg)
# Grenzen der Kompression: JPEG-Artefakte
**Bei hoher Kompression sichtbar:**
* **Posterization:**
Farbverläufe werden stufig
* **"Blocking":**
8×8-Blöcke werden sichtbar (Block-Grenzen)
* **Ringing:**
"Ghosting" an scharfen Kanten (Gibbssches Phänomen)
<!--
Diese Artefakte entstehen durch die 8×8-Block-Struktur
und aggressive Quantisierung.
Blocking: Benachbarte Blöcke werden unabhängig komprimiert.
Ringing: DCT hat Probleme mit harten Kanten.
Banding: Zu wenig Bits für feine Farbabstufungen.
-->
---
# JPEG-Qualität in der Praxis
| Quality¹ | Typische Größe (12 MP) | Artefakte |
|--------:|----------------------:|-----------|
| 100 | 2-3 MB | Minimal |
| 85-90 | 200-400 KB | Kaum sichtbar |
| 60 | ~100 KB | Bei genauem Hinsehen |
| 30 | ~50 KB | Deutlich sichtbar |
**Sweet Spot: 85-90**
~10× Kompression, für Menschen kaum unterscheidbar.
<small>¹ je nach Programm andere Einstellungen beim Kodieren</small>
<!--
Quality 100 ist nicht "unkomprimiert".
Es ist minimale Lossy-Kompression.
Für Web und Social Media: 60-80 oft ausreichend.
Für Archivierung: 90-100 oder gleich PNG/RAW.
-->
---
# JPEG: Schritt 1 Farbraum
**RGB → YCbCr** (auch 3 Werte pro Pixel, nur anders aufgeteilt)
@@ -327,7 +384,7 @@ Der Clou: Jetzt können wir Helligkeit und Farbe getrennt behandeln.
<!-- _header: '' -->
<!-- _footer: '' -->
![bg contain](./assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png)
![bg contain 70%](./assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png)
---
@@ -458,52 +515,6 @@ Color Banding (Verläufe werden "treppig")
---
# JPEG-Artefakte
**Bei hoher Kompression sichtbar:**
**Blocking:**
8×8-Blöcke werden sichtbar (Block-Grenzen)
**Ringing:**
"Geister" um scharfe Kanten (Gibbs-Phänomen)
**Color Banding:**
Farbverläufe werden stufig
<!--
Diese Artefakte entstehen durch die 8×8-Block-Struktur
und aggressive Quantisierung.
Blocking: Benachbarte Blöcke werden unabhängig komprimiert.
Ringing: DCT hat Probleme mit harten Kanten.
Banding: Zu wenig Bits für feine Farbabstufungen.
-->
---
# JPEG-Qualität in der Praxis
| Quality | Typische Größe (12 MP) | Artefakte |
|--------:|----------------------:|-----------|
| 100 | 2-3 MB | Minimal |
| 85-90 | 200-400 KB | Kaum sichtbar |
| 60 | ~100 KB | Bei genauem Hinsehen |
| 30 | ~50 KB | Deutlich sichtbar |
**Sweet Spot: 85-90**
~10× Kompression, für Menschen kaum unterscheidbar.
<!--
Quality 100 ist nicht "unkomprimiert".
Es ist minimale Lossy-Kompression.
Für Web und Social Media: 60-80 oft ausreichend.
Für Archivierung: 90-100 oder gleich PNG/RAW.
-->
---
<!-- _class: lead -->
# Andere Bildformate
@@ -804,70 +815,110 @@ P/B-Frames speichern nur Unterschiede
# Drei Kompressionsprinzipien
**1. Spatial Compression (Intra-Frame)**
Jedes Bild einzeln komprimieren (wie JPEG)
* **1. Spatial Compression (Intra-Frame)**
Jedes Bild einzeln komprimieren (wie JPEG)
**2. Temporal Compression (Inter-Frame)**
Nur Änderungen zwischen Bildern speichern
* **2. Temporal Compression (Inter-Frame)**
Nur Änderungen zwischen Bildern speichern
**3. Motion Compensation**
Bewegung beschreiben statt Pixel kopieren
* **3. Motion Compensation**
Bewegung beschreiben statt Pixel kopieren
<!--
Spatial: Innerhalb eines Bildes (räumlich)
Temporal: Zwischen Bildern (zeitlich)
BEGRIFFE:
- Spatial = Intra-Frame: Kompression innerhalb eines Bildes (2D, wie JPEG)
- Temporal = Inter-Frame: Kompression zwischen Bildern (über Zeit)
- Motion Compensation: Technik innerhalb von Inter-Frame
ZUSAMMENHANG:
- I-Frames nutzen nur Intra-Frame/Spatial (jedes Bild für sich)
- P/B-Frames nutzen Inter-Frame/Temporal + Motion Compensation
Video hat massive zeitliche Redundanz.
90% eines Frames ist oft identisch mit dem vorherigen.
QUELLEN:
- O'Reilly "Web Design in a Nutshell" Ch. 34.2.2: https://www.oreilly.com/library/view/web-design-in/0596009879/ch34s02s02.html
- ScienceDirect "Temporal Compression": https://www.sciencedirect.com/topics/computer-science/temporal-compression
-->
---
# I-Frames, P-Frames, B-Frames
# 1. Spatial Compression (Intra-Frame)
**I-Frame (Intra):**
Vollständiges Bild, unabhängig komprimiert
Groß, aber Ankerpunkt für Navigation
**Jedes Bild einzeln komprimieren wie JPEG**
**P-Frame (Predicted):**
Referenziert vorherige Frames
Speichert nur Unterschiede
Analysiert Redundanz *innerhalb* eines Frames:
- DCT (Frequenzanalyse)
- Quantisierung (Details entfernen)
- Entropie-Coding
**B-Frame (Bi-directional):**
Referenziert vorherige UND zukünftige Frames
Beste Kompression, aber komplexer
**→ I-Frame (Keyframe)**
Vollständiges Bild, unabhängig dekodierbar.
<!--
GOP = Group of Pictures
Typisch: I - B - B - P - B - B - P - B - B - I
I-Frames alle 1-2 Sekunden für Seeking.
I = Intra = innerhalb
Wenn du im Video springst, sucht der Player den nächsten I-Frame.
B-Frames sind am effizientesten, aber erfordern Lookahead.
-->
---
# Motion Compensation
# 2. Temporal Compression (Inter-Frame)
**Idee:** Bewegung beschreiben statt Pixel kopieren.
**Nur Änderungen zwischen Bildern speichern**
**Beispiel:**
Frame 1: Ball bei Position (100, 200)
Frame 2: Ball bei Position (120, 200)
| Frame-Typ | Referenziert | Größe |
|-----------|--------------|-------|
| **I-Frame** (Intra) | Keine Referenz (Keyframe) | 100% |
| **P-Frame** (Predicted) | Vorherige Frames | ~30% |
| **B-Frame** (Bi-directional) | Vorherige + zukünftige | ~15% |
**Statt 2 komplette Frames:**
"Ball bewegt sich 20 Pixel nach rechts"
**Enormer Effizienzgewinn bei Video mit Bewegung.**
**GOP (Group of Pictures):** I - B - B - P - B - B - P - B - B - I
<!--
Motion Vectors beschreiben Bewegung von Blöcken.
Der Decoder rekonstruiert das Bild aus Referenz + Bewegung.
ABKÜRZUNGEN:
- I = Intra (innerhalb) vollständiges Bild
- P = Predicted (vorhergesagt) basiert auf vorherigen
- B = Bi-directional (bidirektional) vorherige + zukünftige
Funktioniert gut bei: Kameraschwenks, bewegten Objekten.
Funktioniert schlecht bei: Szenenwechseln, Chaos (Konfetti).
90% eines Frames ist oft identisch mit dem vorherigen.
P/B-Frames sind winzig im Vergleich zu I-Frames.
I-Frames alle 1-2 Sekunden für Seeking.
-->
---
# 3. Motion Compensation
**Bewegung beschreiben statt Pixel kopieren**
**Beispiel:** Ein 16×16 Pixel-Block
Frame 1: Block an Position (100, 200)
Frame 2: Block an Position (120, 200)
**Statt Block zweimal speichern:**
→ Motion Vector: "verschiebe um (+20, 0)"
<!--
Macroblocks: Typisch 16×16 oder 8×8 Pixel.
Motion Vectors beschreiben Verschiebung jedes Blocks.
Funktioniert gut bei: Kameraschwenks, bewegte Objekte.
Funktioniert schlecht bei: Szenenwechsel, Konfetti.
-->
---
<!-- _header: '' -->
<!-- _footer: '' -->
![bg fit](./assets/ipb-compression-canon.jpg)
<!--
Visualisierung: I/P/B-Frame-Abhängigkeiten
I-Frame = Vollbild (Keyframe)
P/B-Frames speichern nur Unterschiede
-->
---