FLAC 파일을 AAC (바람직하게는 VBR 320k +)로 변환하는 방법은 무엇입니까?


12

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로 살 수 있지만 적어도 320의 LC VBR이 가장 좋습니다.


지정하지 않으면 약 192K의 파일을 얻을 수 있으며 avconv의 매뉴얼 페이지에 -aq을 사용하여 오디오 품질을 지정할 수 있다고 말하지만 결과 파일에는 차이가 없습니다. 320에 'k'를 추가하면 분할 오류가 발생합니다.
static

320k +가 괜찮 으면 WavPack (하이브리드 모드)을 사용하는 것이 실제로 더 안전 할 수 있습니다 (데드 비프 등 타사 소프트웨어의 Android에서 재생 가능). 그것은 압축에 대해 완전히 다른 방법을 사용하는데, 이는 손실 손실 변환이 없으며 유일한 단점은 양자화 잡음 대 비트 레이트의 양뿐입니다. 재미있는 인공물은 불가능합니다. 적어도 시도해 볼 것을 제안합니다. iPhone은 여기에 문제가있을 수 있습니다 : /
표시 이름

답변:


16

우선 -aq, 품질 기반의 가변 비트 레이트를 설정하십시오-나는 당신이 찾고 있다고 생각합니다 -ab(나는 ffmpeg 사용자이므로 avconv 구문에 대한 나의 지식은 제한적입니다. 포크).

그럼에도 불구하고 내장 된 avconv / ffmpeg AAC 인코더는 매우 나쁩니다.

fdk_aac

avconv / ffmpeg에 대한 유일한 좋은 AAC 인코더는 libfdk_aac입니다-그러나 그 라이센스는 GPL과 호환되지 않기 때문에 GPL에 액세스하려면 직접 컴파일해야합니다 ( 그렇기 때문에 ffmpeg 컴파일 가이드입니다) avconv에 대한 정보를 모릅니다. Ubuntu 가이드는 데비안에 적합해야합니다. Ubuntu에 특정한 것이 없다고 생각하기 때문입니다).

일단 받으면 AAC 인코딩 안내서를 따르십시오 . fdk_aac의 -vbr옵션을 시도해 보는 것이 좋습니다. 내가 시도한 모든 파일에서 3 개의 사운드를 투명하게 설정 하는 것이 좋습니다. 비트 전송률이 높은 위약을 원하거나 사운드 엔지니어 인 경우에는 5.

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

-map_metadataffmpeg는 자동으로 메타 데이터를 전송하므로 avconv도 자동으로 수행되므로, 필요하지 않습니다 .

고정 비트 레이트 320 kbit / s의 경우 (정확하게는 가치가 없습니다. AAC는 고정 된 128 kbit / s에서 원본 CD 오디오와 비교하여 오디오 투명도를 달성합니다) :

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

neroAacEnc

Nero의 AAC 인코더는 fdk_aac 및 qaac (Quicktime AAC)와 동일하게 고려해야합니다. 다른 사람들은 어떤 것이 더 좋은지에 대해 다른 의견을 제시 할 것이지만, 매우 낮은 비트 전송률에서 차이점을 발견 할 것입니다.

neroAacEncNero 웹 사이트에서 구할 수 있습니다 . 압축을 풀고 $ PATH 어딘가에 넣으십시오.

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

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

불행히도, 이것은 메타 데이터를 제거 할 것이다; 그 이상을 전송하려면 avprobe / ffprobe ( -show_format)를 사용하여 추출하고 neroAacTag를 삽입하십시오. bash 스크립트는 순서대로있을 것입니다.

neroAacEnc : 메모리에서 HydrogenAudio 페이지를 참조하십시오 .0.4-q 설정은 나에게 큰 소리입니다. 당신과 비트 레이트 타겟팅 할 수 있습니다 -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

귀하의 답변에 감사 드리며 가능한 한 빨리 시도하여 어떻게 진행되는지 알려 드리겠습니다. 나는 첫 번째 / ffmpeg 옵션을 선호하지만 ffmpeg는 avconv를 사용한다고 말한 것입니다. (FYI)
정적

1
@static 실제로, ffmpeg와 avconv는 활발하게 개발 된 프로젝트입니다. 데비안 / 우분투 리포지토리의 'ffmpeg'는 실제 ffmpeg가 아니라 avconv 개발자가 제공 한 가짜 파일이며 그 메시지는 많은 혼란을 초래했습니다. 참조 '누가 나에게는 FFmpeg, libav 및 avconv의 차이와 관계를 알 수 있습니까?' 그리고 'FFmpeg / Libav 상황' .
evilsoup

또한 여기에 스크립트가 광범위하게 테스트되지 않았습니다주의, 그것은 물론 일부 메타 데이터 중단 될 수
evilsoup

2
"정말로 컴파일해야한다": @static이 Mac을 언급 한 이후, 나는 homebrew와 함께 libfdk_aac으로 ffmpeg를 쉽게 설치했다고 말하는 것이 현명하다고 생각했다. brew install ffmpeg --with-fdk-aac. 옵션 목록을 얻을 수 있습니다 brew info ffmpeg. 그러나 아내의 Mac을 훔치지 않는 것이 좋습니다 :)
Jonathan Komar

@ macmadness86의 흥미로운하지만 난 그 생각 (I 분명히, 변호사가 아니에요) FDK-AAC는 FFmpeg을 사용, 그것은 설치 FDK-AAC와는 FFmpeg의 버전을 배포 실제로 불법있는 GPL 라이선스와 호환이기 때문에 그. 집에서 일을하는 사람은 잠재적으로 귀찮게 될 수 있습니다.
evilsoup

6

FLAC에서 AAC로 변환하기 위해 FFmpeg를 사용하는 것이 좋습니다. 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

이것은 지원되는 오디오 형식을 AAC 로 변환하기 위해 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

1

보충 답변 (vilsoup의 답변)

다루다

  • 하위 디렉토리의 모든 파일
  • 파일 이름의 공백 ( find's -print0+ xarg's -0)
  • (자신의 소스 FLAC 파일과 동일한 디렉토리에 새로 생성 된 M4A 파일을 보관 $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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.