मैं FLAC फ़ाइलों को AAC (अधिमानतः VBR 320k +) में कैसे बदलूँ?


12

मैं अपने सीडी वापस FLAC और फिर मेरे Android फोन और पत्नी के iPhone पर पोर्टेबिलिटी के लिए AAC (.m4a) फ़ाइलों को ट्रांसकोड करता हूं। मैं मैक पर एक्सएलडी का उपयोग कर रहा था और यह बहुत अच्छा काम करता है, लेकिन मैं ऐसा करने के लिए उसके मैक को नहीं चुराऊंगा और इसे अपने डेबियन बॉक्स पर करने में सक्षम हूं। निम्नलिखित कार्य:

avconv -i "inputfile.flac" -acodec aac -strict experimental "outputfile.m4a" -map_metadata "inputfile.flac":"outputfile.m4a"

लेकिन निम्नलिखित नहीं है (अच्छी तरह से यह करता है, लेकिन ऑडियो गुणवत्ता के लिए 320 की उपेक्षा करता है और ऊपर के रूप में परिणाम):

avconv -i "inputfile.flac" -acodec aac -aq 320 -strict experimental "outputfile.m4a" -map_metadata "inputfile.flac":"outputfile.m4a"

मुझे "ffmpeg" जैसे अन्य आदेश ऑनलाइन मिले, लेकिन जाहिरा तौर पर उनमें से अधिकांश या सभी उपरोक्त एवोकॉन विधि के पक्ष में मूल्यह्रास हैं। किसी भी तरह की सहायता का स्वागत किया जाएगा! मैं 320 केबीपीएस के साथ रह सकता हूं अगर वीबीआर सच नहीं है, लेकिन कम से कम 320 का एलसी वीबीआर सबसे अच्छा होगा।


मुझे यह बताना चाहिए कि मुझे गुणवत्ता के बिना 192K के आसपास एक फ़ाइल मिलती है, और हालांकि एवोकॉन के लिए मैन पेज कहता है कि आप ऑडियो गुणवत्ता को -aq के साथ निर्दिष्ट कर सकते हैं, परिणामस्वरूप फ़ाइल में कोई अंतर नहीं है। अगर मुझे 320 में 'k' जोड़ते हैं तो मुझे एक विभाजन दोष मिलता है।
स्थिर

यदि 320k + आपके लिए ठीक है, तो आप वास्तव में WavPack (हाइब्रिड मोड) का उपयोग करके सुरक्षित हो सकते हैं (यह थर्ड पार्टी सॉफ्टवेयर में एंड्रॉइड पर खेलने योग्य है, उदाहरण के लिए डेडबीफ में)। यह संपीड़न के लिए पूरी तरह से अलग तरीके का उपयोग करता है, जिसमें कोई अनिवार्य हानिपूर्ण रूपांतर नहीं होता है, और एकमात्र व्यापार-बंद मात्रा का शोर बनाम बिटरेट की मात्रा है, मजेदार कलाकृतियां असंभव हैं। मेरा सुझाव है कि कम से कम कोशिश कर रहा हूं। IPhone यहाँ समस्या हो सकती है, हालांकि: /
प्रदर्शन नाम

जवाबों:


16

सबसे पहले, -aq एक गुणवत्ता-आधारित चर बिट दर सेट करता है - मुझे लगता है कि आप देख रहे हैं -ab(ध्यान दें कि मैं एक ffmpeg उपयोगकर्ता हूं, इसलिए एवोकॉन सिंटैक्स का मेरा ज्ञान सीमित है - मुझे नहीं पता कि यह अब तक कैसे बहाव है कांटा)।

बावजूद, निर्मित एवोकॉन / एफएफएमईजी एएसी एनकोडर काफी खराब है।

fdk_aac

Avconv / ffmpeg के लिए वास्तव में केवल अच्छा AAC एनकोडर libfdk_aac है - लेकिन इसके लिए लाइसेंस GPL के साथ असंगत है, इसलिए इसे एक्सेस करने के लिए आपको अपना खुद का संकलन करना होगा (यह एक ffmpeg संकलन गाइड है, क्योंकि मैं डॉन एवोकन के लिए एक का पता नहीं है - उबंटू गाइड डेबियन के लिए ठीक होना चाहिए, क्योंकि मुझे नहीं लगता कि वहां उबंटू-विशिष्ट कुछ भी है)।

एक बार जब आप इसे प्राप्त कर लेते हैं, तो एएसी एन्कोडिंग गाइड का पालन करें ; मैं दृढ़ता से fdk_aac के -vbrविकल्प को आज़माने की सलाह देता हूं - मेरे द्वारा कोशिश की गई सभी फ़ाइलों पर पारदर्शी 3 ध्वनियों की एक सेटिंग, यदि आप उच्च बिट दर का प्लेसबो चाहते हैं, या आप एक साउंड इंजीनियर हैं, तो आप एक सेटिंग की कोशिश कर सकते हैं 5।

ffmpeg -i input.flac -c:a libfdk_aac -vbr 3 output.m4a

की कोई ज़रूरत नहीं -map_metadata , क्योंकि ffmpeg स्वतः मेटाडेटा को स्थानांतरित कर देगा (और मुझे पूरा यकीन है कि एवोकॉन भी होगा)।

एक निश्चित बिट दर 320 kbit / s के लिए (गंभीरता से, यह इसके लायक नहीं है, AAC लगभग 128 kbit / s पर ऑडियो सीडी पारदर्शिता बनाम मूल सीडी ऑडियो प्राप्त करता है):

ffmpeg -i input.flac -c:a libfdk_aac -b:a 320k

neroAacEnc

नीरो के एएसी एनकोडर को fdk_aac और qaac (क्विकटाइम एएसी) के साथ ऑन-सम माना जाना चाहिए। अलग-अलग लोग अलग-अलग राय देंगे, जिस पर एक बेहतर है, लेकिन आप केवल बहुत कम दरों पर किसी भी मतभेद को नोटिस करेंगे, और सभी सहमत हैं कि वे सभी बहुत उच्च गुणवत्ता वाले हैं।

neroAacEncनीरो वेबसाइट से उपलब्ध है । इसे खोलकर अपने $ PATH में कहीं रख दें।

दुर्भाग्य से neroAacEncइनपुट के रूप में केवल WAV ऑडियो ले सकते हैं; आप एक डिकोडर के रूप में एवोकॉन या एफएफएमपीपी का उपयोग करके इसे प्राप्त कर सकते हैं:

avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -q 0.4 output.m4a

दुर्भाग्य से, यह मेटाडेटा पट्टी करेगा; उस पर स्थानांतरित करने के लिए, -show_formatनिकालने के लिए और neroAacTag डालने के लिए avprobe / ffprobe (के साथ ) का उपयोग करें। एक बैश स्क्रिप्ट शायद क्रम में होगी।

NeroAacEnc पर HydrogenAudio पेज देखें : मेमोरी से, -q0.4 की एक सेटिंग मुझे बहुत अच्छी लगी । आप के साथ एक बिट दर को लक्षित कर सकते -br(फिर से, मुझे लगता है कि यह हो सकता है जिस तरह से overkill):

avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -br 320000 output.m4a

संपादित करें: यहाँ ऑडियो फ़ाइलों को m4a को neroAacEnc के साथ परिवर्तित करने के लिए एक स्क्रिप्ट है, फिर ffprobe और neroAacTag के साथ टैगिंग (उन सभी को आपके $ PATH में एक निर्देशिका में होना आवश्यक है)। यह कई इनपुट फ़ाइलें ले सकता है, इसलिए यदि आप इसे इस रूप में सहेजते हैं, तो आप convert-to-m4aप्रत्येक FLAC फ़ाइल को एक निर्देशिका में बदल सकते हैं

convert-to-m4a *.flac

यह सिर्फ FLAC फ़ाइलों तक सीमित नहीं है; आपके ffmpeg / avconv को डिकोड करने वाला कोई भी ऑडियो प्रारूप काम करेगा। आप ffprobe और ffmpeg को avprobe और avconv में बदलना चाह सकते हैं:

#!/usr/bin/env bash

until [[ "$1" = '' ]]; do
  ffmpeg -i "$1" -f wav - | neroAacEnc -if - -ignorelength -q 0.4 "${1%.*}.m4a"
  tags=()
  while read -r; do
    tags+=("$REPLY")
  done < <(ffprobe -i "$1" -show_format 2>/dev/null | sed -ne 's/date/year/' -e '/TAG:/s/TAG/-meta/p')
  neroAacTag "${1%.*}.m4a" "${tags[@]}"
  shift
done
exit 0

मैं आपकी प्रतिक्रिया की सराहना करता हूं और जितनी जल्दी हो सके कोशिश करूंगा और आपको बताऊंगा कि यह कैसे होता है। मैं पहले / ffmpeg विकल्प को पसंद करूंगा, लेकिन ffmpeg ने मुझे avconv का उपयोग करने के लिए कहा है क्योंकि यह नया / पसंदीदा तरीका है जो मुझे लगता है। (FYI करें)
स्थिर

1
@static वास्तव में, ffmpeg और avconv दोनों सक्रिय रूप से विकसित परियोजनाएं हैं; डेबियन / उबंटू रिपॉजिटरी में 'ffmpeg' असली ffmpeg नहीं है, लेकिन एवोकॉन डेवलपर्स द्वारा प्रदान किया गया एक नकली है, और उस संदेश ने बहुत भ्रम पैदा किया है। देखें 'मुझे ffmpeg, libav और avconv के बीच अंतर और संबंध कौन बता सकता है?' और 'FFmpeg / Libav स्थिति'
evilsoup

यह भी ध्यान दें कि यहां की स्क्रिप्ट का बड़े पैमाने पर परीक्षण नहीं किया गया है, यह कुछ मेटाडेटा के साथ अच्छी तरह से टूट सकता है
evilsoup

2
"आपको अपना खुद का संकलन करना होगा": चूंकि @static ने एक मैक का उल्लेख किया है, तो मैंने यह कहना उचित समझा कि मैंने ffmpeg को libfdk_aac के साथ आसानी से होमब्रेव के साथ स्थापित किया है। brew install ffmpeg --with-fdk-aac। आप के साथ विकल्पों की एक सूची प्राप्त कर सकते हैं brew info ffmpeg। लेकिन अच्छा विचार है कि अपनी पत्नी के मैक को चोरी न करें :)
जोनाथन कोमार

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

6

मैं FACmpeg का उपयोग करके FLAC से AAC में कनवर्ट करने का सुझाव देता हूं। FFmpeg आसानी से काढ़ा के साथ Mac OS X मशीन पर लगाया जाता है:

brew install ffmpeg

फिर वर्तमान निर्देशिका में सभी FLAC फ़ाइलों को AAC में बदलने के लिए निम्न कमांड चलाएँ:

for i in *flac;do of="${i/.flac/.m4a}"; ffmpeg -i "${i}" -vn -acodec libvo_aacenc -b:a 320k -f mp4 -y "${of}";done

और उन्हें एमपी 3 में बदलने के लिए:

for i in *flac;do of="${i/.flac/.mp3}"; ffmpeg -i "${i}" -vn -acodec mp3 -b:a 320k -f mp3 -y "${of}";done

2
फ्लैक 3.1.4 का उपयोग करके मुझे एएसी रूपांतरण के लिए निम्नलिखित का उपयोग करना था: for i in *flac;do of="${i/.flac/.m4a}"; ffmpeg -i "${i}" -vn -acodec aac -b:a 320k -f mp4 -y "${of}";done
यानिक वुर्म

2

यह किसी भी समर्थित ऑडियो प्रारूप को AAC में परिवर्तित करने के लिए ffmpeg को लपेटने वाली मेरी स्क्रिप्ट है (libfdk-aac एनकोडर जो ffmpeg विकि द्वारा अनुशंसित aac एनकोडर है)।

#!/usr/bin/env python2.7

from optparse import OptionParser
from subprocess import call
from os.path import splitext
import sys, os

def ffaac(filename, opts):
    cmd = ['ffmpeg', '-hide_banner', '-y', '-i', filename, 
            '-vn', '-c:a', 'libfdk_aac']
    profile = {'lc':'aac_low', 'he':'aac_he', 'he2':'aac_he_v2', 
            'ld':'aac_ld', 'eld':'aac_eld'}
    if not opts.br and not opts.vbr:
        cmd.extend(['-b:a', '320k'])
    if opts.br:
        cmd.extend(['-b:a', str(opts.br)+'k'])
    if opts.vbr:
        cmd.extend(['-vbr', opts.vbr])
    if opts.ar:
        cmd.extend(['-ar', opts.ar])
    if opts.ch:
        cmd.extend(['-ac', opts.ch])
    cmd.extend(['-profile:a', profile[opts.prof]])
    if opts.prof == 'eld' and opts.sbr:
        cmd.extend(['-eld_sbr', '1'])
    cmd.extend(['-f', 'adts'])

    if filename.lower().endswith('.aac'):
        return
    outfile = splitext(filename)[0] + '.aac'
    cmd.append(outfile)

    return call(cmd)

if __name__=='__main__':
    parser = OptionParser(sys.argv[0]+' [OPTIONS] FILE ...')
    parser.add_option('-b', metavar='NUM', type=int, dest='br', help='bitrate')
    parser.add_option('-r', metavar='NUM', choices=['8000','11025','16000','22050','32000', '44100', '48000'], dest='ar', help='sample rate: 8000/11025/22050/32000/44100/48000')
    parser.add_option('-c', metavar='NUM', choices=['1','2'],dest='ch', help='channels: 1/2')
    parser.add_option('-p', metavar='TYPE',choices=['lc', 'he', 'he2', 'ld', 'eld'], default='lc', dest='prof', help='profile: lc/he/he2/ld/eld')
    parser.add_option('-v', metavar='QUAL', choices=['1', '2', '3', '4', '5'], dest='vbr', help='vbr quality: 1/2/3/4/5')
    parser.add_option('-s', action='store_true', dest='sbr', help='use SBR for ELD')
    parser.add_option('-d', action='store_true', dest='delete',help='delete source after converting')
    opts,  args = parser.parse_args()
    for f in args:
        if ffaac(f, opts) == 0 and opts.delete :
            try:
                os.remove(f)
            except OSError:
                pass

कमांड लाइन मदद संदेश:

Usage: /Users/leon/bin/ffaac.py [OPTIONS] FILE ...

Options:
  -h, --help  show this help message and exit
  -b NUM      bitrate
  -r NUM      sample rate: 8000/11025/22050/32000/44100/48000
  -c NUM      channels: 1/2
  -p TYPE     profile: lc/he/he2/ld/eld
  -v QUAL     vbr quality: 1/2/3/4/5
  -s          use SBR for ELD
  -d          delete source after converting

1

अनुपूरक उत्तर (बुराई के जवाब के लिए)

संभालने के लिए

  • उपनिर्देशिकाओं में सभी फाइलें
  • फ़ाइलनामों में रिक्त स्थान ( find's -print0+ xarg' s -0)
  • (उनके स्रोत flac फ़ाइलों के रूप में एक ही निर्देशिका में नव निर्मित m4a फ़ाइलें रखें $1से sh -cकी स्थितीय तर्क --FILEद्वारा सेट xargs ' -I)

एक लाइन

find . -name '*.flac' -print0 | xargs -0 -I FILE sh -c 'ffmpeg -i "$1" -c:a libfdk_aac -vbr 3 "${1%.flac}.m4a"' -- FILE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.