FLAC dosyalarını AAC'ye (tercihen VBR 320k +) nasıl dönüştürebilirim?


12

CD'leri FLAC'a kadar yedekledim ve sonra android telefonumda ve eşimin iPhone'unda taşınabilirlik için AAC (.m4a) dosyalarına kod dönüştürüyorum. Mac'te XLD kullanıyordum ve harika bir iş çıkarıyor, ancak bunu yapmak ve kendi Debian kutumda yapabilmek için Mac'ini çalmak istemem. Aşağıdaki işler:

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

Ancak aşağıdakiler (iyi değil, ses kalitesi için 320'yi göz ardı eder ve yukarıdaki ile aynı sonuçları verir):

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

Çevrimiçi "ffmpeg" gibi başka komutlar buldum ama görünüşe göre çoğu veya hepsi yukarıdaki avconv yöntemi lehine amortismana tabi tutuldu. Herhangi bir yardım büyük mutluluk duyacağız! Gerçek VBR değilse 320 Kbps ile yaşayabilirim, ancak en az 320 LC LCBR en iyisi olurdu.


Belirtmeliyim ki, 192K civarında bir dosya alıyorum ve avconv için man sayfasının ses kalitesini -aq ile belirtebileceğinizi söylese de, ortaya çıkan dosyada bir fark yok. 320'ye bir 'k' eklersem bir segmentasyon hatası alıyorum.
statik

320k + sizin için uygunsa, WavPack'i (karma mod) kullanarak daha güvenli olabilirsiniz (üçüncü taraf yazılımlarda, örneğin deadbeef'de Android'de oynatılabilir). Zorunlu kayıplı dönüşümleri olmayan sıkıştırma için tamamen farklı bir yöntem kullanır ve tek değiş tokuş, bit hızına karşı nicelik gürültüsü miktarıdır, komik eserler imkansızdır. En azından denemenizi öneririm. İPhone burada olsa sorun olabilir: /
Görünen Ad

Yanıtlar:


16

Her şeyden önce, -aqkalite tabanlı bir değişken bit hızı ayarlar - Bence aradığınızı düşünüyorum -ab(ben bir ffmpeg kullanıcısı olduğumu unutmayın, bu yüzden avconv sözdizimi bilgim sınırlıdır - ne kadar sürüklendiğine dair hiçbir fikrim yok çatal).

Ne olursa olsun, dahili avconv / ffmpeg AAC kodlayıcı oldukça kötüdür.

fdk_aac

Avconv / ffmpeg için tek gerçekten iyi AAC kodlayıcı libfdk_aac'tır - ancak bunun lisansı GPL ile uyumsuzdur, bu yüzden ona erişmek için kendiniz derlemeniz gerekir (bu bir ffmpeg derleme kılavuzu, çünkü avconv için bir tane bilmiyorum - Ubuntu kılavuzu Debian için iyi olmalı, çünkü orada Ubuntu'ya özgü bir şey olduğunu düşünmüyorum).

Elinize geçtikten sonra AAC kodlama kılavuzunu izleyin ; Fdk_aac'ın -vbrseçeneğini denemenizi şiddetle tavsiye ederim - denediğim tüm dosyalarda bana 3 şeffaf ses ayarı, daha yüksek bir bit hızının plasebounu istiyorsanız veya ses mühendisi iseniz, 5.

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

Gerek yok -map_metadata, çünkü ffmpeg otomatik olarak meta verileri aktaracaktır (ve avconv'un da emin olacağından eminim).

Sabit bit hızı 320 kbit / s (ciddi olarak, buna değmez, AAC, yaklaşık 128 kbit / s civarında orijinal CD sese karşı ses şeffaflığı sağlar):

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

neroaacenc

Nero'nun AAC kodlayıcısı fdk_aac ve qaac (Quicktime AAC) ile aynı düzeyde düşünülmelidir. Farklı insanlar hangisinin daha iyi olduğuna dair farklı görüşler verecektir, ancak sadece çok düşük bit hızlarında herhangi bir fark göreceksiniz ve herkes hepsinin çok yüksek kalitede olduğunu kabul ediyor.

neroAacEnckullanılabilir Nero web sitesinden . Sıkıştırın ve $ PATH'nıza bir yere koyun.

Ne yazık ki neroAacEncWAV sesini yalnızca giriş olarak alabilir; kod çözücü olarak avconv veya ffmpeg kullanarak bu sorunu çözebilirsiniz:

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

Ne yazık ki, bu meta verileri çıkarır; aktarmak için avprobe / ffprobe (with -show_format) komutunu kullanın ve eklemek için neroAacTag kullanın. Bir bash betiği muhtemelen sıraya girerdi.

NeroAacEnc'deki HydrogenAudio sayfasına bakın : bellekten -q0,4 ayarı bana harika geliyordu. Sen bir bit hızı hedefleyebilir -br(yine, ben bu olacağını düşünüyorum yolu overkill):

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

EDIT: burada ses dosyalarını neroAacEnc ile m4a'ya dönüştürmek, sonra ffprobe ve neroAacTag ile etiketlemek için bir komut dosyasıdır (hepsinin $ PATH içindeki bir dizinde olmasını gerektirir). Birden fazla girdi dosyası alabilir, bu nedenle olarak convert-to-m4akaydederseniz, bir dizindeki her FLAC dosyasını

convert-to-m4a *.flac

Sadece FLAC dosyalarıyla sınırlı değildir; ffmpeg / avconv'nizin kodunu çözebileceği tüm ses formatları çalışır. Ffprobe ve ffmpeg'i avprobe ve avconv olarak değiştirmek isteyebilirsiniz:

#!/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

Yanıtınızı takdir ediyorum ve en kısa zamanda deneyeceğim ve nasıl gittiğini size bildireceğim. İlk / ffmpeg seçeneğini tercih ediyorum, ama ffmpeg sanırım avconv kullanmamı söyledi çünkü sanırım yeni / tercih edilen bir yol. (FYI)
statik

1
Aslında, hem ffmpeg hem de avconv aktif olarak geliştirilmiş projelerdir; Debian / Ubuntu depolarındaki 'ffmpeg' gerçek ffmpeg değil, avconv geliştiricileri tarafından sağlanan sahte bir ffmpeg'dir ve bu mesaj çok karışıklığa neden olmuştur. Bkz 'Kim bana ffmpeg, libav ve avconv arasındaki farkı ve ilişkiyi söyleyebilir?' ve 'FFmpeg / Libav durumu' .
evilsoup

Ayrıca, buradaki komut dosyasının kapsamlı bir şekilde test edilmediğine dikkat edin, bazı meta verilerle iyi kırılabilir
evilsoup

2
"kendiniz derlemeniz gerekecek": @static bir Mac'ten bahsettiğinden, ffmpeg'i libfdk_aac ile homebrew ile kolayca kurduğumu söylemenin ihtiyatlı olduğunu düşündüm. brew install ffmpeg --with-fdk-aac. ile seçeneklerin bir listesini alabilirsiniz brew info ffmpeg. Ama
eşinizin Mac'ini çalmamak

@ macmadness86 Bu ilginç ama sanırım (açıkçası bir avukat değilim) FDK-AAC'ın ffmpeg'in kullandığı GPL lisansı ile uyumsuz olduğundan, ffmpeg'in yüklü bir sürümünü FDK-AAC ile dağıtmak aslında yasa dışıdır. Bunu homebrew üzerinden yapan herkes potansiyel olarak kendilerini rahatsız edebilir.
evilsoup

6

FLAC AAC dönüştürmek için FFmpeg kullanmanızı öneririz. FFmpeg, Mac OS X makinesine demleme ile kolayca monte edilir:

brew install ffmpeg

Ardından, geçerli dizindeki tüm FLAC dosyalarını AAC'ye dönüştürmek için aşağıdaki komutu çalıştırın:

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

Ve bunları MP3'e dönüştürmek için:

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

2
Flac 3.1.4 kullanarak AAC dönüşümü için aşağıdakileri kullanmak zorunda kaldım:for i in *flac;do of="${i/.flac/.m4a}"; ffmpeg -i "${i}" -vn -acodec aac -b:a 320k -f mp4 -y "${of}";done
Yannick Wurm

2

Bu, desteklenen herhangi bir ses biçimini AAC'ye dönüştürmek için komut dosyası sarma ffmpeg'imdir (ffmpeg wiki tarafından önerilen aac kodlayıcı olan libfdk-aac kodlayıcı kullanılarak).

#!/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

Komut satırı yardım mesajı:

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

Tamamlayıcı Cevap (evilsoup'un cevabına)

İşlemek için

  • Alt dizinlerdeki tüm dosyalar
  • Dosya adlarındaki boşluklar ( find's -print0+ xarg' s -0)
  • (Kendi kaynak flac dosyaları olarak aynı dizinde yeni oluşturulan m4a dosyalarını tutun $1gelen sh -cbireyin konumsal argüman --FILEtarafından kümesi xargs ' -I)

Tek astar

find . -name '*.flac' -print0 | xargs -0 -I FILE sh -c 'ffmpeg -i "$1" -c:a libfdk_aac -vbr 3 "${1%.flac}.m4a"' -- FILE
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.