avconv (ou ffmpeg, que o avconv é um fork de) pode fazer isso a partir da linha de comando:
avconv -i input.flac -c:a alac output.m4a
Ele deve preservar os metadados por si só.
Para fazer todos os flac em um diretório:
for f in ./*.flac; do avconv -i "$f" -c:a alac "${f%.*}.m4a"; done
Para fazer todos os flac recursivamente (no diretório atual e todos os subdiretórios):
shopt -s globstar
for f in ./**/*.flac; do avconv -i "$f" -c:a alac "${f%.*}.m4a"; done
Se você tem os flacs em arquivos ogg ou algo assim, obviamente mude ./*.flac
para ./*.ogg
.
Acho que isso deve funcionar com o avconv / ffmpeg dos repositórios (já que o ALAC é liberado sob a licença Apache e pode ser distribuído legalmente), embora eu tenha a versão do medibuntu instalada.
Se você quiser se livrar dos arquivos originais, pode colocar rm
no loop. Esta versão usa o sinalizador -n
para o avconv, portanto, ele não sobrescreverá nenhum arquivo ALAC já existente e usando &&
em vez de ;
significa que, se avconv parar com um erro, o arquivo FLAC original não será excluído:
for f in ./*.flac; do avconv -n -i "$f" -c:a alac "${f%.*}.m4a" && rm "$f"; done
Observe que a exclusão de arquivos com rm é irreversível (fora da recuperação de dados forenses), portanto, tenha cuidado ao usá-lo.