Le son Apple Lossless peut-il être converti en FLAC sans perte de fidélité?

19

Les fichiers audio Apple Lossless (ALAC) peuvent-ils être convertis en fichiers audio FLAC sans perte de fidélité?

Kev
la source
2
réponse courte «oui» (comme l'a dit slhck). la question est, cherchez-vous un outil pour le faire, ou demandez-vous si vous pouvez convertir un format sans perte, sans perte en un autre format sans perte?
Journeyman Geek

Réponses:

37

Oui, étant donné que les deux sont mathématiquement sans perte, la conversion est également sans perte.

La raison en est que le signal peut toujours être reconstruit dans sa forme d'origine lorsqu'un fichier FLAC / ALAC est décodé. Ainsi, ils sont équivalents et vous ne devriez subir aucune perte lors du transcodage - même lors du transcodage plusieurs fois.

La seule erreur que je pourrais imaginer serait une erreur arithmétique, par exemple par une précision limitée en virgule flottante dans les calculs. Je ne pense pas que cela s'applique au FLAC ou à l'ALAC.

Si vous utilisez uniquement un codec sans perte "psychoacoustique", cela n'est pas possible. Sans perte dans un sens psychoacoustique, cela signifie que vous ne pouvez pas distinguer la version originale et la version compressée, mais elles sont très différentes les unes des autres. MP3 ou MPEG-4 AAC utilisent diverses techniques psychoacoustiques pour y parvenir. Ainsi, lors du transcodage, la version originale ne peut pas être reconstruite et vous subiriez une perte de qualité.


Si vous souhaitez convertir ALAC en FLAC, ce ffmpegserait une bonne option, car il est gratuit et disponible pour presque toutes les plates-formes.

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

FFmpeg lira l'ALAC sans problème. Pour les systèmes * nix, il existe également un script appelé Convertir en FLAC qui facilite l'ensemble du processus. Avec Bash, vous pouvez également convertir tous les fichiers dans un seul répertoire:

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

Remarque: Si vous recevez un message sur la ffmpegdépréciation, ce n'est en fait pas le cas - c'est toujours un programme développé activement. Cependant, les mainteneurs de paquets d'Ubuntu ont juste décidé de passer à la fourche Libav de FFmpeg et donc de vous fournir à la avconvplace de ffmpeg. La version de ffmpeg disponible sur Ubuntu est donc obsolète. Vous pouvez en obtenir une récente en téléchargeant une version statique à la place ou en la compilant vous-même. Lisez la suite pour plus d'informations: Qui peut me dire la différence et la relation entre ffmpeg, libav et avconv

slhck
la source
2
Basé sur superuser.com/a/277358/45914 , vous pouvez faire ce qui suit pour convertir un répertoire entier: for f in *.m4a; do ffmpeg -i "$f" -acodec flac "${f%.m4a}.flac"; done Cela fonctionne sur Linux, mais aussi dans un Git bash sur Windows, par exemple.
Ruud
1
La conversion à l'aide de ffmpeg, comme l'a dit @RuudvA, fonctionne mais me donne un message qui dit: *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Pour ce faire en utilisant aconv, faites-le à la place: for f in *.m4a; do avconv -i "$f" "${f%.m4a}.flac"; done
Duncan Lock
XLD est un autre bon pour OSX.
Arran Cudbard-Bell
3

Pour Windows CMD, vous pouvez le faire.

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

(Script de lot)

(Cela fera la récursivité (chaque dossier et sous d'où son exécution))

The009
la source
1

Si vous avez un Mac (puisque vous avez des fichiers ALAC), vous pouvez également utiliser le logiciel open source Max comme interface agréable pour effectuer la conversion depuis et vers ALAC / FLAC ou de nombreux autres formats.

Alex
la source
2
XLD est un autre bon.
Nathaniel
1

pour Windows dans Powershell (en utilisant ffmpeg), vous pouvez le faire pour convertir alac en flac:

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

et inversement faire ceci pour convertir en alac

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

BoteRock
la source