Blog - moje miejsce w sieci > powrót

Konwersja FLAC do ALAC (.m4a)

Każdy posiadacz iPoda staje prędzej czy później przed problemem konwersji bezstratnych formatów audio: FLAC do ALAC (Apple Lossless Audio Codec, .m4a – nie można mylić jednak ze stratnym formatem AAC, którego pliki mają takie samo rozszerzenie). Na Macu, do dyspozycji mamy darmowy X Lossless Decoder. Dla użytkowników PC i pod Windows najlepszym rozwiązaniem wydaje się połączenie: foobar2000+iTunesEncoder.exe+ITunes. Jest tylko jedno małe „ale”…

Rozwiązanie, mimo że wygodne, jest dość problematyczne przy konwersji większej ilości plików. iTunes, który ją przeprowadza (a dokładniej Quicktime), „gubi” średnio co drugi lub co trzeci plik. Ma to związek z kolejkowaniem tymczasowych plików z foobar’a. Trzeba więc ręcznie dokończyć konwersję poszczególnych plików.

Poniżej podaję rozwiązanie w postaci gotowego skryptu napisanego w Perlu. Z wymagań, oprócz zainstalowanego Perla, potrzebny będzie jeszcze pakiet Flac z dopisaniem ścieżki dostępu do zmiennej środowiskowej PATH, aby można było korzystać z poleceń flac.exe i tag.exe z poziomu lini poleceń.

Brakuje tylko rekursywnego przeszukiwania zadanej ścieżki, ale to w następnej wersji…

Skrypt można dowolnie modyfikować.

`dir *.flac /b > _dir.tmp`;

open FILE, "<_dir.tmp" or die $!;

while () {
$file = $_;
$file =~ s/.flacn//;
push (@files, $file);
}

close FILE;

open FILE, ">_flac2wav.bat" or die $!;

foreach(@files) {
print FILE "flac.exe -d -f "$_.flac"n";
}

close FILE;

print "n[#] Conversion ->WAV (flac.exe)...n";

`_flac2wav.bat`;

open FILE, ">_wav2alac.bat" or die $!;

foreach(@files) {
`tag.exe "$_.flac" --stdout > _tag.tmp`;
$file=$_;

open TAG_FILE, "<_tag.tmp" or die $!;
$i=0;
while() {
$i++;
$tag_info = $_;
$tag_info =~ s/s+//;
$tag_info =~ s/n//;

if ($i==5) {
$tag_info =~ s/Title://;
$title = $tag_info;
}
if ($i==6) {
$tag_info =~ s/Artist://;
$artist = $tag_info;
}
if ($i==7) {
$tag_info =~ s/Album://;
$album = $tag_info;
}
if ($i==8) {
$tag_info =~ s/Year://;
$year = $tag_info;
}
if ($i==9) {
$tag_info =~ s/Track://;
$track = $tag_info;
}
if ($i==10) {
$tag_info =~ s/Genre://;
$genre = $tag_info;
}
}

close TAG_FILE;

print FILE "iTunesEncoder.exe -e "Lossless Encoder" -a "$artist" -l "$album" -n "$track" -t "$title" -g "$genre" -i "$file.wav" -o "$file.m4a"n";
}

close FILE;

print "n[#] Conversion ->ALAC (iTunes)...n";

`_wav2alac`;

`del *.wav _dir.tmp _tag.tmp _flac2wav.bat _wav2alac.bat`;

print "[#] OKn"



Zostaw komentarz