fdk_aac

fdk_aac

CD를 FLAC으로 백업한 다음 내 Android 휴대폰과 아내의 iPhone에 이식하기 위해 AAC(.m4a) 파일로 트랜스코딩했습니다. 나는 Mac에서 XLD를 사용해왔고 아주 훌륭하게 작동하지만 이 일을 하기 위해 그녀의 Mac을 훔쳐서 내 데비안 컴퓨터에서 할 수 있기를 원하지 않습니다. 다음은 작동합니다:

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 방법을 선호하여 더 이상 사용되지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다! 진정한 VBR이 아니라면 320Kbps도 받아들일 수 있지만 최소한 320LC VBR이 가장 좋습니다.

답변1

먼저 -aq품질에 따라 가변 비트 전송률을 설정합니다. 여러분이 찾고 있는 것 같습니다 -ab(저는 ffmpeg 사용자이므로 avconv 구문에 대한 지식이 제한되어 있습니다. 포크 이후로는 모르겠습니다).

어쨌든 내장된 avconv/ffmpeg AAC 인코더는 꽤 나쁩니다.

fdk_aac

avconv/ffmpeg 정말 좋은 AAC 인코더는 libfdk_aac입니다. 하지만 라이센스가 GPL과 호환되지 않으므로 액세스하려면 다음을 수행해야 합니다.자신만의 컴파일(저는 avconv의 가이드에 대해 모르기 때문에 이것은 ffmpeg 컴파일 가이드입니다. Ubuntu 가이드는 Ubuntu와 관련된 내용이 없다고 생각하므로 Debian용이어야 합니다.)

획득하신 후 팔로우해주세요.AAC 코딩 지침;fdk_aac를 시도해 보는 것이 좋습니다.-vbr옵션 - 3으로 설정하면 시도한 모든 파일에서 투명하게 들렸습니다. 더 높은 비트 전송률의 위약을 원하거나 사운드 엔지니어인 경우 5로 설정해 볼 수 있습니다.

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

아니요 -map_metadata, ffmpeg는 메타데이터를 자동으로 전송하므로 (avconv도 마찬가지라고 확신합니다).

320kbit/s의 고정 비트 전송률의 경우(진짜로 그럴 가치는 없습니다. AAC는 고정 128kbit/s 정도에서 원본 CD 오디오에 필적하는 오디오 투명성을 달성합니다):

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

neroAacEnc

Nero의 AAC 인코더는 fdk_aac 및 qaac(Quicktime AAC)와 동일한 것으로 간주되어야 합니다. 사람들마다 어느 것이 더 나은지에 대해 서로 다른 의견을 제시하지만 매우 낮은 비트 전송률에서만 차이를 느낄 수 있으며 모두가 모두 매우 높은 품질이라는 데 동의합니다.

neroAacEnc사용 가능Nero 웹사이트에서. 압축을 풀고 $PATH 어딘가에 넣으세요.

불행히도 neroAacEncWAV 오디오만 입력으로 사용할 수 있습니다. avconv 또는 ffmpeg를 디코더로 사용하여 이 문제를 해결할 수 있습니다.

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

불행하게도 이는 메타데이터를 제거합니다. 전송하려면 avprobe/ffprobe(사용 -show_format)를 사용하여 추출하고 neroAacTag를 사용하여 삽입합니다. bash 스크립트가 적합할 수 있습니다.

HydrogenAudio 보기neroAacEnc의 페이지: 기억상으로는 -q0.4 설정이 제게는 좋은 것 같습니다. 당신은 사용할 수 있습니다 -br(다시 말하지만, 이것은 다음과 같습니다방법지나침):

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

편집: 다음은 neroAacEnc를 사용하여 오디오 파일을 m4a로 변환한 다음 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

답변2

FLAC를 AAC로 변환하려면 FFmpeg를 사용하는 것이 좋습니다. FFmpeg는 Brew를 통해 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

답변3

이것은 지원되는 오디오 형식을 변환하기 위해 ffmpeg를 래핑하는 스크립트입니다.아크릴(ffmpeg wiki에서 권장하는 aac 인코더인 libfdk-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

답변4

보충 답변 (evisoup에 대한 답변)

다루다

  • 하위 디렉토리의 모든 파일
  • 파일 이름의 공백( find's -print0+ xarg's -0)
  • 새로 생성된 m4a 파일을 소스 flac 파일과 동일한 디렉터리에 저장합니다( $1sh -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

관련 정보