Wie funktioniert de-/encodierung und wozu?

Crazy|Kay

Lt. Junior Grade
Registriert
Okt. 2007
Beiträge
318
Hallo liebe Computerbase'ler !

Seit einigen Tagen befasse ich mich mit dem Thema GPGPU und folglich bin ich auf die Sparte der Video De- und Encodierung gekommen, welche mich doch recht gepackt hat und ich mich gerne weiter darüber informieren würde wie dies funktioniert.
Leider gibt es zu dem Thema kaum Fachliteratur und muss mich jetzt an die Profis vom Forum wenden :p

Ich weiß schonmal, dass Daten, in diesem Fall hier Videos, encodiert(?) werden, da das sonstige raw-Material sonst schlichtweg zu groß wäre. Beim abspielen von eben einer encodierten(?) Datei muss diese decodiert(?) werden (Hier die Frage: Wozu? oder muss sie gar nicht decodiert werden?)

Weiterhin bin ich mir auch teils schon sicher wie dieser Prozess stattfindet, bezüglich der Kompression, Encodierung, von Videos. (Nicht jedes Frame speichern sondern nur die Änderung, "motion compensation")

Jetzt meine Fragen:

  1. Wozu gibt es Codecs? Sind die einen einfach Verlustfreier, also weniger Komprimiert(Encodiert) als andere, sodass einfach der Unterschied der Codecs in ihrer Kompression(Encodierung) liegt?
  2. Ist es möglich ein Video, welches schon mit Verlusten encodiert wurde, zurück zu encodieren, sodass es wieder verlustfrei ist? Ich denke mal nicht, oder?
  3. Verwenden verschiedene Codecs verschiedene Encodierungen? Oder ist es einfach die Toleranz, die zunimmt und das Bild dann schlechter macht?

Vorerst war es das mit meinen Fragen. Falls jedoch jemand Fachliteratur, sei es im Internet oder als Buch kennt kann er mir diese gerne nennen, ob Englisch oder Deutsch spielt da keine Rolle :)

Schönen Tag wünsch ich noch
 
Zuletzt bearbeitet:
1. Codec bedeuete COding und DECoding. Sie codieren und decodieren das Material.
Der Unterschied zwischen den Codecs liegt in den Algorithmen die verwendet werden, also den Methoden, sowie den Zielen die erreicht werden sollen.
Soll die Zieldatei möglichst klein sein? Soll es möglichst gut zu streamen sein? Soll das Zielmaterial eine möglichst gute Qualität haben?

2. Wenn etwas Verluste erleidet, dann permanent. Codecs sind aber in der Lage die Verluste teilweise durch Berechnungen zu kompensieren. Wenn man keine Verluste möchte, gibt es auch verlustfreie Codecs, die im Prinzip wie ZIP oder RAR arbeiten.

3. Die Toleranz wird innerhalb des Codecs definiert. Eigentlich definiert jeder Codec eine eigene En- und Decodierung, aber es gibt durchaus mehrere Softwareprodukte die ein und das selbe Zielformat erzeugen (DIVX z.B.)

Man muß bei Computerdateien immer zwischen Codec und Container untescheiden. Das MPEG4-Format (Codec) kann z.B. in AVI-Dateien, MKV-Dateien oder MP4-Dateien verwendet werden. MKV.AVI und MP4 sind dabei die Container, die die verschiedenen Datenströme (Video, Audio, Untertitel, usw.) zusammenfassen und in einer Datei vereinigen. Die Codecs kodieren die Video- und Audiospuren). So kann z.B. ein Video in MPEG-2 kodiert werden, der dazu passende Audiotrack in MP2 und beide zusammen in einer MKV-Datei zusammengefasst werden.
Das Zusammenfassen der Datenströme in einer Datei nennt man muxen. Das Aufsplitten von Video- Audio, usw. nennt man demuxen.

Zum Thema GPGPU oder auch grafikkartengestützte Videocodierung kann man sagen, dass es im Prinzip genau das gleiche ist wie die Codierung von Videomaterial durch die CPU. Nur dass die Grafikkarte aufgrund ihrer programmierbaren Shader und der guten Parallelisierbarkeit von Videocodierung besser geeignet ist.
Jeder Shader kann dabei quasi als CPU-Kern anngesehen werden. Wir der Shader nun für die Videocodierung programmiert, tut er eben genau das. Wenn die Karte z.b. 448 Shader hat, könnte man den Prozess theoretisch auf 448 Kerne parallelisieren. Eine 4- oder 8-Kern CPU hat da dann keine Chance mehr.
 
Zuletzt bearbeitet:
Ich versuchs mal :)

1.) Codec ist ein Kunstwort aus compress und decompress. In der Tat ist es so, dass es nötig ist, ein Video zu komprimieren, einfach um den ungeheuren Speicherbedarf von unkomprimiertem Videomateraile (Footage) zu minimieren. Während das Videomaterial komprimiert wird (= compress, encode), muss es aber auch wieder dekodiert werden, damit es wiedergegeben werden kann (=decompress).

Natürlich könnte man Videos auch einfach unkomprimiert nutzen, aber dann lädt ein YOuTube Video selbst bei einer 100 Mbit-Leitung so schnell wie ein HD-Video bei ner ISDN-Verbindung.

Stelle es dir so vor, dass während dem Abspielen quasi live "entzippt" wird, was vorher per Videosoftware "gezipped" wurde.

Übrigens: Wirklich unkomprimiertes Material, etwa von RED-Kameras für Kinofilme, hat eine Bitrate von etwa 300 Mbit/s - gegenüber meiner Videokamera mit 28 Mbit/s :)

Eine Stunde Video einer RED-Kamera ist also eben mal 131 GB voll.
Eine Stunde Video einer AVCHD-Kamera ist nur ca. 12 GB groß.



2.) Nein, das ist es nicht. Komprimieren bedeutet immer Verlust von Informationen. Wobei das je nach Einstellung Informationen sind, die nicht bzw. kaum auffallen.

So wirst du keinen Unterschied zwischen einem HD Video mit 12 Mbit/s und einem mit 13 Mbit/s sehen.

Wohl siehst du einen zwischen 1 Mbit/s und 20 Mbit/s.

1Mbit/s komprimiert viel Stärker, deswegen gehen mehr feine Details verloren (Bewegungsartefakte)
20Mbit hat mehr "Speicher" für Details, bildet also mehr ab.



3.) Verschiedene Codecs sind unterschiedlich effizient, das meinst du vermutlich.

Ein (nahezu) unkomprimiertes DV-AVI von einer Bandkamera hat pro Stunde etwa 13 GB.
Das komplett geschnittene Video für DVD hätte eine größe im MPG2-Format von etwa 3,6 GB (3600 Sekunden à 8 Mbit)

Qualitativ sieht man da kaum einen Unterscheid.
Wenn man das Video unkomprimiert speichern würde, würde auf ne DVD nur etwa 30 Minunten draufpassen, was einfach zu wenig ist.

Dasselbe Video von DV-AVI 13 GB sähe aber mit dem MPG4/AVC-Codec bei einer Bitrate von etwa 3 Mbit genauso gut aus.

Warum? Ganz einfach: Der AVC-Codec ist bei GLEICHER Bildqualität etwa um den Faktor 3 effizienter als der MPG2-Codec.

Sprich: Ein AVC-Video mit 2 Mbit/s sieht etwa so gut aus wie ein Video, das mit MPG-2 mit 6 Mbit/s gerendert wurde.

Codecs sind also unterschiedlich effizient.
Eine Höhere Effizienz eines Codecs resultiert aber idR. auch in höherem Rechenaufwand.

Rendere ich etwas in AVC, braucht mein PC um einiges länger als bei MPG2, weil er da einfach "sauberer" arbeiten muss. Dafür spar ich aber auch ne Menge Speicherplatz :).

So, wie Mitarbeiter unterschiedlich effizient sind am PC. Der eine kommt mit Outlook halt gar nicht klar und braucht für 10 Mails 30mins, der andere schafft 10 mails in 10 Minuten, er ist also effizienter.

Hoffe, konnte dir helfen!
 
Zuletzt bearbeitet:
1. Das könnte ich nicht besser ausdrücken: http://de.wikipedia.org/wiki/Codec

2. Nein, weg ist weg. Man kann durch raffinierte Verfahren den Eindruck erwecken, dass Schärfe oder Sättigung zurückgewonnen werden, jedoch sind verlorene Informationen nicht wieder hervorzauberbar.

3. Es gibt viel mehr Ansätze als das von dir angesprochene Verfahren der differentiellen Bildanalyse (alleine hier gibt es verschiedene Ansätze). Da spielt zum Beispiel die psychologische Komponente eine Rolle: Trotz welcher Verschlechterungen empfinden wir das Bild trotzdem als genauso gut oder gar besser?

Ich bin selber kein Experte, habe nur einmal ein Modul der Nachrichtenübertragung an der Universität belegt, das sich mit den Grundlagen beschäftigt hat.

Ich weiß nicht, wo du jetzt vom Wissensstand herkommst und was du genau wissen willst. Wenn es dir nur darum geht, Videos zu encodieren, dann ist diese Seite ganz gut:

Brother John's Encodingwissen

Falls du dich näher mit der Theorie dahinter beschäftigen möchtest, dann musst du bei den Grundlagen anfangen:

Analysis (besonders Laplace, Fouriertransformation)
Signale und Systeme
 
Ihr seid echt super! So schnell hätte ich mir keine Antwort erahnen lassen :D - vielen lieben Dank! :)

Aber irgendwie einen schlauen Link oder so etwas in der Art habt ihr nicht zufällig, wo ich mich nochmal in Ruhe einlesen könnte? :)

Tante Edith sagt: Danke dir, nukular8400, werde mich wohl doch tiefer reinlesen müssen als gedacht :p
 
Mit erste Anlaufstelle: http://encodingwissen.de/

@ makiyt: Passt alles im Prinzip, aber zu 2.: Es gibt eine Unterscheidung zwischen verlustbehafteter (lossy) und verlustfreier (lossless) Kompression. Wäre ja zu schön, wenn jede Kompression verlustbehaftet arbeitet. ;) 7z und RAR könnte man somit vergessen. Ist bei Videos natürlich weniger der Fall (x264 hat eine Option für lossless Encoding, auch der Fraps Codec arbeitet bspw. lossless), es besitzt mehr Relevanz im Audiobereich (FLAC, WavPack, APE, ALAC, ...) oder halt bei der Dateikompression (7zip, rar, zip, gzip, bzip, ...). Es für allgemeingültig erklären kann man es aber bei Weitem nicht.
 
1. Es gibt unterschiedliche konzeptionelle Ansätze, wie man ein Bild codiert und es gibt unterschiedliche Qualitäten bei der Umsetzung (dem Programmcode).
Es kann durchaus sein, dass ein super konzeptioneller Ansatz bislang nur schlecht umgesetzt wurde. Umgekehrt kann es sein, dass aus einem durchschnittlichen Ansatz programmtechnisch das beste rausgeholt wurde, da der Codec sehr lange auf dem Markt ist und immer weiter entwickelt wurde.
Beispiel für letzteres ist der MP3-Algorithmus, der im Verhältnis zu AAC nur durchschnittliche Komprimierungsraten erzielt und in sich selbst nicht 5.1 fähig ist. Da er aber über jahrzehnte existiert und z.B. über das LAME-Projekt weiter entwickelt wird, ist er teilweise besser als so mancher billiger AAC-Encoder.

2. Nein

3. siehe 1. es gibt unterschiedliche Ansätze. Manche setzen auf Wavelets, andere orientieren sich am jpeg Bildformat oder Fourier Transformationen, es gab sogar mal einen Ansatz über fraktale Algorithmen.
Das sind erst einmal die verlustbehafteten Daten, die dann nochmal mit "normalen" Komprimierungsalgorithmen ala Zip, ACE, Rar, 7-zip weiter zusammengepackt werden.


Wenn Du des Englischen mächtig bist, empfehle ich Dir das Doom9 Forum, dort posten unter anderem Entwickler des x264 Codecs und andere Leute die sich bei der Codec-Entwicklung auskennen.
Dort wirst Du aber ganz schnell eine Aussage bekommen:
GPGPU-Encoding ist momentan noch was für den Popo!
Man kann zwar schnelle Encoder damit basteln, diese erreichen aber nicht die Komplexität und Qualität der CPU-Encoder.
 
Zuletzt bearbeitet:
Auch ein großer Unterschied zwischen den Codecs ist der Preis. Einige sind quelloffen und kostenlos (z.B. FLAC, VP8, Vorbis), für andere fallen Lizenzgebühren an (z.B. MPEG, also MP3 und DVD, oder x.264 auf BluRays).
 
Yuuri schrieb:
Mit erste Anlaufstelle: http://encodingwissen.de/

@ makiyt: Passt alles im Prinzip, aber zu 2.: Es gibt eine Unterscheidung zwischen verlustbehafteter (lossy) und verlustfreier (lossless) Kompression. Wäre ja zu schön, wenn jede Kompression verlustbehaftet arbeitet. ;) 7z und RAR könnte man somit vergessen. Ist bei Videos natürlich weniger der Fall (x264 hat eine Option für lossless Encoding, auch der Fraps Codec arbeitet bspw. lossless), es besitzt mehr Relevanz im Audiobereich (FLAC, WavPack, APE, ALAC, ...) oder halt bei der Dateikompression (7zip, rar, zip, gzip, bzip, ...). Es für allgemeingültig erklären kann man es aber bei Weitem nicht.

Wollte es nicht zu kompliziet machen, aber du hast natürlich recht :)
 
Zurück
Oben