Can Apple Lossless audio files (ALAC) be converted to FLAC audio files with no loss of fidelity?
4 Answers
Yes, given that both are mathematically lossless, conversion is lossless too.
The reason for this is that the signal can always be reconstructed to its original form when a FLAC/ALAC file is decoded. Thus, they are equivalent and you should experience no loss when transcoding — even when transcoding multiple times.
The only error I could imagine would be an arithmetical one, e.g. through limited floating point precision in calculations. I don't think this applies to either FLAC or ALAC.
In case you only use a "psychoacoustically" lossless codec, this is not possible. Lossless in a psychoacoustic sense would mean that you can't distinguish the original and the compressed version, yet they are very different from each other. MP3 or MPEG-4 AAC use various psychoacoustic techniques to achieve this. Thus, when transcoding, the original version can't be reconstructed and you'd experience a loss of quality.
In case you want to convert ALAC to FLAC, ffmpeg
would be a good option, as it's free and available for almost every platform.
ffmpeg -i audio.m4a -c:a flac audio.flac
FFmpeg will read ALAC without issues. For *nix systems, there's also a script called Convert to FLAC which makes the whole process easier. With Bash you could simply convert all files in a single directory as well:
for f in *.m4a; do ffmpeg -i "$f" -c:a flac "${f%.m4a}.flac"; done
Note: If you get a message about ffmpeg
being deprecated, this is actually not the case – it's still an actively developed program. However, Ubuntu's package maintainers just decided to switch to the Libav fork of FFmpeg and thus supply you with avconv
instead of ffmpeg
. The version of ffmpeg
available on Ubuntu is therefore outdated. You can get a recent one by downloading a static build instead, or compiling it yourself. Read on for more info: Who can tell me the difference and relation between ffmpeg, libav, and avconv
-
2Based on superuser.com/a/277358/45914, you can do the following to convert an entire directory:
for f in *.m4a; do ffmpeg -i "$f" -acodec flac "${f%.m4a}.flac"; done
This works on Linux, but also in a Git bash on Windows, for example.– RuudMar 8, 2012 at 13:12 -
1Converting using ffmpeg, as @RuudvA said, works but gives me a message that says:
*** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
In order to do this using aconv, do this instead:for f in *.m4a; do avconv -i "$f" "${f%.m4a}.flac"; done
May 8, 2013 at 3:09 -
For Windows CMD you can do.
@for /R %%x in (*.m4a) do ffmpeg -i "%%x" -acodec flac "%%~dpnx.flac"
(Batch Script)
( This will do Recursion ( Every Folder and under from where its run ))
for Windows in Powershell (using ffmpeg) you can do this to convert alac to flac:
Get-ChildItem . -filter *.m4a| ForEach-Object { ffmpeg -i "$_" -acodec flac "$($_.basename).flac" }
and conversely do this to convert to alac
Get-ChildItem . -filter *.flac | ForEach-Object { ffmpeg -i "$_" -acodec alac $($_.basename).m4a" }
If you have a Mac (since you have ALAC files), you could also use the open source software Max as nice frontend to do the conversion from and to ALAC/FLAC or many other formats..
-
2