Автоматизировать задачи с помощью Python - PullRequest
0 голосов
/ 20 февраля 2019

Я ищу способ автоматизации задач во внешних программах с помощью Python.

У меня большие аудиофайлы в формате AAC.Мне нужно преобразовать их в mp3, а затем усилить их (избегая искажений).

Я написал программу с библиотекой pydub, которая прекрасно работает с небольшими файлами, но мои файлы слишком велики (дольше, чем 2 часа или200mb) и мне не хватает памяти (потому что эта библиотека хранит полные файлы в оперативной памяти, я думаю).Я не могу разбить файл на куски, потому что я не мог объединить их снова по предыдущей причине, и мне нужен файл одним куском.

Итак, я хотел бы написать программу, которая откроет другую программу дляпреобразовать файл в mp3 (mediahuman audio converter), а затем усилить преобразованный файл с помощью другой программы (аудиоредактор WavePad), но я не знаю, возможно ли это.

В настоящее время я делаюэто вручную, но это занимает много времени и требует менее 10 кликов (распределенных по всему процессу), что утомительно.

Я покидаю программу, которую написал.Я расшифровал его, чтобы удалить некоторые функции, которые не имеют отношения и не связаны с этим процессом, плюс я перевел комментарии, переменные и другие вещи на английский язык, поэтому в нем могут быть некоторые ошибки, но оригинальная программа работает хорошо:

import glob
import os
from pydub import AudioSegment

#convert to mp3 128 bits
sound = AudioSegment.from_file("input-file.aac")
sound.export("output-file.mp3", format="mp3", bitrate="128k")

#sound.max_dBFS shows how far below the limit the highest sample is (in dB)
sound = AudioSegment.from_file("output.mp3", format="mp3")
max_gain_without_distortion = -1 * sound.max_dBFS

#increase volume by "max_gain_without_distortion" dB
from pydub.playback import play
song = AudioSegment.from_mp3("output-file.mp3")
louder_song = song + max_gain_without_distortion

#save louder song
louder_song.export("output.mp3", format='mp3')

Характеристики ПК: /// ОС: windows 10 pro 64 bit /// ОЗУ: 4 ГБ /// CPU: двухъядерный 3 ГГц /// ВЕРСИЯ PYTHON: 3.7.1 /// Версия Pydub: v0.23.1-0-g46782a9 /// ffmpeg / avlib версия: "Build: ffmpeg-20190219-ff03418-win32-static" ///

1 Ответ

0 голосов
/ 21 февраля 2019

Как указано в комментариях, в качестве решения я собираюсь предложить использовать инструмент командной строки: FFmpeg .Вот команда, которая вам нужна:

ffmpeg -i input-file.aac -b:v 128k -filter:a loudnorm output.mp3

с использованием loudnorm .Вы также можете применить усиление напрямую, как описано в документации, но следует ожидать худших результатов.Нормализацию можно выполнить несколькими способами, я предлагаю прочитать этот пост .

Комбинируя его, например, с find . -name '*.wav' -type f, вы можете легко найти и преобразовать все файлы в дереве каталогов.

Если вы хотите использовать Python, вы можете проверить Привязки Python .Основы:

import ffmpeg
ffmpeg.input('stereo.aac').output('mono.mp3').run()

Изначально я собирался предложить использовать sox : Sound eXchange, швейцарский армейский нож аудио манипуляции .Это не Python, хотя имеет привязки Python : pysox .Тем не менее, оказалось, что он не поддерживает формат AAC (до сих пор есть десятки других форматов).Я подумал, что было бы интересно упомянуть об этом в любом случае, так как сначала можно конвертировать в более популярный формат с помощью ffmpeg и передавать результаты в sox .Последний имеет гораздо больше возможностей для модификации аудиопотока.

Преобразование wav в mp3 и сэмплирование до 128 Кбит:

sox -r 128k input-file.wav output-file.mp3

ОП просит "увеличить громкость наmax_gain_without_distortion dB "и для этого мы можем использовать либо gain, либо norm, как описано в документах :

sox -r 128k input-file.wav output-file.mp3 gain −n -3

после документов, Опция -n нормализует звук до 0 дБ FSD;он часто используется в сочетании с отрицательным усилением-дБ для того, чтобы звук был нормализован до заданного уровня ниже 0 дБ .

sox −−norm -r 128k input-file.wav output-file.mp3

...