Хотя реальная причина проблемы уже была указана, я хочу добавить тот же ответ, так как у меня есть 4 внешних жестких диска.
Любой компьютер, который был изготовлен, предполагает, что источник питания будет следует использовать в соответствии со спецификациями конфигурации и, самое большее, с перегрузкой 20%
Для защиты источника питания компьютера должно быть подключено любое внешнее USB-устройство, предназначенное для защиты от внешнего источника питания. Описанное поведение является типичным поведением для перегрузки мощности. Предположим, что у вас есть и внешний DVD, это также может привести к сбою ваших записей и даже может привести к невозможности восстановления вашего устройства (ов) и еще больше, даже вашего компьютера.
Любое внешнее USB-устройство должно быть подключено к внешнему источнику питания HUB, чтобы защитить источник питания компьютера. , вместо того, чтобы истощать питание от источника компьютера, поскольку этот подход повредит больше, чем ваш жесткий диск. Напряжение питания в основном такое же, как у недостаточного компьютера или внешнего устройства. Стандарт USB не имеет никакого отношения к маломощному устройству. Подумайте об этом так: если вы хотите получить энергию от своего автомобиля, какое топливо вы бы использовали? Что-нибудь, что горит, или топливо, указанное изготовителем? Здесь точно то же самое. Используя USB-устройства UNPOWERED, он истощает питание от внутреннего источника питания компьютера. У него уже достаточно устройств!
Посмотрите @ mp3gain, который для меня даже лучше, чем normalize-audio
mp3gain -r *.mp3
другой полезной версией может быть -c, который не позволяет спросить, хотите ли вы делать изменения для многих файлов :
mp3gain -c -r *.mp3
, как сказано на странице руководства:
mp3gain не просто выполняет пиковую нормализацию, как это делают многие нормализаторы. Вместо этого он делает некоторый статистический анализ, чтобы определить, насколько громкий файл действительно звучит для человеческого уха. Кроме того, изменения mp3gain делают полностью без потерь. Нет никакого качества, потерянного в изменении, потому что программа напрямую регулирует mp3-файл, без декодирования и повторного кодирования.
mp3gain : этот пакет был удален специально на ubuntu 15.04. Debian предлагает python-rgain заменить. После его установки запустите replaygain.
В качестве альтернативы удалите файл .deb для 14.04 (последний) из удален . Установите как обычно. После этого вам нужно запустить sudo apt-get -f install, чтобы исправить некоторые проблемы с зависимостями.
Я бы использовал этот проект Normalize, это инструмент командной строки для нормализации аудиофайлов. Похоже, именно то, что вам нужно. Может выполнять пакетную обработку и не требует передискретизации в промежуточные форматы.
Он находится в репозитории пакета как normalize-audio, sudo apt-get install normalize-audio. Это сборка, поддерживаемая выше по течению от Debian, поэтому она должна быть в любом LTS или новее и построена с поддержкой mp3 (протестирована). Существует хорошая manpage man normalize-audio для изучения параметров, но по умолчанию команды по умолчанию работают хорошо. Для пакетной обработки (нормализовать объем для нескольких файлов), normalize-audio -b *.mp3 или указать отдельные имена файлов вместо использования подстановочных знаков.
Ради этого я брошу свои 2 цента. Я искал точно то же самое (только для файлов ogg) и начал тему на форуме Crunchbang. Вы можете посмотреть его здесь: Normalize-audio не может найти mp3-декодер
В основном мое решение было скриптом в статье №8.
Просто создайте файл (назовите его, что бы вы ни хотели, я назвал мой db_adjust_mp3), chmod + x и придерживаюсь его. в папке ~ / bin. Он также заполняет любые отсутствующие данные кодека. Пример:
Исходный файл: 16._This_Protector.mp3: Audio file with ID3 version 2.3.0, contains:
vs.
Нормализованный файл: 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
Этот скрипт вычисляет разницу между текущим уровнем db и -12db, затем применяет регулировку усиления, чтобы точно установить коэффициент усиления -12db, и это то, что я нашел, работает лучше для меня. Он также рекурсивный, что делает его отличным для выполнения целых музыкальных коллекций или файлов во многих подпапках. Если вы хотите установить другой уровень db, просто измените оба экземпляра числа «12» на любой уровень db, который вы хотели бы использовать. Как я писал в моем потоке Crunchbang, использование выглядит следующим образом:
normalize-mp3 <directory> <file extenstion(with no leading dot)> <bitrate>
Однако, когда я использовал мою музыкальную библиотеку в формате mp3, я тоже использовал mp3gain, как и предложил Филипп. Мертвая простота этого велика, и мне это очень понравилось. Проблема с normalize-audio заключается в том, что она расшифровывает код повторного кодирования файлов, поэтому происходит некоторая ухудшение качества звука. Но если вы не аудиофил, а ваши mp3 закодированы с высоким битрейтом, вы не заметите большой разницы.
То, что я заметил с помощью mp3gain, было то, что независимо от того, какие параметры я пытался, я не мог получить все в моей коллекции, чтобы быть точно таким же уровнем дБ, который я хочу, чтобы мне никогда не приходилось регулировать громкость с одного трека на другой. Этот скрипт делает именно это. Извините за то, что вы так долго наматывались. Надеюсь, это поможет.
В Ubuntu 16.4 У меня были проблемы с другими альтернативами CLI. Затем я нашел replaygain:
Этот пакет предоставляет пакет Python для вычисления значений Replay Gain аудиофайлов и нормализации объема этих файлов в соответствии со значениями. Также отправляются два основных сценария, использующих эти возможности. Replay Gain - это предлагаемый стандарт, предназначенный для решения самой проблемы изменения объема аудиофайлов.Установить: sudo apt install python-rgain.
replaygain --force *.mp3
-f, --force Пересчитать коэффициент повтора, даже если файл уже содержит информацию об усилении. Мне больше всего понравился ответ Нила, потому что он не вносит корреляции между аудиофайлами: просто выберите один уровень усиления и настройте все на него.
Однако у меня возникли некоторые проблемы, анализирующие вывод с некоторыми файлами, которые у меня есть. Существует также одна неприятная проблема с bc: она не делает реального округления, она только усекает.
Итак, в конце концов я отказался от сценариев оболочки и перешел на python.
Примечание1: часть exiftool может быть чрезмерной, но я хотел быть на 100% уверен, что исходный биттрейт будет сохранен.
Примечание1: это перезапишет оригиналы, если вы хотите сохраните их, используйте -backup в последнем вызове normalize-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()