Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.08.2011, 17:42

Wie funktioniert ein Konverter?

Hallo!
Wie funktioniert ein Konverter?

Bislang sind Dateikodierungen für mich einfach nur Endungen die den Typ eines Objektes angeben, je nachdem ob diese Endung in der Registrierung vermerkt ist, lässt sich die Datei öffnen, einlesen, verändern o.Ä.
Ein Konverter ändert ja die Grunddatei, nehmen wir Beispiel *.mp4 zu *.avi. Was ist nun der Unterschied von *.mp4 und *.avi?
Klar ist, sie unterscheiden sich schon mal im Namen, in der Kodierung und in der Qualität.
Und was hat es mit diesen 'dubiosen' "Codecs" auf sich?
Ich danke allen die meinen Wissensdurst stillen!

MfG
Check

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

2

27.08.2011, 18:38

Unter der Kodierung, in diesem Sinne, versteht man ganz einfach die Art und Weiße wie etwas gespeichert wirt.

Wenn man zB jetzt auf Texte bezug nimmt wird ein Buchstabe mit der ASCII-Tabelle, einfach gesagt, codiert.
In dieser ist festgellegt das der Buchstabe A den Wert 65 hat, genaus könnte man sagen, durch eine andere Tabelle, das A den Wert 1 hat (ö.ä).
Dann hätte dein A mit der "WAV"-Codierung den Wert 65 und mit der "MP4"-Codierung den Wert 1, von daher auch die Bezeichnung "Codecs".

Das Beschrieben ist auf Musikdateien halt zu übertragen nur halt komplexer. Diese Codecs sind dynamsiche Bybliotheken mit einheitlicher Schnittstelle, sodass ein Programm immer die entsprechende Bibliothek braucht um einen Typ abzuspielen, aber nicht genau wissen muss wie die Bibliothek das ganze ladet und interpretiert.

Ein Ton wird durch ein Sinussignal mit einer Amplitude (Lautstärke) und einer Frequenz (Tonlage) beschrieben. Die Kombination aus verschieden Tönen nacheinander (mit geg. Dauer) ergibt dein Musikstück.
Nun je nach Format wird die Speicherung dieser Daten anderst vorgenohmmen, wo Formate die korekte ablauffolge dieser Töne speichern filtern andere Formate die "unhörbaren" Töne raus sodass weniger Speicher für die Daten benötigt wird.

Mfg Rushh0ur

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

3

27.08.2011, 18:39

Uff, also ich fange lieber mit einer etwas einfacheren Art von Dateien an, Textdateien.
Um Texte zu speichern gibt es verschiedene Möglichkeiten, z.B. als einfache TXT, als RTF, DOC oder DOCX (und noch viele mehr).
Word ab 2007 kann alle diese 4 Formate öffnen und speichern. Dabei kommen aber verschiedene Routinen zum Laden und Speichern zum Einsatz,
da sich die Bits und Bytes eines gespeicherten Textes in den verschiedenen Dateiformaten stark unterscheiden.

Eine einfache TXT-Datei hat z.B. keine Möglichkeit Formatierungen anzugeben. DOC hat dafür eine ganze Menge, die Datei sieht aber wie reines Kauderwelsch aus wenn man sie mal spasseshalber im Notepad öffnet. Der interpretiert die zusätzlichen Informationen nicht, sondern gibt sie dir auf den Bildschirm aus. Eine DOCX-Datei hingegen ist eigentlich ein ZIP-Archiv. Deswegen reicht es für eine Konvertierung nicht die Dateiendung zu ändern. Die Bytes in der Datei folgen ja noch dem ursprünglichen Dateiformat.

Was Videoformate im speziellen angeht, so ist die Komprimierung von Videos eine Sache die sich immer weiter entwickelt und besonders früher gab es eine Fülle von Algorithmen hierfür, die Codecs, die sich sowohl um die Kodierung als auch das Dekodieren des Videos zu Bytes kümmern. Da man aber nicht für jeden Codec ein eigenes Dateiformat haben wollte, gibt es die Containerformate wie AVI oder OGG.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

4

27.08.2011, 18:44

Ach so, also ist das wie ASCII sich vorzustellen, die Codecs sind so zu sagen dann die "Übersetzer".
Die Teile, die die Informationen haben, dass A=a ist wenn wir im Format *.xyz sind.
Oder nicht? :D

MfG
Check

PS: Moin Rush! :D

Viktor

Alter Hase

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

5

27.08.2011, 18:57

Veinfacht gesagt: Du nimmst eine Bitfolge, wandelst diese in ein Zwischenformat um, welches du bearbeiten kannst, wendest darauf vll ein paar Algorithmen an und speicherst es in einer anderen Bitfolge.

Etwas komplexer:
Du hast eine Datei, in welchem z.B. deine Musik gespeichert ist. Diese besteht häufig aus dem Aufbau Header+Daten. Im Header stehen allg.
Infos über die Datei, z.B. der Name des Liedes, welcher Interpret, etc.
Zu Anfang jeder Datei kommt aber erstmal eine Bitfolge, durch welche du erkennen kannst, was das überhaupt für ein Format ist.
Die Endung an sich spielt da heute glaube ich nicht mehr so eine große Rolle (oder hat sogar noch nie).
Hast du mal versucht eine txt-Datei zu erstellen, das Format in bmp geändert und dann mit dem Texteditor geladen? Richtig, es wird trotzdem dein Text korrekt angezeigt.
Die Endung ist mehr eine Orientierung für den User und das Betriebssystem, mit welchem Programm die Datei normalerweise geöffnet werden soll.
Zurück zur Datei selber. In dem Header stehen also allerlei Infos über die Datei.
Wie das im Detail aussieht, kann derjenige, der das Format entwickelt beliebig bestimmen. Ein Titel darf nie länger als 20 Zeichen sein?
Dann schreibe dies vor, verwende z.B. eine Feste länge an Byte für den Titel (bei großen Datenmengen nicht empfehlenswert, da Speicherverschwendung).
Nach dem Header kommen dann die eigentlichen Daten. Das wäre in diesem Fall dann die Musik. Bei mp3 liegt diese z.B. in kompremierter Form vor.
Diese Daten liest man nun in sein Programm, wendet z.B. den passenden Dekompremieralgorithmus auf den Stream an und speichert dies in einem Buffer.
Nun kommt das ganze rückwärts abgefädelt.
Du wendest z.B. einen anderen Algorithmus an, um diesen Stream in einer anderen Art zu kompremieren. Dann schreibst du in eine Datei wieder Headerinfos vom neuen Format
<< Format
<< Type: String, Length:5, Bytes:"hallo"
<< ...
und zum Schluss noch deinen Stream.

Wie der Stream selber aussieht, kann völlig unterschiedlich sein. Für mehr Infos s. Wikipedia::Audioformate . Bei Videos ist es ähnlich, aber hast du da nat. das Problem, dass du Bilder und Musik abspeichern musst und das möglichst effizient zum schnellen auslesen, wenn man es wieder abspielen möchte.

Codecs sind dabei nur eine Vereinbarung, wie diese Datei auszusehen hat (kann auch sein, dass es sich sogar nur auf den Contentteil selbst bezieht).

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

27.08.2011, 20:39

Ich hab gestern erst nen Konverter geschrieben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void convert( std::string strFileName )
{
    std::string strIn= strFileName;
    strIn+= ".bytes";
    std::string strOut= strFileName;
    strOut+= ".txt";

    unsigned char Bytes[173];
    int OffsetText[]= {145, 159 };
    int OffsetMoves= 172;
    
    std::ifstream in;
    in.open( strIn.c_str(), std::ios::in|std::ios::binary );
    in.read( (char*)Bytes, 173 );

    std::ofstream ofs( strOut.c_str() );

    for( int i= 0; i < 12; ++i )
    {
        for( int j= 0; j < 12; ++j )
        {
            char Data= '@' + Bytes[ j + 12 * i ];
            ofs << Data;
        }
        ofs << std::endl;
    }


    for( int i= 0; i < 2; ++i )
    {
        std::string strText;
        for( int j= 0; j < 13; ++j )
        {
            strText+= ((char*)Bytes)[ OffsetText[ i ] + j ];
        }
        ofs << strText.c_str() << std::endl;
    }

    ofs << (int)(Bytes[ OffsetMoves ]) << std::endl;
}

Werbeanzeige