1. Forum
    1. Unerledigte Themen
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Blog
    1. Artikel
  • Anmelden
  • Registrieren
  • Suche
Coding
  • Alles
  • Coding
  • Artikel
  • Forum
  • Blog-Artikel
  • Seiten
  • Erweiterte Suche
  1. StageTwo - Deine Wohlfühloase
  2. Artikel
  3. Coding

MP3 MPEG Frames - So ermittelt man die Spielzeit

  • FragSalat
  • 15. Januar 2014 um 14:32
  • 6.919 Mal gelesen
  • 0 Kommentare
Wer die Spielzeit, die Bitrate oder die Samplerate einer MP3 auslesen möchte, kommt nicht drum herum die MPEG Frames zu analysieren. Die MPEG Frames enthalten den wahren Inhalt, die Audiodaten (Samples), einer MP3 Datei. Aus ihnen werden die Töne erzeugt die man hört.
Inhaltsverzeichnis [VerbergenAnzeigen]
  1. Die ominösen MPEG Frames
  2. Analysieren des Frames
  3. MPEG Frames hin oder her... ich brauche die Spielzeit!

Die ominösen MPEG Frames

Sie beinhalten wichtige Informationen wie die Bit- und Samplerate der MP3 Datei.

Nur mit diesen Informationen können wir am Ende die Spielzeit einer MP3 Datei berechnen.

Näheres zu der Struktur findet ihr auf mpgedit.org.

Wir werden, wie in meinem Artikel über die ID3 Tags, die gleiche sample.mp3 benutzen.

MPEG Frames bestehen wie die ID3 Tags aus einem Header und einem Body Teil.

Im Header finden wir die für uns relevanten Informationen und im Body befinden sich die Samples, welche uns aber hier nicht interessieren.

Das erste MPEG Frame finden wir ab dem Offset 9244 (ID3 Tags Länge + 10 bytes für den ID3 Header).

Ein MPEG Frame Header besteht aus 4 bytes und ist folgender maßen aufgebaut:

FF FB 90 C4 = 11111111 11111011 10010000 11000100

Code: MPEG Frame header
11111111 111   11 bits Sync bits. Haben diese Bits nicht den Wert 1, sind wir an einer falschen Position.
11             2  bits MPEG Version. Siehe link oben
01             2  bits Layer
1              1  bit  1 Wenn geschützt. Dann folgt dem Header eine 4 byte lange CRC Prüfsumme
1001           4  bits Bitrate index. Siehe link oben
00             2  bits Samplerate index. Siehe link oben
0              1  bit  Padding zwischen den Frames (Layer)
0              1  bit  Privat flag. Wird kaum benutzt
11             2  bits Channel
00             2  bits Erweiterung. Siehe link oben
0              1  bit  Kopierschutz
1              1  bit  Original
00             2  bits Schwerpunkt
Alles anzeigen

Analysieren des Frames

Wie man an diesem Frame eventuell erkennen kann, beinhalten die MPEG Frames nicht direkt die Bit- und Samplerate.

Zumindest scheint eine Bitrate von 9 (1001 binär) kbit/s nicht sehr realistisch.

Das liegt daran das die MPEG Frames nur die Indizes enthalten welche auf vordefinierte Tabellen passen.

Die Tabellen dafür findet ihr im obigen Link.

Um an die wirkliche Bit- und Samplerate zu kommen benötigen wir die MPEG Version und den Layer.

Dieses Frame benutzt die MPEG Version 1 und den Layer 3.

Achtung auch hier sind die Werte nur Indizes für vordefinierte Tabellen.

Mit Hilfe unserer MPEG Version 1, dem Layer 3 und dem Index der Bitrate 1001(binär) = 9(dezimal) gucken wir in eine Bitrate Tabelle und finden unsere Bitrate von 128 Kilobit / Sekunde.

Die Samplerate finden wir, mit der MPEG Version 1 und dem Index der Samplerate 0, in der Samplerate Tabelle, welche uns einen Wert von 44100 Hz aufzeigt.

Die Länge eines MPEG Frames können wir mit diesen Werten und folgenden Formeln berechnen:

Code
Wenn Layer 1
    frameLength = (12 * bitRate / sampleRate + padding) * 4;
Wenn Layer 2 oder 3
    frameLength = 144 * bitRate / sampleRate + padding;

MPEG Frames hin oder her... ich brauche die Spielzeit!

Nun haben wir die Anzahl der Bytes eines MPEG Frames inclusive der 4 Bytes des Headers.

Jetzt müssen wir die Header jedes Frames auslesen und Durchschnittswerte bilden.

Den Body könnt ihr einfach überspringen wenn ihr am Ende des Headers (4 bytes) seid newPosition = currentPosition + frameLength - 4.

Wenn wir den Durchschnitt der Bit- und Samplerate aus allen MPEG Frames haben, sind wir in der Lage die Spielzeit einer MP3 Datei zu berechnen.

Wir ermitteln die Datengröße der MPEG Frames in dem wir von der Dateigröße 51488(dezimal) die Größe des ID3 Blocks 9234 + 10(dezimal) abziehen.

Nun ermitteln wir den Bytes pro Sekunde Wert, indem wir die Bitrate 128 kbit/s mit 1000 multiplizieren, kommen wir von den Kilobits zu Bits.

Diesen Wert dividieren wir noch mit 8 um die Bytes zu erhalten und haben nun einen Wert von 16000 byte/s.

Jetzt wird die Datengröße 42244(dezimal) durch 16000(dezimal) Bytes pro Sekunde geteilt und wir haben einen Wert von 2.6 Sekunden.

Hier nochmal die Rechnung:

Code
dataSize = fileSize - (id3Size + 10);
bytesPerSecond = (bitrate * 1000) / 8;
seconds = dataSize / bytesPerSecond;

Jetzt haben wir die Spielzeit, Bitrate und Samplerate aus den MPEG Frames gelesen.

Diese können wir nun Anzeigen oder mit ihnen z.B. in einem Audio Player arbeiten.

  • mp3
  • mpeg
  • duration

Vorheriger Artikel MP3 ID3 Tags ... Wie kann man die teile lesen?

Nächster Artikel So erzeugt man eine Waveform mit PHP

Kommentare

  • :)
  • :(
  • ;)
  • 8-)
  • :P
  • ^^
  • :D
  • ;(
  • X(
  • :ironie:
  • :arghs:
  • :assi:
  • :brainsnake:
  • :dos:
  • :eeeek:
  • :thx:
  • :*
  • :|
  • 8o
  • =O
  • <X
  • :blush:
  • ||
  • :gutenmorgen:
  • :/
  • :S
  • X/
  • 8)
  • :help:
  • ?(
  • :huh:
  • :hihi:
  • :rolleyes:
  • :love:
  • :pinch:
  • :hmmmm:
  • 8|
  • :cursing:
  • :wacko:
  • :hmmz:
  • :thumbdown:
  • :thumbup:
  • :king:
  • :sleeping:
  • :stock:
  • :whistling:
  • :evil:
  • :saint:
  • :knot:
  • <3
  • :!:
  • :?:
  • :musicextreme:
  • :party:
  • :patsch:
  • :pflaster:
  • :police:
  • :pupillen:
  • :schiefguck:
  • :smalleyes:
  • :smoker:
  • :tired:
  • :tot:
  • :ugly:
  • :ui:
  • :verwirrt:
  • :verysad:
  • :winki:
  • :woot:
  • :wtf:
  • :whistle3:
  • :yahoo:
  • :clapping:
  • :hi:
  • :dance:
  • :dashing:
  • :what?:
  • :np:
  • :gamer:
  • :hearth:
  • :punish:
  • :omg:
  • :kid:
  • :criminal:
  • :assassin:
  • :assaultrifle:
  • :schland:
  • :bad:
  • :beer:
  • :beta:
  • :blackeye:
  • :clapping_1:
  • :borg:
  • :cool:
  • :censored:
  • :dance3:
  • :chainsaw:
  • :diablo:
  • :chinese:
  • :friends:
  • :cookie:
  • :gamer3:
  • :gamer4:
  • :dead:
  • :girl_cray2:
  • :doofy:
  • :girl_sigh:
  • :evilgrin:
  • :good3:
  • :fie:
  • :golly:
  • :hiphop:
  • :growup:
  • :imsohappy:
  • :grumble:
  • :ireful:
  • :hail:
  • :huntsman:
  • :laugh1:
  • :ill:
  • :locomotive:
  • :lol:
  • :mosking:
  • :miffy:
  • :music:
  • :minigun:
  • :negative:
  • :modo:
  • :neo:
  • :nono:
  • :ok:
  • :oops:
  • :party2:
  • :pardon:
  • :pilot:
  • :pillepalle:
  • :pleasantry:
  • :pleasantry_1:
  • :popcorm2:
  • :popcorn:
  • :protest:
  • :puke:
  • :pump:
  • :rtfm:
  • :rofl:
  • :search:
  • :search_1:
  • :superstition:
  • :shit:
  • :thank_you:
  • :sniper:
  • :threaten:
  • :spiteful:
  • :tomato:
  • :this:
  • :tommy:
  • :vain:
  • :to_keep_order:
  • :wayne:
  • :umnik:
  • :wbb:
  • :vinsent:
  • :werderw:
  • :wacko1:
  • :zombie:
  • :warning:
  • :)
  • :(
  • ;)
  • 8-)
  • :P
  • ^^
  • :D
  • ;(
  • X(
  • :ironie:
  • :arghs:
  • :assi:
  • :brainsnake:
  • :dos:
  • :eeeek:
  • :thx:
  • :*
  • :|
  • 8o
  • =O
  • <X
  • :blush:
  • ||
  • :gutenmorgen:
  • :/
  • :S
  • X/
  • 8)
  • :help:
  • ?(
  • :huh:
  • :hihi:
  • :rolleyes:
  • :love:
  • :pinch:
  • :hmmmm:
  • 8|
  • :cursing:
  • :wacko:
  • :hmmz:
  • :thumbdown:
  • :thumbup:
  • :king:
  • :sleeping:
  • :stock:
  • :whistling:
  • :evil:
  • :saint:
  • :knot:
  • <3
  • :!:
  • :?:
  • :musicextreme:
  • :party:
  • :patsch:
  • :pflaster:
  • :police:
  • :pupillen:
  • :schiefguck:
  • :smalleyes:
  • :smoker:
  • :tired:
  • :tot:
  • :ugly:
  • :ui:
  • :verwirrt:
  • :verysad:
  • :winki:
  • :woot:
  • :wtf:
  • :whistle3:
  • :yahoo:
  • :clapping:
  • :hi:
  • :dance:
  • :dashing:
  • :what?:
  • :np:
  • :gamer:
  • :hearth:
  • :punish:
  • :omg:
  • :kid:
  • :criminal:
  • :assassin:
  • :assaultrifle:
  • :schland:
  • :bad:
  • :beer:
  • :beta:
  • :blackeye:
  • :clapping_1:
  • :borg:
  • :cool:
  • :censored:
  • :dance3:
  • :chainsaw:
  • :diablo:
  • :chinese:
  • :friends:
  • :cookie:
  • :gamer3:
  • :gamer4:
  • :dead:
  • :girl_cray2:
  • :doofy:
  • :girl_sigh:
  • :evilgrin:
  • :good3:
  • :fie:
  • :golly:
  • :hiphop:
  • :growup:
  • :imsohappy:
  • :grumble:
  • :ireful:
  • :hail:
  • :huntsman:
  • :laugh1:
  • :ill:
  • :locomotive:
  • :lol:
  • :mosking:
  • :miffy:
  • :music:
  • :minigun:
  • :negative:
  • :modo:
  • :neo:
  • :nono:
  • :ok:
  • :oops:
  • :party2:
  • :pardon:
  • :pilot:
  • :pillepalle:
  • :pleasantry:
  • :pleasantry_1:
  • :popcorm2:
  • :popcorn:
  • :protest:
  • :puke:
  • :pump:
  • :rtfm:
  • :rofl:
  • :search:
  • :search_1:
  • :superstition:
  • :shit:
  • :thank_you:
  • :sniper:
  • :threaten:
  • :spiteful:
  • :tomato:
  • :this:
  • :tommy:
  • :vain:
  • :to_keep_order:
  • :wayne:
  • :umnik:
  • :wbb:
  • :vinsent:
  • :werderw:
  • :wacko1:
  • :zombie:
  • :warning:

Registrierung

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen

Kategorien

  1. News 12
  2. Games 7
  3. Software 3
  4. Hardware 3
  5. Coding 5
  6. Filter zurücksetzen

Letzte Beiträge

  1. Gebt ihr euch zur Halloween was besonderes?

    rwckai
    2. November 2026 um 13:36
  2. One Piece

    PraxXx
    30. Oktober 2026 um 15:27
  3. Stammtisch: Wir schaffen 8888 Seiten! (1000, 1337, 2222, 3333, 4444, 5555, 6666 & 7777 geschafft)

    rwckai
    28. Oktober 2026 um 00:53
  4. Meine Erfahrungen mit moderner KI-Bildbearbeitung

    Savior
    10. Oktober 2026 um 20:44
  5. Practical guide: creating better game artwork with image-to-image AI

    jamieklausen998
    15. September 2026 um 08:48

Aktivste Themen

  1. Stammtisch: Wir schaffen 8888 Seiten! (1000, 1337, 2222, 3333, 4444, 5555, 6666 & 7777 geschafft)

    160.723 Antworten
  2. One Piece

    289 Antworten
  3. Silkroad Online Artwork | Ladescreens

    8 Antworten
  4. Gebt ihr euch zur Halloween was besonderes?

    4 Antworten
  5. Meine Erfahrungen mit moderner KI-Bildbearbeitung

    1 Antwort

Themen-Schlagwortwolke

  • 2362
  • Android
  • Battlefield
  • best
  • bot
  • C#
  • c++
  • Clan
  • Clansuche
  • FeelsBadMan
  • FIFA
  • Gaming
  • geldautomatfürdaswohnzimmer
  • GTA
  • isro
  • joymax
  • kaufberatung
  • Laptop
  • league of legends
  • lol
  • Member
  • Membersuche
  • mmorpg
  • musik
  • Notebook
  • Online
  • Pc
  • php
  • private server
  • Privat server
  • programmieren
  • PServer
  • Psro
  • Push
  • sbot
  • server
  • Silk
  • Silkroad
  • silkroad 110 CAP
  • silkroad online
  • silkroad online private server
  • silkroad private server
  • Sro
  • sro 110 CAP
  • Steam
  • suche
  • Tera
  • tv
  • vSRO
  • WoW
  1. Datenschutzerklärung
  2. Impressum