एमपी 3 फ़ाइलों में ध्वनि को सामान्य कैसे करें


39

मुझे लगता है कि मेरे पास एमपी 3 फ़ाइलों में ध्वनि को सामान्य करने का एक तरीका है। कुछ में कम ध्वनि होती है, जबकि अन्य लाउड होते हैं इसलिए मुझे गीत के आधार पर वॉल्यूम को ऊपर या नीचे करना पड़ता है। सभी फ़ाइलों के लिए ऐसा करने के क्या तरीके हैं। मैं विशेष रूप से इसे टर्मिनल के माध्यम से करना चाहता हूं, लेकिन GUI तरीके भी स्वीकार किए जाते हैं।


खेलते समय सामान्यीकरण के लिए: askubuntu.com/questions/95716/… । हालांकि यह आपकी एमपी 3 फ़ाइल सामग्री को नहीं बदलेगा - लाभ का हो सकता है;)
तकक

खेलते समय नहीं, हर बार इसे सेट करना चाहते हैं या एक खिलाड़ी को हर बार सामान्य सेट करना होता है जो मैं गाने सुनना चाहता हूं। उदाहरण के लिए, हम कहते हैं कि मैं गाने को एक आइपॉड शफल या एक एमपी 3 सक्षम खिलाड़ी में सुनने के लिए एक पेन ड्राइव पर कॉपी करना चाहता हूं।
लुइस अल्वारादो

@Takkat BTW अच्छी तरह से उस अन्य प्रश्न में किया। अच्छी जानकारी।
लुइस अल्वारादो

1
मेरी पत्नी ने सिर्फ ऑडेसिटी पद्धति का परीक्षण किया, और इसने पूरी तरह से काम किया! सिफारिश की। कृपया, जब लोग सलाह मांगें, क्योंकि वे विशेषज्ञ नहीं हैं। इसलिए उन्हें कमांड लाइन टूल का उपयोग करने के लिए न कहें, जब वे ऑडेसिटी जैसे आसान ग्राफिकल टूल के साथ काम कर सकते हैं। नए लिनक्स उपयोगकर्ताओं को टर्मिनल खोलने और कमांड लाइन उपकरण चलाने के लिए कहना उन्हें केवल उबंटू से दूर कर देगा, यह महसूस करने के साथ कि विंडोज सरल है, लिनक्स मुश्किल है। यह आश्चर्य की बात नहीं है कि डॉस मर चुका है, लेकिन विंडोज जीवित है।

यह बहुत अच्छा है कि आपकी पत्नी चित्रमय तरीके से पता लगाने में सक्षम थी, लेकिन क्या आप उस हिस्से को याद करते हैं जहां सवाल पूछने वाला व्यक्ति विशेष रूप से टर्मिनल के माध्यम से इसे प्राप्त करना चाहता था?
रिचर्ड

जवाबों:


22

धृष्टता

दुस्साहस के साथ हम सूची में कई फाइलों के रूपांतरण या प्रभाव को लागू करने के लिए आसानी से फाइलों को बैच सकते हैं । ऐसा करने के लिए हमें पहले एक "चेन" को परिभाषित करना होगा जिसमें हम लागू होने वाले प्रभावों को शामिल करेंगे।

यह "फ़ाइल -> संपादन जंजीरों ..." के साथ किया जाता है । अब नई विंडो में एक नई श्रृंखला सम्मिलित करने के लिए बाईं ओर नीचे दिए गए ऐड बटन को दबाएं (इसे एक समझदार नाम दें):

यहाँ छवि विवरण दर्ज करें

फिर प्रभाव चुनें और यह श्रृंखला में सम्मिलित करने के लिए पैरामीटर है (यहां डिफ़ॉल्ट मान और सामान्यीकृत प्रभाव के लिए दिखाया गया है)।

महत्वपूर्ण: डिस्क में परिणामी रूपांतरण को सहेजने के लिए हमें हमेशा "निर्यात एमपी 3" (या किसी अन्य निर्यात प्रारूप) को भी जोड़ना होगा ।

जब इस विंडो को "फ़ाइल -> लागू श्रृंखला ..." खोलने के लिए ओके के साथ छोड़ दिया जाए । हमारे द्वारा अभी बनाई गई श्रृंखला का चयन करें और "फाइल पर लागू करें ..." के साथ आपकी ज़रूरत की सभी फ़ाइलों को लोड करें । खुलने वाली फ़ाइल चयनकर्ता से कई फ़ाइलों को चुना जा सकता है।

यहाँ छवि विवरण दर्ज करें

संसाधित फ़ाइलों को मूल पथ में " क्लीन किए गए " एक नए उपनिर्देशिका में सहेजा जाएगा ।


सॉक्स

संस्करण> 14.3 से हम --normकमांड लाइन पर या बैच प्रोसेसिंग के लिए ऑडियो को सामान्य बनाने के लिए sox फ़िल्टर का उपयोग कर सकते हैं :

sox --norm infile outfile

MP3-support को Sox में libsox-fmt-all के साथ जोड़ा गया है:

sudo apt install sox libsox-fmt-all

2
क्या ये उपकरण डिकोड और री-एनकोड करते हैं?
qed

आप पुन: एन्कोडिंग के बिना सामान्य नहीं कर सकते, कम से कम स्तर ...
Takkat

LADSPA और pulseaudio का उपयोग करते हुए गैर-विनाशकारी लाइव-सामान्यीकरण के लिए, पूछें 22ub पर askubuntu.com/questions/95716/…
Takkat

यह फिर से एनकोड करता है, इसलिए यह गुणवत्ता को कम करता है। यदि आप अपनी फ़ाइल गुणवत्ता को संरक्षित करना चाहते हैं तो मेरा उत्तर देखें। यदि आपका खिलाड़ी वॉल्यूम टैगिंग का समर्थन करता है, तो पुन: एन्कोडिंग आवश्यक नहीं है।
विल्

1
एक बैच में साबुन का उपयोग करने के लिए आप उपयोग कर सकते हैंfor f in *.mp3; do sox --norm "$f" /tmp/sox.mp3; mv -v /tmp/sox.mp3 "$f"; done
rubo77

30

देखिए @ mp3gain जो मेरे लिए सामान्य-ऑडियो से भी बेहतर है

mp3gain -r *.mp3

एक और उपयोगी संस्करण -c हो सकता है, जो यह पूछने से रोकता है कि क्या आप कई फ़ाइलों के लिए परिवर्तन करना चाहते हैं:

mp3gain -c -r *.mp3

जैसा कि मैन पेज में कहा गया है:

mp3gain सिर्फ चोटी सामान्यीकरण नहीं करता है, जैसा कि कई सामान्य लोग करते हैं। इसके बजाय, यह निर्धारित करने के लिए कुछ सांख्यिकीय विश्लेषण करता है कि फ़ाइल वास्तव में मानव कान में कितनी जोर से लगती है। इसके अलावा, mp3gain परिवर्तन पूरी तरह से दोषरहित हैं। परिवर्तन में कोई गुणवत्ता नहीं खोई है क्योंकि प्रोग्राम डिकोडिंग और री-एन्कोडिंग के बिना एमपी 3 फ़ाइल को सीधे समायोजित करता है।

नोट : उस पैकेज को ubuntu 15.04 के उद्देश्य से हटा दिया गया था ।

डेबियन python-rgainपैकेज को प्रतिस्थापन के रूप में प्रस्तावित करता है (लाभ यह है कि 'रिप्लेगैन' कई फ़ाइल स्वरूपों का समर्थन करता है, अर्थात् ओग वोरबिस, फ्लैक, वेवपैक और एमपी 3। साथ ही, यह आपको किसी भी फ़ाइल प्रकार में मौजूदा रिप्ले गेन जानकारी देखने की अनुमति देता है)। इसे स्थापित करने के बाद, भागो replaygain

टर्मिनल से अजगर-आरजीएन स्थापित करने के लिए, कमांड चलाएं

sudo apt-get install python-rgain

वैकल्पिक रूप से, .deb14.04 (नवीनतम) के लिए फ़ाइल यहां से प्राप्त करें । हमेशा की तरह स्थापित करें। उसके बाद, आपको sudo apt-get -f installकुछ निर्भरता मुद्दों को ठीक करने के लिए चलाने की आवश्यकता है ।


1
इसके अलावा, अगर आप टर्मिनल का उपयोग नहीं करना चाहते हैं, तो इसके लिए एक GUI उपलब्ध है, जिसका नाम ईज़ी-वाइजगैन-जीईडीके है, जो इसे बहुत आसान बनाता है!
गिल्बर्टोहासनोफ़ब नोव

यह सुपर उपयोगी है। मैं MP3Gain के विंडोज GUI का उपयोग करके सामान्यीकरण की गुणवत्ता से बहुत प्रभावित था, इसलिए मुझे इस जवाब को पाकर खुशी हुई जब मुझे लिनक्स कमांड लाइन समाधान की आवश्यकता थी। दूसरों के लिए निश्चित रूप से सिफारिश करेंगे।
एलेक्स पी। मिलर

क्या आप इसे स्थापित करने के बारे में कुछ जानकारी जोड़ सकते हैं? यह डिफ़ॉल्ट रूप से उबंटू के साथ नहीं आता है, और मुझे पैकेज नहीं मिल रहा है।
बलोएज माइकालिक

धन्यवाद ... Ubuntu 16.04 पर किसी भी निर्भरता त्रुटियों के बिना python-rgain स्थापित किया।
भारत मल्लपुर

साथ स्थापित करेंmkdir mp3gain; cd mp3gain; wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/mp3gain/1.5.2-r2-6/mp3gain_1.5.2-r2.orig.tar.gz; tar -xvzf mp3gain_1.5.2-r2.orig.tar.gz; make; sudo make install
rubo77

14

मैं इस परियोजना को सामान्यीकृत करूँगा , यह ऑडियो फाइलों को सामान्य करने के लिए एक कमांड-लाइन टूल है। जैसा आपको चाहिए वैसा ही दिखता है। बैच प्रसंस्करण कर सकते हैं और मध्यवर्ती स्वरूपों को फिर से शुरू करने की आवश्यकता नहीं है।

यह पैकेज रिपॉज में सामान्य-ऑडियो के रूप में है sudo apt-get install normalize-audio। यह डेबियन द्वारा बनाए रखा गया एक अपस्ट्रीम है, इसलिए इसे LTS या नए में कुछ भी होना चाहिए और एमपी 3 कम्पैटिबिलिटी (टेस्टेड) ​​के साथ बनाया गया है। man normalize-audioविकल्पों का पता लगाने के लिए एक अच्छा मैनपेज है लेकिन कमांड डिफॉल्ट अच्छी तरह से काम करते दिखाई देते हैं। बैच प्रसंस्करण के लिए (कई फ़ाइलों में वॉल्यूम को सामान्य करें), normalize-audio -b *.mp3या वाइल्डकार्ड का उपयोग करने के बजाय व्यक्तिगत फ़ाइल नाम निर्दिष्ट करें।


ओपी ऐसा करने के लिए निर्देश चाहता है। क्या आप उन्हें प्रदान कर सकते हैं?
सेठ

@iSeth मैं शुरू में केवल स्रोत के बारे में गलत था क्योंकि मैं इसे apt-cache खोज के साथ नहीं मिला था। मैंने डिबेट पैकेज के बारे में विवरण के साथ अपडेट किया है।
सीन_म

यह एक अच्छा विकल्प लगता है, लेकिन सही एनकोडर नहीं ढूंढ सकता है और "कोई एनकोडर उपलब्ध नहीं है" से छुटकारा पा सकता है । साथ की कोशिश की libsox-fmt-mp3, libavcodec-extra-b *.mp3केवल एक (यादृच्छिक?) फ़ाइल के साथ कुछ करें।
पाब्लो ए

4

पुनःप्रदर्शन करना

तेज़ और आसान replaygain:

यह पैकेज ऑडियो फ़ाइलों के रिप्ले गेन मूल्यों की गणना करने और मूल्यों के अनुसार उन फाइलों की मात्रा को सामान्य करने के लिए एक पायथन पैकेज प्रदान करता है । इन क्षमताओं का दोहन करने वाली दो मूल लिपियों को भी भेज दिया जाता है।

रीप्ले गेन एक प्रस्तावित मानक है जिसे ऑडियो फाइलों में अलग-अलग संस्करणों की समस्या को हल करने के लिए डिज़ाइन किया गया है।

स्थापित करें: sudo apt install python-rgain

replaygain --force *.mp3
  • -f, --force भले ही फ़ाइल में पहले से ही जानकारी हासिल हो, उसे फिर से प्राप्त करें।

चूंकि केवल replaygain मान की गणना / परिवर्तन, तेज भी है: एक औसत पीसी (Intel i7-6500U, 8GB RAM) के साथ यह दर ~ 20 फाइलें / मिनट थी।

संदर्भ


3

इसके लिए, मैं अपने 2 सेंट फेंक दूंगा। मैं ठीक उसी चीज की तलाश में था (केवल ओग फाइलों के लिए) और क्रंचबैंग फोरम में एक धागा शुरू किया। आप इसे यहाँ देख सकते हैं: सामान्यीकृत-ऑडियो को एमपी डिकोडर नहीं मिल सकता है

मूल रूप से मेरा समाधान # 8 पोस्ट में स्क्रिप्ट था। यह एमपी 3, फ्लैक और ओग इनपुट फाइलों के लिए काम करता है, संभवतः अन्य लेकिन निश्चित रूप से नहीं लहराते हैं।

बस एक फ़ाइल बनाएं (जो भी आप चाहते हैं उसे नाम दें, मैंने मेरा db_adjust_mp3 कहा है), chmod + x, और इसे अपने ~ / बिन फ़ोल्डर में चिपका दें। यह किसी भी लापता कोडेक डेटा में भी भरता है। उदाहरण:

मूल फ़ाइल: 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

मैंने यहां सामान्य-एमपी 3 का उपयोग करने के लिए स्क्रिप्ट को संशोधित किया है ताकि आप चाहें तो इसका उपयोग कर सकें:

#!/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 स्तर और -12 db के बीच के अंतर की गणना करती है, फिर लाभ को -12 db पर रखने के लिए एक लाभ समायोजन लागू करती है, जो कि मैंने पाया है कि मेरे लिए सबसे अच्छा काम करता है। यह पुनरावर्ती भी है, जो कई सबफ़ोल्डर में पूरे संगीत संग्रह या फ़ाइलों को करने के लिए बहुत अच्छा बनाता है। यदि आप एक अलग db स्तर सेट करना चाहते हैं, तो बस संख्या "12" के दोनों उदाहरणों को बदल दें, जो भी db स्तर आप उपयोग करना चाहते हैं। जैसा कि मैंने अपने क्रंचबैंग धागे में पोस्ट किया है, उपयोग इस प्रकार है:

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

हालाँकि, जब मैं अपने संगीत पुस्तकालय को एमपी 3 प्रारूप में रखता था, तो मैं फिलिप के सुझाव के अनुसार, एमपीगैन का भी उपयोग करता था। इसकी मृत सादगी बहुत अच्छी है और मुझे वास्तव में यह पसंद आया। सामान्यीकृत-ऑडियो के साथ समस्या यह है कि यह फाइलों को फिर से एन्कोड करता है, इसलिए कुछ ध्वनि क्षरण होता है। लेकिन जब तक आप एक ऑडियोफिले और आपके एमपी 3 को एक उच्च बिटरेट पर एन्कोड नहीं करते हैं, तब तक आपको बहुत अंतर नहीं देखना चाहिए।

हालांकि मैंने जो बात mp3gain के साथ देखी, वह यह थी कि कोई भी विकल्प नहीं था, जो मैंने कोशिश की थी कि मैं अपने संग्रह में सब कुछ ठीक उसी db स्तर पर नहीं पा सका, जो कि मैं चाहता हूं ताकि मुझे कभी भी एक ट्रैक से वॉल्यूम समायोजित न करना पड़े। अगला। यह स्क्रिप्ट ठीक वैसा ही करती है। इतने लंबे समय तक घुमावदार रहने के लिए क्षमा करें। उम्मीद है की यह मदद करेगा।


0

मुझे नील का जवाब सबसे ज्यादा पसंद आया, क्योंकि यह ऑडियो फाइलों के बीच सहसंबंध का परिचय नहीं देता है: बस एक लाभ स्तर चुनें और सब कुछ इसे समायोजित करें।

हालाँकि मुझे normalize-oggकुछ फ़ाइलों के साथ आउटपुट में पार्स करने में कुछ समस्याएँ थीं । bcइसके साथ एक बुरा मुद्दा यह भी है: यह वास्तविक गोलाई नहीं करता है, यह केवल छंटनी करता है।

इसलिए अंततः मैंने शेल स्क्रिप्टिंग को छोड़ दिया और अजगर के पास चला गया।

नोट 1 : एक्सफ़िल्टल भाग ओवरकिल हो सकता है लेकिन मैं 100% सुनिश्चित करना चाहता था कि मूल बिटरेट को संरक्षित किया जाएगा।

नोट 2: यह मूल को अधिलेखित कर देगा , यदि आप उन्हें संरक्षित करना चाहते हैं, तो अंतिम कॉल में उपयोग करें - बैकअप को सामान्य करने के लिए- ogg। लेकिन मुझे कॉपी को एक अलग, सुरक्षित, निर्देशिका में रखने के लिए अधिक व्यावहारिक पाया गया।

नोट 3: यह समाधान ओग फाइलों के साथ काम करता है, लेकिन इसे एमपी 3 के लिए अनुकूलित करने के लिए तुच्छ है, बस "ओग" की घटनाओं को "एमपी 3" के साथ बदलें।

यहाँ समस्या पर मेरा लेना है। नवीनतम संस्करण यहां पाया जा सकता है: 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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.