PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Genaue Definition von Videoformat - Codec - Videokompression


DerKleineFreak
2008-04-21, 17:37:47
Hey,

ich mache grad ne Präsentation über die o.g. Themen.

Jedoch habe ich bei meiner "Suche" festgestellt, dass dieses Thema um einiges komplizierter ist, als ich dachte.

Als Videoformate werden verschiedene Aufzeichnungsverfahren für Videos bezeichnet.
Beispiel: VHS, DV, HDV

Als Codec bezeichnet man ein Verfahren bzw. Programm, das Daten oder Signale digital kodiert und dekodiert. (Was heißt genau kodieren und dekodieren?)
Beispiel: Xvid, DivX, x264

Mit Hilfe der Videokompression lässt sich - wenn digital gespeichert - der Platzbedarfes einer Videodatei um ein Vielfaches verkleinern.
Beispiel: avi, mov, asf, mp4, wmv, und vor allem: MPEG, H.264

Stimmen die Definitionen? Vor allem die Beispiele?
Ich bin etwas verwirrt, wenn ich einige Definitionen durchlese, dann kommen MPEGs eigentlich bei allen 3 vor. :confused:

san.salvador
2008-04-21, 17:38:32
avi ist kein Format, sondern ein Container. ;)
mp4 IMHO auch.

DerKleineFreak
2008-04-21, 17:40:31
Ok, Container.

Haben also nichts mit Kompression oder sonstwas zu tun?

Container vereinen z.B. eine spezifische Videospur + eine spezifische Audiospur, um allgemein von allen abgespielt werden zu können, da avi von allen Playern aktzeptiert werden.

Oder was ist der Sinn von Container?

san.salvador
2008-04-21, 18:01:22
Besser kann ichs auch nicht wiedergeben. :D

http://de.wikipedia.org/wiki/Containerformat

Gast
2008-04-21, 19:15:42
Stimmen die Definitionen? Vor allem die Beispiele?
nein, das ist zum großteil massiver bullshit, schon vom ansatz her. du solltest komplett anders an die sache herangehen.
z.B. so:
videoformate: pal, ntsc, hdtv (720p, 1080i), usw
codecs: mpeg1, mpeg2, mpeg4-asp (divx, xvid), mpeg4-avc aka h264 (x264), wmv3 aka wmv9, vc-1, usw
container: mpeg-ps, mpeg-ts, vob, avi, mov, mp4, mkv, asf, usw

wegen mpeg: lies das am besten bei wikipedia nach. mpeg ist ein riesiger standard der unter anderem videocodecs, audiocodecs und container spezifiziert.
generell werden aus marketinggründen gerne die bezeichnungen von containern und codecs vermischt. so hat microsoft irgendwann angefangen, wmv videos im asf container einfach bla.wmv zu benennen...

Gast
2008-04-21, 19:18:22
videoformate: pal, ntsc, hdtv (720p, 1080i), usw
als ergänzung:
was hiervon festgelegt wird sind die grundlegenden eingenschaften eines videos, also z.B. Auflösung/Zeilenzahl, Framerate, Interlaced oder Progressive. Das hat alles nichts damit zu tun wie das video abgespeichert oder gar komprimiert wird.

DerKleineFreak
2008-04-21, 19:42:33
Oha.

Danke.

Gibt es dazu ne webside, die besser als das scheiss Wikipedia ist?

Was sind dann eigentlich codecs? Wenn MPEG1-4 gleichzeitig codecs und videokompressionsverfahren sind?
Und wieso gibt es so viele Container? Kann man sich da nicht auf einen beschränken?

Gast
2008-04-21, 20:11:40
Was sind dann eigentlich codecs?
ein encoder ist ein programm, das eine folge von bildern (=ein video) entgegen nimmt, diese verarbeitet und daraus einen datenstrom erzeugt. dabei versucht man üblicherweise den datenstrom so klein wie möglich zu halten, das heißt der encoder ist der ort wo ein video komprimiert wird.

damit das ganze sinnvoll ist braucht man natürlich auch einen decoder, das ist dann ein programm welches aus einem solchen datenstrom wieder eine folge von bildern erzeugt.

encoder und decoder zusammen nennt man dann einen (video-)codec. für den ton (also audio) funktioniert das ganze vergleichbar, nur dass man dort statt bildern mit audiosamples arbeitet.

die bilder die der decoder ausgibt entsprechen übrigens bei den meisten codecs (das sind dann verlustbehaftete codecs) nicht genau den bildern die in den encoder gesteckt wurde, sondern sehen nur "ähnlich" aus. das liegt daran dass beim komprimieren informationen weggelassen werden, von denen man hofft dass dem menschlichen auge der fehler möglichst nicht auffällt.

ein container wird dann benötigt um die datenströme von video und audio zusammenzubringen. außerdem können viele container noch zusätzliche infos wie untertitel oder kapitel speichern, so dass der player beim abspielen darauf zugreifen kann.
warum es so viele gibt? erstens weil die einsatzzwecke teilweise unterschiedlich sind (ein mpeg-transportstream enthält z.B. zusätzliche fehlerkorrekturen) und zweitens natürlich weil jedes unternehmen gerne ihre eigene extrawurst verbreiten will. unter einsatzzwecke fällt auch dass avi für moderne video- und audio-codecs (h264, aac, vorbis) ungeeignet ist.
der kommende standardcontainer für den privatgebrauch wird wohl matroska (mkv), da der praktisch alle video- und audio-codecs, sehr viele untertitelformate, kapitelinfos und in zukunft wahrscheinlich auch menüs unterstützt.

Gast
2008-04-21, 20:14:22
Was sind dann eigentlich codecs?


codec ist ein kunstwort, welches sich aus (en)coder und decoder zusammensetzt.
vereinfacht gesagt bedeutet encodieren das umwandeln der pixel der einzelnen frames in ein standardisiertes format. decoding ist genau das umgekehrte verfahren, aus einem encodierten datenstrom entstehen wieder pixel und frames.


Wenn MPEG1-4 gleichzeitig codecs und videokompressionsverfahren sind?

wenn wir es ganz genau nehmen ist MPEG1-4 mit den ganzen profilen eine anleitung wie ein (komprimierter) videostream auszusehen hat.
die einzelnen codecs sind dann die konkrete implementierung einzelner (oder mehrerer) kompressionsverfahren. deshalb gibt es auch deutlich mehr codecs als kompressionsverfahren.


Und wieso gibt es so viele Container? Kann man sich da nicht auf einen beschränken?

weil sich diese auch weiterentwickeln und man die älteren nicht so einfach aus der welt schaffen kann ;)

DerKleineFreak
2008-04-21, 20:17:32
Wenn man so will, dann ist der Codec eigentlich das wichtigste, also dort geschieht "die" Kompression, oder habe ich das falsch verstanden?

Thx, jetzt wird mir einiges klarer.

san.salvador
2008-04-21, 20:20:37
Ein Codec sagt dem Rechner im Prinzip, wie er Filme zu "Lesen" (=dekodieren) oder zu "Schreiben" (=kodieren) hat.

Man könnte es sich wie ein Wörterbuch mit Grammatik vorstellen.
Wenn der Rechner zb. ein h.264-Video (sagen wir Spanisch) wiedergeben soll, braucht er entsprechenden Codec (ein Spanisch-Wörterbuch).
Mit diesem Codec und einem weiteren, zB. WMV (Russisch), kann er dann h.264 ind wmv umwandeln (aus dem spanischen ins Russische übersetzen).

DerKleineFreak
2008-04-21, 20:24:06
Ja, ok, aber wer "macht" dann die Kompression?

Macht das der Codec?

Gast
2008-04-21, 20:24:24
Wenn man so will, dann ist der Codec eigentlich das wichtigste, also dort geschieht "die" Kompression, oder habe ich das falsch verstanden?


richtig, der codec ist für die kompression und dekompression des eigentlichen videos (bzw. natürlich auch des audiostroms) zuständig

ich würde zwar nicht unbedingt sagen, dass er das wichtigste ist, man braucht immer die komplette kette um ein video wiedergeben zu können, aber er ist auf jeden fall der rechenaufwändigste teil.

DerKleineFreak
2008-04-21, 20:25:51
Was braucht man denn noch?

Außer das Videoformat, den Codec, und den Container?

san.salvador
2008-04-21, 20:27:09
Ja, ok, aber wer "macht" dann die Kompression?

Macht das der Codec?
Die CPU (Du) nimmt die Quelldatei (einen chinesischen Text) zur Hand und komprimiert sie (übersetzt) unter Anleitung des Codecs (Chinesisch - Deutsch - Wörterbuch).

Gast
2008-04-21, 20:27:32
Ja, ok, aber wer "macht" dann die Kompression?

dieses von san.salvador so treffend als wörterbuch stilisierte stück software soll natürlich den videostrom so effizient wie möglich speicher, sprich das video zu komprimieren.

allerdings ist auch die unkomprimierte speicherung, sei es als RGB für bild oder als PCM für ton, eine form der codierung und muss en- und decodiert werden.

DerKleineFreak
2008-04-21, 20:27:45
Ok, gute Erklärung : )

Gast
2008-04-21, 20:31:06
Was braucht man denn noch?

Außer das Videoformat, den Codec, und den Container?

zur wiedergabe braucht es einen splitter, der den container lesen kann und daraus die einzelnen streams (video, audio, untertitel etc.) extrahiert.

diese müssen dann an den jeweiligen decoder (jeweils für video und audio) weitergeleitet werden, der bild bzw. ton decodiert.

anschließend braucht es noch einen videorenderer bzw. audiorenderer um das bild auch anzuzeigen bzw. den ton abzuspielen.

DerKleineFreak
2008-04-21, 20:41:16
Puh...

Also:

Videoformat an Codec an Container an Splitter an Decoder an Renderer an Player?

san.salvador
2008-04-21, 20:44:19
Puh...

Also:

Videoformat an Codec an Container an Splitter an Decoder an Renderer an Player?
Videoformat aus Container durch Codec an Splitter an Decoder an Player an Renderer.

Ich hoffe das kann jemand verifizieren. :)

€dit: Player & Renderer vertauscht, sieht besser aus :D

DerKleineFreak
2008-04-21, 20:47:08
Videoformat aus Container durch Codec?

Dann müsste es den Container ja vor dem Videoformat geben, oder? Macht doch keinen Sinn?

san.salvador
2008-04-21, 20:49:17
Videoformat aus Container durch Codec?

Dann müsste es den Container ja vor dem Videoformat geben, oder? Macht doch keinen Sinn?
Du hast eigentlich recht.
Am Anfang liegt da ein Container. In dem liegt ein Videoformat (Film). ....



€dit: Ich versuchs wieder mit meinem Beispiel. Du bekommst einen Ordner. In dem ist ein chinesisches Textstück. Anhand deines Chinesisch-Deuscth-Wörterbuches.... ;)

DerKleineFreak
2008-04-21, 20:52:07
Ja ok thx, ich habs gerafft... : D

Gast
2008-04-21, 22:27:10
Videoformat an Codec an Container an Splitter an Decoder an Renderer an Player?

nicht ganz, das ganze sieht grafisch so aus:

http://img91.imageshack.us/img91/9356/unbenannt1nf2.th.png (http://img91.imageshack.us/my.php?image=unbenannt1nf2.png)

dabei haben einzelne filter folgenden aufgaben:

FileSource: liest bytes von der festplatte (könnte natürlich auch beispielweise eine DVB-quelle oder ein netz-stream sein). beim output kommen die rohen bytes des videofiles raus.

Splitter: bekommt die bytes aus der Source und trennt daraus (in diesem fall) video und audio heraus (bei komplexeren splitter können zusätzlich beispielsweise noch teletext, untertitel etc rauskommen) und schickt die streams an die jeweiligen ausgänge.

Videodecoder: bekommt den videostrom aus dem splitter und decodiert diesen. beim video-out kommen nun die eigentlichen bilder des films raus.

Audiodecoder: das selbe, nur mit dem ton.

Videorenderer: macht unter umständen farbraumkonvertierungen, diverse postprocessing-maßnahmen (deinterlacing, denoise, sharpening etc.) und skaliert das video auf die gewünschte ausgabegröße

Audiorenderer: gibt die audiodaten wieder, unter umständen auch irgendwelche filter wie upmixing etc.

ein mediaplayer macht nun nichts anderes als so einen filtergraphen zusammenzubauen. dabei können sowohl im system installierte filter, als auch eigene verwendet werden.


die aufgaben der einzelnen filter können sich unter umständen auch etwas überschneiden. beispielsweise kann der decoder auch selbst schon postprocessing durchführen, bevor er das ergebnis an den renderer weitergibt (wie beispielsweise mit ffdshow möglich).

es ist auch möglich noch weitere filter dazwischenzuschalten, beispielsweise einen zwischen decoder und renderer, der rein für das postprocessing zuständig ist. auch dafür kann man beispielsweise ffdshow benutzen. dann übernimmt beispielsweise der cyberlink-decoder das decoding und ffdshow das postprocessing.

man könnte den ganzen graphen auch noch um einiges weiterspinnen. beispielsweise aus dem decoderoutput nicht in einen renderer zu fahren sondern in einen encoder, von diesem in einen muxer (das gegenteil vom splitter, dieser führt diverse datenströme zusammen) und davon wieder in einen FileWriter.
genau das passiert beim transcodieren eines videos.

DerKleineFreak
2008-04-22, 18:21:34
Was heißt eigentlich genau

komprimieren / dekompromieren

und

decodieren / codieren?




Hießt das in Salvadors Schreibweise mit dem Wörterbuch:

Komprimieren & Dekomprimieren = Übersetzen & Aufschreiben = Umwandeln und Speichern???

Gast
2008-04-22, 19:33:32
komprimieren / dekompromieren

und

decodieren / codieren?



eine codierung ist einfach ein standard der sagt wie bestimmte informationen aussehen.
unsere sprache ist beispielsweise eine form der codierung. ich sitze hier, denke mir was ich dir mitteilen will und formuliere damit wörter und sätze, welche mit buchstaben codiert sind und dir schlussendlich grafisch repräsentiert werden. eine andere möglichkeit unsere sprache zu codieren wären laute.
du siehst diese buchstaben, erkennst darin wörter und sätze und schlussendlich hoffentlich möglichst genau die information die ich dir mitteilen wollte (was bei natürlicher sprache garnicht so einfach ist, da diese mehrdeutig ist ;) ), was eine art von decodierung darstellt.

damit kann man unsere sprache im prinzip als eine art verlustbehaftete codierung beschreiben. diese codierung eignet sich für verschiedene arten von informationen unterschiedlich gut. ich kann dir beispielsweise mitteilen, dass es bei mir im raum 23,4°C hat und die uhr momentan 19:27 anzeigt. diese informationen kannst du im prinzip ohne verluste wiederherstellen, wenn du weist was die uhrzeit und was temperatur bedeutet.
schwieriger wird es wenn ich dir beschreiben versuche was ich sehe wenn ich aus dem fenster blicke. wenn ich das versuche wird in deinem hirn ein bild erscheinen, wie nahe das aber an dem ist was ich gesehen habe ist fraglich. ich könnte dir natürlich versuchen jede einzelheit von dem was ich sehe zu beschreiben, damit bräuchte ich aber extrem viele wörter (=daten) und der erfolg wird trotzdem recht gering sein ;)

komprimierung ist im prinzip eine spezielle form der codierung, bei der versucht wird die zu übertragenden daten für eine bestimmte information möglichst gering zu halten.

DerKleineFreak
2008-04-22, 19:38:54
Ok, also ist die Komprimierung nichts anderes als eine Codierung, nur das hier versucht wird, noch die "Datei" so zu umwandeln, dass man es klein hat?!

Also ist es im Prinzip nichts anderes, weil es ja es gleiche mehr oder weniger macht!

EDIT/

Wer decodiert eigentlich?

Kla, der codec codiert / komprimiert diese Videoquelldatei, um sie kleiner zu machen, aber dann müsste ja der Player vor dem STart das File decomprimieren oder? Oder für was braucht man das?

Gast
2008-04-22, 20:37:05
Wer decodiert eigentlich?

na der decoder.

DerKleineFreak
2008-04-22, 20:38:03
Irgendwie verstehe ich die Reihenfolge nicht so ganz, was jetzt die einzelnen Abschnitte genau machen und was sie miteinander zu tun haben.

Videoformat an Codec an Container an Splitter an Decoder an Renderer an Player

Videoformat - Kla
Codec - Kla, aber es wird hier immer von Programmen gesprochen? Wieso folgt der Decoder nach dem Splitter? Was macht der Splitter überhaupt?

Und wie kommt dann der Renderer zum Spiel?

Gast
2008-04-22, 20:51:34
Videoformat an Codec an Container an Splitter an Decoder an Renderer an Player

hast du dir das bild angesehen? wenn ja nochmal genau ansehen.

der player macht im prinzip garnichts, außer die filter miteinander zu verbinden und ein paar grafische spielereien.


Videoformat - Kla
Codec - Kla, aber es wird hier immer von Programmen gesprochen? Wieso folgt der Decoder nach dem Splitter? Was macht der Splitter überhaupt?


der splitter bekommt byte für byte aus dem container und extrahiert daraus den videostream und audiostream. (und eventuell noch mehr streams, je nachdem was im containerformat alles enthalten ist)
Splitter und FileReader können unter umständen auch in einem filter stecken.

DerKleineFreak
2008-04-22, 21:06:00
Wer und wann codiert und decodiert dann die rohe Videoquelle? Welches Programm?

Ok Splitter ist kla, was der macht, aber wieso kommt der vor dem Decoder? Oder bekommt der Splitter die (en)codierten Videodaten und durch den Splitter werden die Videodaten dekodiert und an den Renderer geschickt?

EDIT/

Was meinst du mit Filter?
der player macht im prinzip garnichts, außer die filter miteinander zu verbinden und ein paar grafische spielereien.

Morpog
2008-04-22, 21:12:49
Der Gast in Beitrag #24 hat doch schon alles perfekt erklärt. Sogar mit einem Bild aus Graphedit. Perfekter geht es nicht. Bitte lies nochmal.

DerKleineFreak
2008-04-22, 21:18:29
Splitter: bekommt die bytes aus der Source und trennt daraus (in diesem fall) video und audio heraus (bei komplexeren splitter können zusätzlich beispielsweise noch teletext, untertitel etc rauskommen) und schickt die streams an die jeweiligen ausgänge.

Mit Ausgängen sind hier die Lautsprecher zb gemeint?

PS: Ja, ich würde ja nicht fragen, wenn ich es verstehen würde?

Morpog
2008-04-22, 21:26:53
Splitter: bekommt die bytes aus der Source und trennt daraus (in diesem fall) video und audio heraus (bei komplexeren splitter können zusätzlich beispielsweise noch teletext, untertitel etc rauskommen) und schickt die streams an die jeweiligen ausgänge.


Nein, mit Ausgänge sind die output pins gemeint, siehe das Bild.
Vom splitter output pin verbindet der player dann zum decoder input pin. Einmal für audio und einmal für audio und eventuell noch für untertitel, etc.

DerKleineFreak
2008-04-22, 21:32:02
Puh, alles kla. Verstanden.

Gibt der Videorenderer dann auch das Bild schließlich raus, wie das der Audorenderer macht?

Und was mir jetzt noch fehlt ist der Player, der fehlt in der Grafik. Ist der Player nur dazu da, um File Source zum Renderer zu gelangen, oder kommt der erst nach dem Renderer zum Einsatz?

Gast
2008-04-22, 22:11:48
Ok Splitter ist kla, was der macht, aber wieso kommt der vor dem Decoder? Oder bekommt der Splitter die (en)codierten Videodaten und durch den Splitter werden die Videodaten dekodiert und an den Renderer geschickt?


in den splitter läuft alles was im medienstream vorhanden ist.
an den ausgängen kommen dann die (encodierten) video und audiodaten heraus.


Was meinst du mit Filter?

jede der boxen im bild von graphedit (also renderer, decoder, splitter etc) bezeichnet man als filter, die gesamte kette als filtergraph.

Gibt der Videorenderer dann auch das Bild schließlich raus, wie das der Audorenderer macht?

ja, dieser zeichnet das video auf den bildschirm.

Und was mir jetzt noch fehlt ist der Player, der fehlt in der Grafik.

mit der eigentlichen videowiedergabe hat der player nicht wirklich was zu tun. dieser ist ein reiner verwalter der den filtergraphen zusammenbaut (was ich hier mit graphedit händisch erledigt habe) und den einzelnen filtern zusätzlich noch ein paar parameter mitgibt (beispielsweise wo am bildschirm und wie groß das video gerendert wird, mit welchem seitenverhältnis etc.)

DerKleineFreak
2008-04-22, 22:44:14
Ok, ist jetzt alles kla.

Vielen Dank euch allen.

Nur noch eine Frage:

Wer decodiert eigentlich? Also welches Programm? Wie wird der Filter bearbeitet macht das der Player?

Gast
2008-04-22, 23:10:45
Wer decodiert eigentlich?

der decoder, das ist eine .dll die im system liegt.

DerKleineFreak
2008-04-23, 09:46:29
Und codieren / komprimieren tut ein Programm?

Gast
2008-04-23, 10:30:22
Und codieren / komprimieren tut ein Programm?

kann man so sagen, obwohl dieses programm alleine natürlich nicht lauffähig ist und erst mit daten gefüttert werden muss.

DerKleineFreak
2008-04-23, 11:20:37
Ne ich mein ob das codieren / komprimieren auch eine .dll übernimmt oder ein extra Programm ist?

Hey, und noch ne Frage : D

MPEG-4: Ich höre immer DivX und XviD seien da Codecs? Ich dachte MPEG-4 ist der codec?

Gast
2008-04-23, 11:30:59
Ne ich mein ob das codieren / komprimieren auch eine .dll übernimmt oder ein extra Programm ist?


es ist eine .dll die von programmen benutzt werden kann.



MPEG-4: Ich höre immer DivX und XviD seien da Codecs? Ich dachte MPEG-4 ist der codec?

MPEG-4 ist ein verfahren zur videokomprimierung, DivX/XviD sind konkrete implementierungen davon.

DerKleineFreak
2008-04-23, 11:33:27
es ist eine .dll die von programmen benutzt werden kann.


Welches Programm denn z.B.?

Gast
2008-04-23, 15:03:51
Welches Programm denn z.B.?

na der player, oder auch videobearbeitungsprogramme.

Gast
2008-04-23, 22:12:44
Ne ich mein ob das codieren / komprimieren auch eine .dll übernimmt oder ein extra Programm ist?
es gibt beides, sowohl standalone encoder (x264 zum beispiel) als auch bibliotheken (unter windows sind das dlls) die von anderen programmen benutzt werden.