Яковлев


Как конвертировать ALAC и FLAC при помощи PowerShell и FFmpeg

Смена платформы и экосистемы от компании Apple на Microsoft Windows, Linux или наоборот, для обладателя цифровой музыкальной коллекции может обернуться необходимостью изменения формата музыкальных файлов. Можно найти много программных продуктов, которые выполнят работу с минимальным участием пользователя, а тем, кто хочет автоматизировать задачи с минимальным использованием стороннего программного обеспечения, можно открыть консоль PowerShell.

Надо сразу сказать, что конвертирование аудио файлов, хранящихся в музыкальной коллекции, целесообразно производить только в случае использования форматов сжатия без потерь (lossless). Поэтому предлагаю рассмотреть типичную для обладателей цифровых музыкальных коллекций ситуацию: конвертирование файлов между наиболее распространёнными в бытовом использовании форматами ALAC (Apple Lossless Audio Codec) и FLAC (Free Lossless Audio Codec), как в одну, так и в другую сторону.

Кроме PowerShell, для конвертирования форматов понадобится установить набор свободных библиотек с открытым исходным кодом FFmpeg.

Apple iTunes, PowerShell и FFmpeg

В рамках этой заметки не стоит задача представить готовое универсальное и многофункциональное решение для конвертирования музыкальных файлов в разные форматы. Это демонстрация совместного использования базовых возможностей PowerShell и FFmpeg для достижения результата.

Приведённые сценарии PowerShell рассчитаны на запуск из директории, в которой хранятся музыкальные файлы. В результате успешного выполнения сценария, в текущей директории будет создана поддиректория с именем целевого формата, в которой будут сохраненые конвертированные файлы. Оригинальные файлы останутся без изменений.

ALAC во FLAC

(New-Item -ItemType Directory -Path '.\FLAC') -and (Get-ChildItem -Path . -Filter *.m4a | ForEach-Object { ffmpeg -i "$_" -acodec flac -c:v copy ".\FLAC\$($_.BaseName).flac" })

FLAC в ALAC

(New-Item -ItemType Directory -Path '.\ALAC') -and (Get-ChildItem -Path . -Filter *.flac | ForEach-Object { ffmpeg -i "$_" -acodec alac -c:v copy ".\ALAC\$($_.BaseName).m4a" })

Каждый пользователь, знакомый с основами PowerShell, может использовать приведённые сценарии в качестве отправной точки для создания собственного решения, отвечающего имеющимся представлениям и запросам. Например, выполнить конвертацию файлов из вложенных директорий, автоматически упорядочить структуру директорий и имена файлов, добавить тэги, удалить исходные файлы и многое другое.