【问题标题】:Calculate Mp3 duration based on bitrate and file size根据比特率和文件大小计算 Mp3 持续时间
【发布时间】:2015-06-12 05:47:06
【问题描述】:

我尝试使用比特率和文件大小来计算 mp3 持续时间,经过一番搜索后我找到了这个公式:

(mp3sizeInByte*0.008)/bitrate

我正在使用mp3sizeInByte*0.008 将字节转换为 Kbits。

但它不是那么准确,结果与实际 mp3 持续时间相比有几秒钟的差异。

我想知道这个正确的公式吗?

【问题讨论】:

  • 我在您的帖子中没有看到问号,但无论如何您如何获得比特率的价值?文件是如何编码的?
  • @helrich 我正在使用 ffmpeg 提取 mp3 元数据。
  • 即使使用 CBR,有效比特率也会有所不同。 See here 了解更多信息。总体而言,如果几分钟的 mp3 关闭几秒钟,那仍然是相当不错的。我真的会考虑解析 ID3 标签以获取您想要的信息。

标签: mp3


【解决方案1】:

如果其他人尝试使用 Web Audio API 在 JavaScript 中计算比特率,我就是这样做的:

<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);
  }
}

【讨论】:

    【解决方案2】:

    您可以使用以下公式计算大小:

    x = 歌曲长度(秒)

    y = 比特率(千比特每秒)

    (x * y) / 8

    我们除以 8 得到以千字节 (kb) 为单位的结果。

    例如,如果您有一首 3 分钟的歌曲

    3 分钟 = 180 秒

    128kbps * 180 秒 = 23,040 千位数据 23,040 kb / 8 = 2880 kb

    然后您将通过除以 1024 转换为兆字节:

    2880/1024 = 2.8125 Mb

    如果所有这些都是以不同的编码速率完成的,比如 192kbps,它将如下所示:

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

    【讨论】:

    • 第一个问题不是问如何获得歌曲的长度吗?为什么这是一个公认的答案。
    猜你喜欢
    • 2019-09-08
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2018-10-21
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多