C++ länge einer mp3 datei in millisekunden bestimmen

striker159

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
327
hallo,

ich habe einige mp3 dateien, welche die selbe bytegröße und bitrate haben, aber unterschiedlich lang sind. (mit audacity geprüft).
zb 64 kbps, 241.664 Bytes , macht rechnerisch 30208 ms.

tatsächlich sind die dateien aber 30197ms, 30171ms, 30145ms und 30119ms lang.

kennt jemand eine möglichkeit, diese längen zu bestimmen?
 
Hmm, ich würde vermuten, dass man den "Datenstrom" komplett dekodieren muß, um die Länge zu kennen. Bin nicht wirklich sonderlich versiert auf dem Gebiet, aber gibt es nicht jede Menge verschiedene mp3-Encodings? Und enthalten mp3s nicht auch noch diverse Metadaten (die vielleicht die unterschiedliche Länge bei gleicher Dateigröße erklären könnten)?
 
Da müsstest du dich wirklich intensiv mit dem Format beschäftigen oder evtl. eine passende Bibliothek finden, die einen Teil der Arbeit abnimmt.
Die größten Unterschiede könnten von verschiedenen Headern kommen (FhG vs. Xing) und natürlich ID-Tags, die sogar größer sein können als die Nutzdaten selbst.

Eine einfache Möglichkeit wäre wahrscheinlich tatsächlich die Dateien einfach temporär zu Wave zu dekodieren (da findet man bestimmt schnell was) und diese zu vergleichen.
 
Vielleicht sind die MP3s auch mit variabler Bitrate encodiert. Wobei die Laengen ja ziemlich nahe beieinander sind.
 
Danke für die Antworten. Ich werde wohl nicht um das Parsen herumkommen.
 
Umwandeln in WAV und Ende selber bestimmen. Deswegen kann auch nicht jeder MP3 Netzwerk Player gapless playback, da MP3 den Rest des letzten Frames halt mit Stille auffüllt und es nicht per 'Markierung' erkennbar ist.
 
striker159 schrieb:
hallo,

ich habe einige mp3 dateien, welche die selbe bytegröße und bitrate haben, aber unterschiedlich lang sind. (mit audacity geprüft).
zb 64 kbps, 241.664 Bytes , macht rechnerisch 30208 ms.

tatsächlich sind die dateien aber 30197ms, 30171ms, 30145ms und 30119ms lang.

kennt jemand eine möglichkeit, diese längen zu bestimmen?
Du kannst die Dauer nicht anhand von Größe und Bitrate errechnen. Das liegt an der Arbeitsweiße von Kpmpressionsverfahren. Dinge die sich ähneln/wiederholen existieren im optimalfall nur ein mal.
Eine Datei welche z.B nur einen Ton wiedergibt wird bei gleicher Dauer deutlich kleiner sein als ein Musikstück gleicher Dauer.
 
Fonce schrieb:
Eine Datei welche z.B nur einen Ton wiedergibt wird bei gleicher Dauer deutlich kleiner sein als ein Musikstück gleicher Dauer.
Dann wäre aber auch die Bitrate geringer.
 
Nur bei variabler Bitrate, nicht bei fester.
 
Bei konstanter Bitrate ist deine Behauptung sogar noch falscher. Reite dich doch nicht immer weiter rein.
 
Zurück
Oben