www.mikrocontroller.net

Forum: PC-Programmierung Wie MP3-Spieldauer berechnen


Autor: Frank M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Für eine Art MP3-Player, den ich schreibe, brauche ich die Spieldauer 
eines MP3-Files.

Wie berechnet Windows die Spieldauer eines MP3-Files?
Oder wie kann man es auch machen?

Das muss gehen, ohne jedes einzelne Frame durchzurechnen, denn geht man 
mit der Maus über eine MP3-Datei erhält man sofort (ohne daß der Rechner 
auf der Platte rumorgelt) die Spieldauer.

Ich brauche die Spieldauer nur auf 2 Sekunden genau, Millisekunden sind 
egal.

Vielen Dank!

Autor: X. H. (shadow0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Dateigröße und Bitrate die Spieldauer berechnen.
Bitrate kann man aus dem Header herausfinden.
Hier Infos (mal eben in Google gefunden, vielleicht gibs noch bessere)
zum Header-Aufbau:
http://sites.inka.de/sites/plagiats-home/mp3-header.html

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Bitrate nicht konstant ist (VBR) wird das schwierig. Ich 
vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern im 
Header abgelegt wird ?

Stefan

Autor: Frank M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@X.H.
Wie Stefan geschrieben hat: bei VBR (variabler Bitrate) kann das dann ja 
nicht funktionieren.

@Stefan
Problem ist, daß nicht zwingend in jeder Datei die Gesamtspieldauer 
abgelegt sein muss...und auch leider nicht ist.

Aber wie berechnet z.B. Windows das so schnell und ohne die Datei 
zudurchforsten?

Autor: Frank M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder gibts da vielleicht eine Trick, wenn man es nur auf 2 Sekunden 
genau braucht, also eine ziemlich genaue Schätzung?

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da wirst du wohl rechnen müssen. Auch Player wie Winamp berechnen bei 
VBR wärend des Abspielens die durchschnittliche Bitrate und errechnen 
daraus die Spiellänge. Das ist gut an der Anzeige der Restspieldauer zu 
sehen, die bei VBR Tracks in den ersten 5-10 Sekunden doch stark 
schwankt. Nach ca. 20 Sekunden hat sich's dann eingependelt.

> Das muss gehen, ohne jedes einzelne Frame durchzurechnen, denn geht man
> mit der Maus über eine MP3-Datei erhält man sofort (ohne daß der Rechner
> auf der Platte rumorgelt) die Spieldauer.

Schon mal die von Windows errechnete Spieldauer nachgemessen ;-)? 
Windows gibt auch bei VBR eine Bitrate an, was ja eigentlich nicht sein 
kann.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern
> im Header abgelegt wird ?

Bei mp3 gibt's keinen Header. Es ist schließlich ein Streaming-Format.

> Windows gibt auch bei VBR eine Bitrate an, was ja eigentlich nicht sein
> kann.

Man kann aber eine durchschnittliche Bitrate errechnen.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf
Durchschnittliche Bitrate. Also die ersten 5 Frames nehmen und den 
Durchschnitt dann auf die gsamte File-Länge umrechnen?

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hätte das jetzt ganz blöd einfach durch Dateigröße minus Header 
durch bitrate gerechnet...

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei variabler Bitrate gibt diese ja eigentlich nur einen 
Durchschnittswert über dass gesamte Lied an, deshalb sollte es hier auch 
funtionieren.

Bsp:

3,2MB ~ 3.276,8KB
256kBit/s = 250KB/s

-> 3.276,8KB / 32KB/s  = 102,4s ~ 1m 42s

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verdammt...

256kBit/s = 32KB/s

verfluchtes copy&paste...

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das versteh ich nicht. Bei MP3 wird pro Frame die Bitrate angegeben. Bei 
VBR wechselt diese eventuell von Frame zu Frame.

Und welcher Frame gibt mir dann die durchschnittliche Bitrate an? Gleich
der erste Frame?

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So langsam dämmerts bei mir wieder...

Hier sind die Header und die nötigen Berechnungen nochmal erklärt:

http://gabriel.mp3-tech.org/mp3infotag.html
http://www.hydrogenaudio.org/forums/lofiversion/in...
http://www.dv.co.yu/mpgscript/mpeghdr.htm

und hier hat jemand das gleiche vorgehabt, allerdings in Delphi. Hab mir 
den Quellcode nicht abgeschaut, aber das ist vielleicht ein Anfang.

http://timeforge.de/board/thread.php?threadid=89&s...

Ansonsten würde ich dann wohl auch die ersten 5 - 10 Frames nehmen, 
wobei das aufgrund der Machart der meisten Lieder wohl eher ungeeignet 
ist. Daher zufällig 5 - 10 Frames aus dem ganzen Lied suchen dürfte der 
wirklichen Bitrate näher kommen.

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und welcher Frame gibt mir dann die durchschnittliche Bitrate an? Gleich
> der erste Frame?

Nein, die durchschnittliche Bitrate musst du errechnen (Bittraten von x 
Frames addieren und durch x teilen):

Frame 1: 192 kBit/s
Frame 2: 160 kBit/s
Frame 3: 160 kBit/s
-------------------
Summe:   512 kBit/s   /   3 Frames  =  170,67 kBit/s durchschnitt

Je mehr Frames du zur Berechnung verwendest, desto genauer wird's. Das 
beste Ergebnis erhälst du, wenn du alle Frames zur Berechnung 
heranziehst.

Autor: Alibi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bei mp3 gibt's keinen Header. Es ist schließlich ein Streaming-Format.

Seit wann wird bei Streaming sofort bei Datenempfang abgespielt? 
Natürlich gibts einen Header, schließlich muß ja sichergestellt sein, 
dass nicht jeder Blödsinn zum Decoder kommt.

Autor: Henrik J. (henrikj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob diese Verfahren so toll sind...

Deswegen habe ich nämlich MP3s, die mit 28:32 minuten gekennzeichnet 
sein. Sind aber trotzdem nach 4 Minuten zu Ende. :|

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Natürlich gibts einen Header, schließlich muß ja sichergestellt sein,
> dass nicht jeder Blödsinn zum Decoder kommt.

Bei MP3 gibt es keinen File-Header. Jeder Frame hat seinen Frame-Header.

Autor: Alibi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab gar nicht mitbekommen, dass jemand von File-Header sprach.

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Ich vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern
>> im Header abgelegt wird ?

>[...diverse Posts zum Thema Header...]

>Hab gar nicht mitbekommen, dass jemand von File-Header sprach.

Sorry, aber die erste Aussage/Frage lies mich vermuten, dass ein Gesamt- 
oder File-Header gemeint sei. Dass gemeint sein könnte, die Gesamtzeit 
steht in jedem Frame-Header, hatte ich nicht in Erwägung gezogen.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, es war vermutlich auch ein Header für den gesamten File gemeint. 
Denn ich suche nach einem schnellen Weg, ohne die ganze Datei 
durchzurechnen.

Also scheint nichts anderes zu geben, als ein paar Frames zu nehmen, 
einen Durchschnitt zu errechnen und dann auf die gesamte Filelänge 
umzurechnen.

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also scheint nichts anderes zu geben, als ein paar Frames zu nehmen,
>einen Durchschnitt zu errechnen und dann auf die gesamte Filelänge
>umzurechnen.

...und anschliessend im TAG speichern, damit nicht nochmal gerechnet 
werden muss.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.