Kann Apple Lossless Audio ohne Qualitätsverlust in FLAC konvertiert werden?

19

Können Apple Lossless-Audiodateien (ALAC) ohne Qualitätsverlust in FLAC-Audiodateien konvertiert werden?

Kev
quelle
2
kurze antwort 'ja' (wie gesagt slhck). Die Frage ist, ob Sie nach einem Tool suchen, mit dem Sie dies tun können, oder ob Sie ein verlustfreies Format verlustfrei in ein anderes verlustfreies Format konvertieren können.
Geselle Geek

Antworten:

37

Ja, da beide mathematisch verlustfrei sind, ist auch die Konvertierung verlustfrei.

Der Grund dafür ist, dass das Signal immer in seine ursprüngliche Form wiederhergestellt werden kann, wenn eine FLAC / ALAC-Datei decodiert wird. Somit sind sie gleichwertig und Sie sollten beim Transcodieren keinen Verlust erleiden - selbst wenn Sie mehrmals transcodieren.

Der einzige Fehler, den ich mir vorstellen könnte, wäre ein arithmetischer Fehler, z. B. durch begrenzte Gleitkommapräzision bei Berechnungen. Ich denke nicht, dass dies für FLAC oder ALAC gilt.

Falls Sie nur einen "psychoakustisch" verlustfreien Codec verwenden, ist dies nicht möglich. Verlustfrei im psychoakustischen Sinne würde bedeuten, dass Sie die ursprüngliche und die komprimierte Version nicht unterscheiden können, obwohl sie sich sehr voneinander unterscheiden. MP3 oder MPEG-4 AAC verwenden dazu verschiedene psychoakustische Techniken. Daher kann beim Transcodieren die Originalversion nicht wiederhergestellt werden, und es kommt zu einem Qualitätsverlust.


Wenn Sie ALAC in FLAC konvertieren ffmpegmöchten, ist dies eine gute Option, da es kostenlos und für nahezu jede Plattform verfügbar ist.

ffmpeg -i audio.m4a -c:a flac audio.flac

FFmpeg liest ALAC ohne Probleme. Für * nix-Systeme gibt es auch ein Skript namens In FLAC konvertieren, das den gesamten Vorgang vereinfacht. Mit Bash können Sie auch einfach alle Dateien in ein einziges Verzeichnis konvertieren:

for f in *.m4a; do ffmpeg -i "$f" -c:a flac "${f%.m4a}.flac"; done

Hinweis: Wenn Sie eine Meldung erhalten, ffmpegdass Sie veraltet sind, ist dies eigentlich nicht der Fall - es ist immer noch ein aktiv entwickeltes Programm. Die Paketbetreuer von Ubuntu haben sich jedoch gerade entschlossen, auf die Libav-Verzweigung von FFmpeg umzusteigen und Sie avconvstattdessen mit zu versorgen ffmpeg. Die ffmpeg auf Ubuntu verfügbare Version ist daher veraltet. Sie können eine aktuelle Version herunterladen , indem Sie stattdessen eine statische Version herunterladen oder diese selbst kompilieren. Lesen Sie weiter für weitere Informationen: Wer kann mir den Unterschied und die Beziehung zwischen ffmpeg, libav und avconv erklären?

slhck
quelle
2
Basierend auf superuser.com/a/277358/45914 können Sie Folgendes tun, um ein gesamtes Verzeichnis zu konvertieren: for f in *.m4a; do ffmpeg -i "$f" -acodec flac "${f%.m4a}.flac"; done Dies funktioniert unter Linux, aber auch in einer Git-Bash unter Windows.
Ruud
1
Das Konvertieren mit ffmpeg, wie @RuudvA sagte, funktioniert, gibt mir aber eine Meldung, die besagt: *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Um dies mit aconv zu tun, machen Sie stattdessen Folgendes: for f in *.m4a; do avconv -i "$f" "${f%.m4a}.flac"; done
Duncan Lock
XLD ist ein weiteres gutes für OSX.
Arran Cudbard-Bell
3

Für Windows CMD können Sie tun.

@for /R %%x in (*.m4a) do ffmpeg -i "%%x" -acodec flac "%%~dpnx.flac"

(Stapelskript)

(Dies führt eine Rekursion durch (Jeder Ordner und darunter, von wo aus er ausgeführt wird))

The009
quelle
1

Wenn Sie einen Mac haben (da Sie ALAC-Dateien haben), können Sie auch die Open Source-Software Max als nettes Frontend verwenden, um die Konvertierung von und nach ALAC / FLAC oder vielen anderen Formaten durchzuführen.

Alex
quelle
2
Ein weiteres schönes ist XLD.
Nathaniel
1

für Windows in Powershell (mit ffmpeg) können Sie dies tun, um alac in flac zu konvertieren:

Get-ChildItem . -filter *.m4a| ForEach-Object { ffmpeg -i "$_" -acodec flac "$($_.basename).flac" }

und umgekehrt, um nach alac zu konvertieren

Get-ChildItem . -filter *.flac | ForEach-Object { ffmpeg -i "$_" -acodec alac $($_.basename).m4a" }

BoteRock
quelle