Как нормализовать звук в mp3 файлах

Я ищу способ нормализовать звук в МНОГИХ MP3-файлах, которые у меня есть. Некоторые из них имеют низкий звук, а другие громче, поэтому я должен увеличить или уменьшить громкость в зависимости от песни. Какие есть способы сделать это для всех файлов. Я специально хотел бы сделать это через терминал, но также принимаются способы графического интерфейса.

39
задан 22 January 2013 в 21:59

8 ответов

Посмотрите @ mp3gain, который для меня даже лучше, чем normalize-audio

mp3gain -r *.mp3

Еще одна полезная версия может быть -c, которая не дает возможности спросить, хотите ли вы внести изменения для многих файлов:

mp3gain -c -r *.mp3

как сказано в справочной странице:

mp3gain не просто выполняет пиковую нормализацию, как это делают многие нормализаторы. Вместо этого он выполняет некоторый статистический анализ, чтобы определить, насколько громко файл на самом деле звучит для человеческого уха. Кроме того, изменения, сделанные mp3gain, абсолютно без потерь. При изменении качества качество не теряется, поскольку программа настраивает mp3-файл напрямую, без декодирования и перекодирования.

Примечание : Этот пакет был удален специально для Ubuntu 15.04.

Debian предлагает пакет python-rgain в качестве замены (Преимущество заключается в том, что replaygain поддерживает несколько форматов файлов, а именно Ogg Vorbis, Flac, WavPack и MP3. Кроме того, он позволяет просматривать существующую информацию о усилении воспроизведения любой из этих типов файлов). После установки запустите replaygain.

Чтобы установить python-rgain из терминала, выполните команду

sudo apt-get install python-rgain

В качестве альтернативы, получите файл .deb для 14.04 (последний) из здесь . Установите как обычно. После этого вам нужно запустить sudo apt-get -f install, чтобы исправить некоторые проблемы с зависимостями.

0
ответ дан 22 January 2013 в 21:59

Audacity Install audacity

С Audacity мы можем легко пакетно обработать файлов, чтобы применить преобразования или эффекты ко многим файлам в списке. Для этого мы сначала должны определить «Цепочку» , содержащую эффекты, которые мы хотим применить.

Это делается с помощью «Файл -> Редактировать цепочки ...» . В открывшемся окне нажмите кнопку Add в левом нижнем углу, чтобы вставить новую цепочку (дайте ей разумное имя):

enter image description here

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

Важно: нам всегда нужно также добавлять эффект «Экспорт MP3» (или любой другой формат экспорта) для сохранения полученного преобразования на диск.

Когда закончите, выйдите из этого окна, нажав OK , чтобы открыть «Файл -> Применить цепочку ...» . Выберите только что созданную цепочку и загрузите все нужные вам файлы с помощью «Применить к файлам ...» . В открывшемся окне выбора файлов можно выбрать несколько файлов.

enter image description here

Обработанные файлы будут сохранены в новом подкаталоге , «очищены» по пути к оригиналу.


Sox Install sox

Начиная с версии> 14.3, мы можем использовать фильтр sox --norm для нормализации звука в командной строке или для пакетной обработки:

sox --norm infile outfile

Добавлена ​​поддержка MP3 в Sox с помощью libsox-fmt-all Install libsox-fmt-all .

0
ответ дан 22 January 2013 в 21:59

Я бы использовал этот проект Normalize , это инструмент командной строки для нормализации аудиофайлов. Похоже, именно то, что вам нужно. Может выполнять пакетную обработку и не требует повторной выборки в промежуточные форматы.

Он находится в репозитории пакета как normalize-audio, sudo apt-get install normalize-audio. Это сборка, поддерживаемая Debian в апстриме, поэтому она должна быть в любом LTS или новее и построена с совместимостью с mp3 (проверено). Существует хорошая справочная страница man normalize-audio для изучения опций, но команды по умолчанию работают хорошо. Для пакетной обработки (нормализации громкости по нескольким файлам), normalize-audio -b *.mp3 или укажите отдельные имена файлов вместо использования подстановочных знаков.

0
ответ дан 22 January 2013 в 21:59

Ради этого я добавлю свои 2 цента. Я искал точно такую ​​же вещь (только для файлов ogg) и начал тему на форуме Crunchbang. Вы можете посмотреть его здесь: Normalize-audio не может найти mp3-декодер

По сути, моим решением был сценарий в посте № 8. Он работает для входных файлов mp3, flac и ogg, возможно, других, но определенно не wav.

Просто создайте файл (назовите его как хотите, я назвал его db_adjust_mp3), chmod + x и вставьте его в папку ~ / bin. Он также заполняет все недостающие данные кодека. Пример:

Исходный файл: 16._This_Protector.mp3: Audio file with ID3 version 2.3.0, contains:

против

Нормализованный файл: 16._This_Protector.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, JntStereo

Я изменил скрипт, чтобы использовать здесь normalize-mp3, чтобы вы могли использовать его, если хотите:

#!/bin/bash

find "$1" -iname "*.""$2" > $HOME/file_list

cat $HOME/file_list | while read line; do
#  echo "$line"
  orig_gain="$(normalize-mp3 -n "$line" | cut -d 'd' -f1)"
  larger=$(echo "$orig_gain"'>'-12 | bc)
  if [[ larger ]]
    then
      gain_difference=$(echo "$orig_gain"*-1-12 | bc)
    else
      gain_difference=$(echo "$orig_gain"-12 | bc)
  fi
  echo "Gain Difference will be: $gain_difference""db"
  normalize-ogg --mp3 --bitrate "$3" -g "$gain_difference""db" -v "$line"
done

Этот скрипт вычисляет разницу между текущим уровнем дБ и -12 дБ, затем применяет регулировку усиления, чтобы установить усиление точно на -12 дБ, что, как я обнаружил, работает лучше всего для меня. Он также рекурсивный, что делает его идеальным для создания целых музыкальных коллекций или файлов во многих подпапках. Если вы хотите установить другой уровень БД, просто измените оба экземпляра числа «12» на тот уровень БД, который вы хотели бы использовать. Как я писал в своей ветке Crunchbang, использование выглядит следующим образом:

normalize-mp3 <directory> <file extenstion(with no leading dot)> <bitrate>

Однако, когда я использовал свою музыкальную библиотеку в формате mp3, я использовал также mp3gain, как и предлагал Филипп. Мертвая простота этого великолепна, и мне очень понравилось. Однако проблема с normalize-audio заключается в том, что он декодирует файлы с повторным концом, поэтому происходит некоторое ухудшение звука. Но если вы не меломан и ваши mp3 не закодированы с высоким битрейтом, вы не заметите большой разницы.

Что я заметил с mp3gain, так это то, что независимо от того, какие варианты я пробовал, я не мог получить все в своей коллекции точно такого же уровня дБ, чего я и хочу, чтобы мне никогда не приходилось регулировать громкость с один трек к другому. Этот скрипт делает именно это. Извините за то, что так долго одолевался. Надеюсь, это поможет.

0
ответ дан 22 January 2013 в 21:59

replaygain

В Ubuntu 16.04 у меня были проблемы с другими альтернативами CLI. Затем я нашел replaygain:

Этот пакет предоставляет пакет Python для расчета значений Replay Gain для аудиофайлов и нормализации громкости этих файлов в соответствии со значениями. Поставляются также два основных скрипта, использующих эти возможности.

Replay Gain - это предлагаемый стандарт, разработанный для решения самой проблемы изменения громкости аудиофайлов.

Установить: sudo apt install python-rgain.

replaygain --force *.mp3
  • -f, --force Пересчитать усиление воспроизведения, даже если файл уже содержит информацию об усилении.

Так как только вычислять / изменять значение воспроизведения можно и быстрее: со средним ПК (Intel i7-6500U, 8 ГБ ОЗУ): ~ 20 файлов / минуту.

Ссылка

0
ответ дан 22 January 2013 в 21:59

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

Однако у меня были некоторые проблемы при парсинге вывода normalize-ogg с некоторыми файлами я имею. Существует также одна противная проблема с bc: это не делает реального округления, это только усекает.

Таким образом, в конечном счете я разочаровался в сценариях оболочки и переместился в Python.

Note1: exiftool часть могла бы быть излишеством, но я хотел быть на 100% уверенным, что исходная скорость передачи будет сохранена.

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

Note3: это решение имеет дело с ogg файлами, но это тривиально, чтобы адаптировать его к mp3, просто заменить случаи "ogg" с "mp3".

Вот мое взятие в проблеме. Последняя версия может быть найдена здесь: regain.py

#!/usr/bin/python3
"""
Parallel normalize gains
"""
'
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
'

# Absolute value, in dB for the desired gain of each file
TARGET_GAIN = -12

# 
MAX_THREADS = 2

from subprocess import Popen, PIPE
from multiprocessing.dummy import Pool as ThreadPool
from os import listdir
import logging

def initlogger(logfile="log.log", mainlevel=logging.DEBUG,
               filelevel=logging.DEBUG, consolelevel=logging.DEBUG):
    '''initlogger'''
    # create logger 
    logger = logging.getLogger()
    logger.setLevel(mainlevel)
    # create file handler which logs even debug messages
    fh = logging.FileHandler(logfile)
    fh.setLevel(filelevel)
    # create console handler also logging at DEBUG level
    ch = logging.StreamHandler()
    ch.setLevel(consolelevel)
    # create formatter and add it to the handlers
    formatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # add the handlers to the logger
    logger.addHandler(fh)
    logger.addHandler(ch)

def logcommand(command=[]):
    '''logcommand'''
    if not isinstance(command, list):
        return "", "", -1
    logging.info("Command:\n" + " ".join(command) + "\n")
    proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    output, err = proc.communicate()
    output = output.decode("utf-8")
    err = err.decode("utf-8")
    logging.info("Output:\n" + output + "\n")
    logging.info("Error:\n" + err + "\n")
    logging.info("Return Code:\n" + str(proc.returncode) + "\n")
    return output, err, proc.returncode

def regain(target):
    '''regain'''
    logging.info("============================ Start File  ============================")
    logging.warning(target["name"])
    logging.info("Extracting gain info.\n")
    commandgetlevels = ['normalize-ogg', '-n', target["name"]]
    output, err, retcode = logcommand(commandgetlevels)

    level  = output.split()[0]
    logging.debug("Level: " + level)
    if "dBFS" in level:
        level = level.split("dBFS")[0]
    level = level.replace(',', '.')
    level = int(round(float(level)))
    delta = target["gain"] - level
    logging.info("Required adjustment: " + str(delta) + "\n")
    if delta is 0:
        logging.warning(target["name"] + " is already at the correct level")
        return 0

    logging.info("Extracting average bitrate.\n")
    commandgetinfo = ['exiftool', target["name"]]
    output, err, retcode = logcommand(commandgetinfo)
    bitrate = '0'
    for line in output.split('\n'):
        if 'Nominal Bitrate' in line:
            bitrate = line.split(':')[1].split()[0]
            break
    logging.info("Average bitrate is: " + str(bitrate) + "\n")
    if bitrate is '0':
        logging.error("No valid bitrate found, aborting conversion.\n")
        exit(-1)

    logging.info("Re-normalizing.\n")
    commandrenormalize = ['normalize-ogg', '--ogg', '--bitrate', bitrate,
                          '-g', str(delta) + 'db', target["name"]]
    output, err, retcode = logcommand(commandrenormalize)
    if retcode is not 0:
        log.error("Output:\n" + output)
        log.error("err:\n" + err)
        exit(retcode)

    return retcode

# function to be mapped over
def parallelregain(gain=TARGET_GAIN, threads=MAX_THREADS):
    '''parallelregain'''
    logging.info("Creating thread pool with " + str(threads) + " elements.\n")
    pool = ThreadPool(threads)
    targets = []
    files_list = listdir(".")
    files_list.sort()
    counter = 0
    for filename in files_list:
        if filename.endswith("ogg"):
            target = {
                "name":filename,
                "gain":gain,
            }
            targets.append(target)
            counter = counter + 1
    pool.map(regain, targets)
    pool.close()
    pool.join()

if __name__ == "__main__":
    initlogger(logfile="normalize.log", consolelevel=logging.WARNING)
    parallelregain()
0
ответ дан 22 January 2013 в 21:59

Это рекурсивно ffmpeg-нормализует все .mp3 во всей структуре подпапки до частоты дискретизации 240k

find -name "*.mp3" -exec ffmpeg-normalize {} -b:a libmp3lame -b>a 240k \;

(вы можете изменить это для более высоких скоростей или используйте усиление вместо нормализации с тем же синтаксисом. Кто-нибудь?)

1
ответ дан 4 May 2020 в 23:01

Еще один вариант для mp3gain — я только что использовал его для установки mp3gain на свой компьютер с Ubuntu 20.20 и его копирования через библиотеку по мере ввода

git clone https://github.com/Sound-Linux-More/mp3gain.git
cd mp3gain/
sudo apt-get install libmpg123-dev
make
sudo make install
0
ответ дан 12 November 2020 в 19:34

Другие вопросы по тегам:

Похожие вопросы: