Как я преобразовываю файлы FLAC в AAC (предпочтительно VBR 320k +)?

Когда у Вас есть OpenSUSE, можно скопировать сценарий в/etc/init.d и выполнить insserv название сценария. insserv включает сценарий: http://man-wiki.net/index.php/8:insserv.

12
30.05.2013, 22:23
4 ответа

В первую очередь, -aq устанавливает скорость передачи качественной базируемой переменной - я думаю, что Вы ищете -ab (обратите внимание, что я - ffmpeg пользователь, таким образом, мое знание avconv синтаксиса ограничено - я понятия не имею, как далеко это дрейфовало начиная с ветвления).

Независимо, встроенный avconv/ffmpeg AAC кодер довольно плох.

fdk_aac

Единственный действительно хороший кодер AAC для avconv/ffmpeg является libfdk_aac - но лицензия на это является несовместимой с GPL, поэтому для получения доступа к нему, необходимо будет скомпилировать собственное (это - ffmpeg руководство по компиляции, так как я не знаю об одном для avconv - руководство Ubuntu должно быть хорошо для Debian, так как я не думаю, что существует что-либо определенное для Ubuntu там).

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

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

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

Для фиксированной скорости передачи 320 Кбит/с (серьезно, это не стоит того, AAC, достигают аудио прозрачности по сравнению с исходным аудио CD приблизительно на уровне фиксированных 128 Кбит/с):

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

neroAacEnc

Кодер Nero AAC нужно рассмотреть наравне с 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 (с -show_format) извлечь и neroAacTag для вставки. Сценарий удара, вероятно, был бы в порядке.

Посмотрите страницу HydrogenAudio на neroAacEnc: из памяти, a -q установка 0,4 звучала великолепно мне. Можно быть нацелены на небольшой уровень с -br (снова, я думаю, что это было бы путем излишество):

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
16
27.01.2020, 19:54
  • 1
    я ценю Ваш ответ и попробую как можно скорее и сообщу, как он идет. Я предпочел бы первое / ffmpeg опция, но ffmpeg - то, что сказало мне использовать avconv, потому что это - новый/предпочтительный способ, которым я предполагаю. (К вашему сведению) –  static 31.05.2013, 18:01
  • 2
    @static на самом деле, и ffmpeg и avconv является активно разработанными проектами; 'ffmpeg' в репозиториях Debian/Ubuntu не является реальным ffmpeg, но поддельным, обеспеченным avconv разработчиками, и то сообщение вызвало много беспорядка. См., 'Кто может сказать мне различие и отношение между ffmpeg, libav, и avconv?' и 'Ситуация FFmpeg/Libav'. –  evilsoup 31.05.2013, 20:35
  • 3
    Также обратите внимание, что сценарий здесь не был экстенсивно протестирован, он может порвать с некоторыми метаданными –  evilsoup 31.05.2013, 20:36
  • 4
    "необходимо будет скомпилировать собственное": так как @static упомянул Mac, я думал это благоразумный сказать, что я установил ffmpeg с libfdk_aac легко с домашним пивом. brew install ffmpeg --with-fdk-aac. можно получить список опций с brew info ffmpeg. Но хорошая идея не украсть Mac :) –  Jonathan Komar 26.07.2014, 11:47
  • 5
    @macmadness86 Это интересно, но я думаю (я не адвокат, очевидно), что, так как FDK-AAC является несовместимым с лицензией GPL, которую использует ffmpeg, это на самом деле недопустимо для распределения версии ffmpeg с установленным FDK-AAC. Кто бы ни делает, это по домашнему пиву могло потенциально вовлечь себя в место беспокойства. –  evilsoup 27.07.2014, 01:39

Это мой скрипт, обёртывающий ffmpeg для преобразования любого поддерживаемого аудио формата в AAC (с использованием кодировщика libfdk-aac, который является рекомендуемым кодировщиком aac от ffmpeg wiki).

#!/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
2
27.01.2020, 19:54

Я предлагаю использовать FFmpeg для преобразования из FLAC в AAC. FFmpeg легко устанавливается на машину Mac OS X с brew:

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
6
27.01.2020, 19:54

Дополнительный ответ (на ответ evilsoup)

Для обработки

  • Все файлы в подкаталогах
  • Пробелы в именах файлов(find's -print0+ xarg's-0)
  • Хранить вновь созданные файлы m4a в том же каталоге, что и их исходные файлы flac($1из позиционного аргумента sh -c--FILE, установленного xarg-I)
  • .

Один -вкладыш

find. -name '*.flac' -print0 | xargs -0 -I FILE sh -c 'ffmpeg -i "$1" -c:a libfdk_aac -vbr 3 "${1%.flac}.m4a"' -- FILE
1
27.01.2020, 19:54

Теги

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