Po pierwsze, -aq
ustawia zmienną przepływność w oparciu o jakość - myślę, że szukasz -ab
(zauważ, że jestem użytkownikiem ffmpeg, więc moja wiedza na temat składni avconv jest ograniczona - nie mam pojęcia, jak daleko się posunęła) widelec).
Niezależnie od tego wbudowany koder AAC avconv / ffmpeg jest dość zły.
fdk_aac
Jedynym naprawdę dobrym koderem AAC dla avconv / ffmpeg jest libfdk_aac - ale licencja na to jest niezgodna z GPL, więc aby uzyskać do niego dostęp, musisz skompilować własny (jest to przewodnik kompilacji ffmpeg, ponieważ ja nie nie znam jednego dla avconv - przewodnik po Ubuntu powinien być odpowiedni dla Debiana, ponieważ nie sądzę, że jest tam coś specyficznego dla Ubuntu).
Gdy go zdobędziesz, postępuj zgodnie z przewodnikiem kodowania AAC ; Zdecydowanie polecam wypróbowanie -vbr
opcji fdk_aac - ustawienie 3 brzmi dla mnie przezroczysto we wszystkich plikach, które próbowałem, jeśli chcesz placebo o wyższej przepływności lub jesteś inżynierem dźwięku, możesz spróbować ustawienia 5
ffmpeg -i input.flac -c:a libfdk_aac -vbr 3 output.m4a
Nie ma -map_metadata
takiej potrzeby , ponieważ ffmpeg automatycznie przesyła metadane (i jestem pewien, że avconv też).
Dla stałej szybkości transmisji 320 kbit / s (poważnie, nie jest to tego warte, AAC osiąga przezroczystość dźwięku w porównaniu do oryginalnego audio CD przy około stałym 128 kbit / s):
ffmpeg -i input.flac -c:a libfdk_aac -b:a 320k
neroAacEnc
Koder AAC Nero należy traktować na równi z fdk_aac i qaac (Quicktime AAC). Różni ludzie będą opiniować, która z nich jest lepsza, ale zauważysz różnice tylko przy bardzo niskich przepływnościach i wszyscy zgadzają się, że wszyscy są bardzo wysokiej jakości.
neroAacEnc
jest dostępny na stronie internetowej Nero . Rozpakuj go i umieść gdzieś w $ PATH.
Niestety neroAacEnc
może przyjmować tylko dźwięk WAV jako wejście; możesz obejść ten problem, używając avconv lub ffmpeg jako dekodera:
avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -q 0.4 output.m4a
Niestety spowoduje to usunięcie metadanych; aby to przenieść, użyj avprobe / ffprobe (with -show_format
), aby wyodrębnić i neroAacTag, aby wstawić. Skrypt bash prawdopodobnie byłby w porządku.
Zobacz stronę HydrogenAudio na neroAacEnc : z pamięci -q
ustawienie 0,4 brzmiało dla mnie świetnie. Można kierować przepływność z -br
(ponownie, myślę, że to byłby sposób overkill):
avconv -i input.flac -f wav - | neroAacEnc -if - -ignorelength -br 320000 output.m4a
EDYCJA: oto skrypt do konwersji plików audio do m4a za pomocą neroAacEnc, a następnie oznaczenia za pomocą ffprobe i neroAacTag (wymaga, aby wszystkie znajdowały się w katalogu w $ PATH). Może przyjmować wiele plików wejściowych, więc jeśli zapiszesz jako convert-to-m4a
, możesz przekonwertować każdy plik FLAC w katalogu za pomocą
convert-to-m4a *.flac
Nie ogranicza się tylko do plików FLAC; będzie działał każdy format audio, który może zdekodować twój ffmpeg / avconv. Możesz zmienić ffprobe i ffmpeg na avprobe i 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