如何在不实际转换(即 mp3 到 wav)的情况下确定转换后的音频文件的理论文件大小

How to determine theoretical filesize of converted audio file without actually converting (i.e. mp3 to wav)

背景:我正在编写一个 python 脚本,它将接收一个音频文件并使用 pydub 对其进行修改。 Pydub 似乎需要将音频输入转换为 wav 格式,但有 4GB 的限制。所以我将一个 400MB 的 .m4a 文件放入 pydub 并得到一个文件太大的错误。

与其使用 pydub 运行 几分钟,然后在转换后的解压后的文件大小过大时抛出错误,我想提前快速计算出解压后的文件大小。如果超过 4GB,我的脚本会截断原始音频,然后 运行 通过 pydub。

谢谢。

计算理论 .WAV 文件的大小是简单的算法。大小(以字节为单位)是位深度除以 8,乘以采样率,乘以持续时间,乘以通道数。

因此,如果您有一个 3:20 长、44100Hz、16 位和立体声的音频剪辑,则计算结果为:

sample_rate = 44100 # Hz/Samples per second - CD Quality
bit_depth = 16 # 2 bytes; CD quality
channels = 2 # stereo
duration = 200.0 # seconds

file_size = sample_rate * (bit_depth / 8) * channels * duration
        # = 44100 * (2) * 2 * 200
        # = 35280000 bytes
        # = 35.28 MB (megabytes)

我找到了这个在线音频文件大小计算器,您也可以用它来确认您的数学计算:https://www.colincrawley.com/audio-file-size-calculator/

如果您想找出另一个方向,即理论压缩文件的大小,这取决于您进行压缩的方式。值得庆幸的是,典型的压缩仅使用固定的比特率,这意味着计算出压缩文件大小的数学运算非常简单。

因此,如果您有一个 3:20 音频剪辑要转换为 MP3,比特率为 128kbps(每秒千比特,128 是常见的中档质量设置),计算结果仅为是比特率,除以 8(每字节比特数)乘以持续时间:

bits_per_kb = 1000
bitrate_kbps = 128
bits_per_byte = 8
duration_seconds = 200
filesize_bytes = (bitrate_kbps * bits_per_kb / bits_per_byte) * duration_seconds
             # = (128000 / 8) * 200
             # = (16) * 200
             # = 3200000 bytes
             # = 3.2 MB