не удалось установить npm на ubuntu

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

Однако у меня возникли некоторые проблемы, анализирующие вывод с некоторыми файлами, которые у меня есть. Существует также одна неприятная проблема с 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()
1
задан 7 May 2014 в 19:02

5 ответов

Похоже, вы, вероятно, установили chris-lea node.js ppa, который в порядке. Тем не менее, вы не устанавливаете npm из этого ppa, поскольку он нарушает работу debian-пакетов. Вместо этого просто установите nodejs. Как только это будет установлено, запустите npm -v, вы увидите, что он установлен. Если вы не использовали chris-lea ppa, обновите свой вопрос о том, на какой веб-странице вы попали в Google, чтобы узнать, как установить nodejs на Ubuntu.

29
ответ дан 24 May 2018 в 08:03
  • 1
    Как он будет запускать «npm -v»? если он не может установить npm ...? – Mariano Argañaraz 30 November 2015 в 21:56
  • 2
    «Современный» apt-get install nodejs также npm обновили установку, поэтому я понимаю, что apt-get install npm следует избегать (!). – Peter Krauss 12 December 2015 в 23:58
  • 3
    См. stackoverflow.com/a/34244847/287948 – Peter Krauss 13 December 2015 в 01:09

Попробуйте установить NodeJs следующим образом:

sudo apt-get install nodejs

Поскольку NodeJs устанавливает узел и npm

5
ответ дан 24 May 2018 в 08:03

Проблема в реестре, выполните эту команду,

npm config set registry http://registry.npmjs.org/

Я работаю таким образом, проверьте, работает ли это для вас

0
ответ дан 24 May 2018 в 08:03
  • 1
    Как он будет запускать & npm config ... " если он не может установить npm ...? – Mariano Argañaraz 30 November 2015 в 21:57
  • 2
    Когда он запускает команду sudo apt-get install npm, она дает «неудовлетворительную ошибку зависимостей». Я заметил, что ошибка npm уже установлена, просто нужно установить реестр. – Jay Patel 1 December 2015 в 08:12

Сначала вам нужно установить PPA, чтобы получить доступ к его содержимому:

curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -

(Это для версии 9, которая является последней версией на момент написания).

И тогда

sudo apt-get install nodejs
0
ответ дан 24 May 2018 в 08:03

Установка nodejs установит npm, поэтому просто удалите nodejs, а затем переустановите его:

sudo apt-get remove nodejs
-2
ответ дан 24 May 2018 в 08:03

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

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