Calculate Mp3 duration based on bitrate and file size

拈花ヽ惹草 提交于 2019-12-04 19:25:42

问题


I try to calculate mp3 duration by using bitrate and file size , after some search i found this formula:

(mp3sizeInByte*0.008)/bitrate

i am using mp3sizeInByte*0.008 to convert byte to Kbits.

but its not so accurate , in result there is couple second different compare to actual mp3 duration.

i want know this right formula ?


回答1:


You can calculate the size using the following formula:

x = length of song in seconds

y = bitrate in kilobits per second

(x * y) / 8

We divide by 8 to get the result in kilobytes(kb).

So for example if you have a 3 minute song

3 minutes = 180 seconds

128kbps * 180 seconds = 23,040 kilobits of data 23,040 kilobits / 8 = 2880 kb

You would then convert to Megabytes by dividing by 1024:

2880/1024 = 2.8125 Mb

If all of this was done at a different encoding rate, say 192kbps it would look like this:

(192 * 180) / 8 = 4320 kb / 1024 = 4.21875 Mb




回答2:


If anyone else comes across trying to calculate bitrate in JavaScript with Web Audio API this is how I accomplished it:

<input type="file" id="myFiles" onchange="parseAudioFile()"/>
function parseAudioFile(){
  const input = document.getElementById('myFiles');
  const files = input.files;
  const file = files && files.length ? files[0] : null;
  if(file && file.type.includes('audio')){
    const audioContext = new (window.AudioContext || window.webkitAudioContext)();
    const reader = new FileReader();
    reader.onload = function(e){
      const arrayBuffer = e.target.result;
      audioContext.decodeAudioData(arrayBuffer)
        .then(function(buffer){
          const duration = buffer.duration || 1;
          const bitrate = Math.floor((file.size * 0.008) / duration);
          // Do something with the bitrate
          console.log(bitrate);
        });
    };
    reader.readAsArrayBuffer(file);
  }
}


来源:https://stackoverflow.com/questions/29494827/calculate-mp3-duration-based-on-bitrate-and-file-size

标签

工具导航Map