Як конвертувати файли FLAC в AAC (бажано VBR 320k +)?


12

Я повертаю свої компакт-диски до FLAC, а потім перекодую до файлів AAC (.m4a) для перенесення на моєму Android-телефоні та iPhone дружини. Я використовував XLD на Mac, і це робить чудову роботу, але я краще не вкрав її Mac, щоб це зробити, і був би в змозі це зробити в моїй власній коробці Debian. Наступні роботи:

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", але, мабуть, більшість або всі з них амортизуються на користь вищевказаного методу avconv. Будь-яка допомога буде дуже вдячна! Я міг би жити з 320 Кбіт / с, якби не правда VBR, але LC VBR принаймні 320 був би найкращим.


Я мушу зазначити, що не вказуючи, я отримую якісний файл близько 192K, і хоча сторінка man для avconv каже, що ви можете вказати якість звуку за допомогою -aq, різниці в отриманому файлі немає. Я отримую помилку сегментації, якщо додаю 'k' до 320.
статичний

Якщо 320k + для вас нормально, вам може бути насправді безпечніше, використовуючи WavPack (гібридний режим) (його можна відтворити на Android у програмному забезпеченні сторонніх виробників, наприклад, у мертвій яловичині). Він використовує зовсім інший метод стиснення, який не має жодних обов'язкових перетворень втрат, і єдиний компроміс - це кількість шуму квантування в порівнянні з бітрейтом, смішні артефакти неможливі. Я б запропонував принаймні спробувати. Тут може виникнути проблема з iPhone: /
Відображати ім'я

Відповіді:


16

Перш за все, -aqвстановлює змінну швидкість передачі на основі якості - я думаю, що ви шукаєте -ab(зауважте, що я користувач ffmpeg, тому мої знання про синтаксис avconv обмежені - я не маю уявлення, наскільки це проходить з моменту виделка).

Незалежно від цього вбудований кодер AAC avconv / ffmpeg AAC досить поганий.

fdk_aac

Єдиний дійсно хороший кодер AAC для avconv / ffmpeg - libfdk_aac - але ліцензія на це несумісна з GPL, тому для отримання доступу до нього вам доведеться скласти свій власний (це посібник з компіляції ffmpeg, оскільки я не Я не знаю одного для avconv - керівництво по Ubuntu має бути чудовим для Debian, оскільки я не думаю, що там є щось специфічне для Ubuntu).

Отримавши це, дотримуйтесь посібника з кодування AAC ; Я настійно рекомендую спробувати -vbrваріант fdk_aac - налаштування 3 звуків, прозорих для мене на всіх файлах, які я пробував, якщо ви хочете, щоб плацебо вищої швидкості передачі, або ви звукорежисер, ви можете спробувати налаштування 5.

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

Не потрібно -map_metadata, оскільки ffmpeg автоматично передасть метадані (і я впевнений, що і avconv теж).

Для фіксованої швидкості передачі бітів 320 кбіт / с (серйозно, цього не варто, AAC досягає прозорості звуку порівняно з оригінальним аудіо компакт-диска зі швидкістю фіксованого 128 кбіт / с):

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

neroAacEnc

Кодер AAC Nero слід вважати нарівні з fdk_aac і qaac (Quicktime AAC). Різні люди дадуть різні думки щодо того, хто з них кращий, але ви помітите будь-які відмінності при дуже низьких швидкостях передачі, і всі згодні, що всі вони дуже якісні.

neroAacEncдоступний на веб-сайті Nero . Розпакуйте його і покладіть десь у вашому $ PATH.

На жаль, ви neroAacEncможете приймати лише WAV-аудіо як вхід; Ви можете обійти це, використовуючи avconv або ffmpeg як декодер:

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

На жаль, це позбавить метаданих; щоб перенести це над, використовуйте avprobe / ffprobe (with -show_format) для вилучення та neroAacTag для вставки. Базовий сценарій, ймовірно, буде в порядку.

Дивіться сторінку HydrogenAudio на neroAacEnc : з пам’яті -qналаштування 0,4 звучало для мене чудово. Ви можете націлити бітрейт з -br(знову ж , я думаю , що це буде шлях зайвим):

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

EDIT: ось сценарій для перетворення аудіофайлів у 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' у сховищах Debian / Ubuntu - це не справжній ffmpeg, а підроблений, наданий розробниками avconv, і це повідомлення викликало багато плутанини. Див. "Хто може сказати мені різницю та відношення між ffmpeg, libav та avconv?" та "Ситуація FFmpeg / Libav" .
зол

Також зауважте, що скрипт тут не пройшов широку перевірку, він цілком може зірватися з деякими метаданими
evilsoup

2
"вам доведеться скласти своє": оскільки @static згадав про Mac, я вважав за доцільне сказати, що я встановив ffmpeg з libfdk_aac легко з домашньою мовою. brew install ffmpeg --with-fdk-aac. ви можете отримати список варіантів за допомогою brew info ffmpeg. Але гарна ідея не красти Mac вашої дружини :)
Джонатан Комар

@ macmadness86 Це цікаво, але я думаю (я, очевидно, не юрист), оскільки оскільки FDK-AAC несумісний з ліцензією GPL, яку використовує ffmpeg, поширювати версію ffmpeg із встановленою FDK-AAC заборонено. Хто б це не робив над домашньою картоплею, потенційно може потрапити на місце турботи.
evilsoup

6

Я пропоную використовувати FFmpeg для перетворення з 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

І конвертувати їх у MP3:

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, для перетворення AAC мені довелося використовувати наступне: 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

Це мій сценарій, що завершує ffmpeg для перетворення будь-якого підтримуваного аудіоформату в AAC (використовуючи кодер libfdk-aac, який є рекомендованим кодером Aac у wif ffmpeg).

#!/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)
  • Зберігайте новостворені файли m4a в тому самому каталозі, що і їх вихідні файли flac ( $1з sh -cпозиційного аргументу, --FILEвстановленого xarg's -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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.