Предыстория: я пишу скрипт на Python, который будет принимать аудиофайл и изменять его с помощью pydub. Pydub, похоже, требует преобразования аудиовхода в формат wav, который имеет ограничение в 4 ГБ. Поэтому я помещаю файл .m4a размером 400 МБ в pydub и получаю сообщение об ошибке, что файл слишком велик.
Вместо того, чтобы запускать pydub в течение пары минут, а затем выдавать ошибку, если преобразованный размер распакованного файла слишком велик, я хотел бы заранее быстро рассчитать, каким будет распакованный размер файла. Если более 4 ГБ, мой скрипт обрежет исходный звук, а затем запустит pydub.
Спасибо.
Размер теоретического файла .WAV можно вычислить с помощью простой арифметики. Размер в байтах — это битовая глубина, деленная на 8, умноженная на частоту дискретизации, умноженная на продолжительность и умноженная на количество каналов.
Итак, если у вас есть аудиоклип продолжительностью 3:20, 44 100 Гц, 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, с битрейтом 128 кбит/с (килобит в секунду, 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
Я не уверен, в чем заключается ваше замешательство, поскольку этот ответ является теоретическим размером файла .WAV. Вычислить теоретический размер сжатого аудио намного сложнее, если это переменная скорость передачи, но если это фиксированная скорость передачи, это намного проще, поскольку вы просто умножаете скорость передачи на продолжительность. Ни одна из упомянутых мной переменных — частота дискретизации, разрядность, продолжительность и количество каналов — не имеет ничего общего со сжатым звуком. Это все самые основные свойства любого цифрового звука PCM.
Если так, то классно. Спасибо. надо будет вечером проверить
@Джон Г. не забудьте принять этот ответ, если он сработал для вас.
Я думаю, что неправильно назвал свой вопрос, я должен был больше использовать слово «преобразованный». Если у меня есть сжатый файл mp3/m4a, и мне нужен теоретический размер файла, если я преобразовал его в распакованный файл .wav, как я могу найти этот теоретический размер?Поправьте меня, если я ошибаюсь, но я предполагаю, что это даст мне размер исходного файла mp3/m4a?