Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

Category:

Конвертирование ape в mp3 или flac с нарезкой

Очень многие, если не все, пользователи торрент-трекеров делают свои музыкальные раздачи следующим образом: один здоровенный файлище, мегабайт на 300-500, с целым альбомом в каком-нибудь формате без потерь, чаще всего *.ape, и рядом CUE-файл. CUE-файл это текстовый файл установленного формата, в котором содержатся названия и длительность треков и прочая метаинформация по альбому.

Грех жаловаться, хотя это и неудобно, но вот для прослушивания музыки у себя в плеере в наушниках по дороге на работу это не годится абсолютно. Во-первых, я не уверен (я не проверял) в том, что плеер поймёт, что *.ape + *.cue - это несколько отдельных треков, и позволит играть любой на выбор, а не все подряд по порядку. Во-вторых, не так там много места, чтоб ради пары-тройки композиций держать в плеере целый альбом в таком массивном формате, как *.ape. Я предпочитаю там хранить музыку в *.mp3 с высоким битрейтом.

Для лёгкого превращения одного огромного файла *.ape в несколько мелких *.mp3 с правильными названиями и тэгами я пытался написать свой скрипт на баше, но не был в этом успешен, ибо я не башеписец. Поэтому, отказавшись от мысли найти и скачать готовое решение где-нибудь, я написал собственное на PHP. Чтоб оно работало, понадобится...

...конечно, сам интерпретатор PHP. Помимо него, cuetools (набор программ для работы с *.cue-файлами для извлечения информации оттуда), shntools (набор программ для нарезания/слияния/обрезания и прочих операций со звуковыми файлами преимущественно в формате WAV; конкретно отсюда понадобится только shnsplit), ffmpeg для превращения *.ape в *.wav для shnsplit, lame для кодирования *.wav в *.mp3, ну и, если хотите не *.mp3, а *.flac, то тогда и flac. Для того, чтоб работало под виндой - подвиндовые аналоги.
<?php
$file = $argv[1];
if(!strlen($file))
{
 die("No file\n");
}
// разжать исходный файл в wav для операций с ним
$command  = 'ffmpeg -i "'.$file.'" tmp.wav';
`$command`;
$file = explode('.', $file);
unset($file[sizeof($file) - 1]);
$file    = implode('.', $file);
// получение списка треков из cue
// можно изменить формат имени трека согласно man cueprint
$command = 'cueprint -t "%p - %n - %t\n" "'.$file.'.cue"';
$names   = `$command`;
$names   = explode("\n", $names);
unset($names[sizeof($names) - 1]);
if(!sizeof($names))
{
 die("Cueprint error\n");
}
// нарезка большого wav-файла на отдельные треки
$command = 'cuebreakpoints "'.$file.'.cue" | shnsplit tmp.wav';
`$command`;
// кодирование треков из wav
for($i = 1; $i <= sizeof($names); $i++)
{
 // кодирование в mp3
 $command = 'lame -b 192 split-track'.($i < 10 ? '0': '').$i.'.wav';
 // кодирование во flac
 //$command = 'flac --delete-input-file split-track'.($i < 10 ? '0': '').$i.'.wav';
 `$command`;
 // при кодировании во flac эта строчка не нужна
 unlink('split-track'.($i < 10 ? '0': '').$i.'.wav');
 
}
// простановка тэгов в mp3
$command = 'find *.mp3 | cuetag "'.$file.'.cue"';
// простановка тэгов во flac
//$command = 'find *.flac | cuetag "'.$file.'.cue"';
`$command`;
// переименование файлов
for($i = 0; $i < sizeof($names); $i++)
{
 // переименование mp3
 rename('split-track'.($i < 9 ? '0': '').($i + 1).'.wav.mp3', $names[$i].'.mp3');
 // переименование flac
 //rename('split-track'.($i < 9 ? '0': '').($i + 1).'.flac', $names[$i].'.flac');
}
// удаление большого wav-файла
unlink('tmp.wav');
?>


Оригинал записи http://axshavan.blogspot.com/2010/10/ape-mp3-flac.html
Tags: *nix, музыка
Subscribe

  • Плёнка №199

    Всякая нудная техническая информация - что это за плёнка, чего фотографии такие контрастные, и так далее - расположена после снимка номер шесть. 1…

  • Фотографии из мини-походика 18 июля

    На прошлой неделе мы со Славкой прошли пешком чуть больше 19 километров по южным предместьям Праги. Я выбрал маршрут таким образом, чтоб там были и…

  • Инопланетный чертополох

    Пару дней назад ходили вечером гулять по окрестностям. Я повстречал возле пруда Асуан заросли какой-то инопланетной херни. Это такие шипастые шары…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 6 comments