Содержание
В наше время всё ещё популярны обычные Audio-CD с музыкой. У них есть одна особенность: они фактически не содержат никаких файлов и просто скопировать их из файлового менеджера нельзя. Мало того, их формат таков, что при чтении вполне могут возникать ошибки, которые вы даже не заметите при обычном проигрывании музыки, но которые нежелательны при снятии рипа.
Если вы не гоняетесь за абсолютным качеством и точным соответствием снятого рипа исходному диску, а просто хотите сохранить музыку на компьютер, то вам подойдёт любая из десятков программ, обладающих нужным функционалом. Например:
- k3b
- RubyRipper
- linuxrip
- … многие другие
В этом случае просто сохраните музыку в ogg (или mp3) с нужными вам настройками качества и можете дальше не читать эту статью.
Однако часто хочется иметь точную копию того самого любимого диска. В этом случае вам во первых не подойдёт обычная программа чтения, а во вторых придётся использовать так называемый lossless формат хранения музыки.
Подробности про то, что такое lossless, про всякие тонкости формата Audio-CD и прочие теоретические аспекты можете почитать на соответствующих тематических ресурсах. В этой же статье хочется собрать максимально подробную практическую информацию по снятию аудио рипов.
Снятие рипа
В Linux существует множество хороших программ для снятия рипов с дисков. Но познавательный факт заключается в том, что все они используют для этих целей одну и ту же утилиту командной строки - cdparanoia
.
Поэтому часто лучше использовать именно её для снятия рипов, благо по качеству она не уступает ни одной другой существующей программе, включая широко известный EAC.
Итак, я для снятия рипов использую команду
cdparanoia -vzl -O +6 [::]- CDImage.wav
Самым важным тут является так называемый оффсет, без правильного указания которого вы никогда не получите точный рип. Для моего привода он равен +6. Узнать оффсет можно из базы данных accuraterip.com, узнать модель вашего привода можно командой
sudo lshw -c disk
cdparanoia
, то смело правьте эту статью и добавляйте как можно больше информации!
Рекомендуется снимать рип несколько раз подряд, а потом проверить идентичность полученных файлов вычислением md5-суммы для них. Например, если вся работа происходит в одной папке, это можно сделать так:
md5sum -b *.wav
Все суммы должны совпадать. Если диск слишком повреждён - то совпадать они возможно не будут. В этом случае есть несколько вариантов для получения таки правильного и точного рипа:
- Снимать рип до тех пор, пока не получите несколько совпадающих файлов.
- Более сложный, но при этом правильный вариант - выбрать некий небольшой размер для блока, разбить каждый wav файл на такие блоки, посчитать md5 сумму для каждого блока и затем собрать выходной файл из блоков, совпадающих в наибольшем количестве файлов. Этот вариант требует хорошего знания скриптования (или готового скрипта), но он позволяет при желании добиться максимального качества, недоступного даже для EAC и считать даже сильно порченные диски.
- Различные вариации предыдущего пункта, основанные на многократном считывании данных с дальнейшей их статистической обработкой по частям.
Технических подробностей реализации этих механизмов сказать не могу, если вы можете - то добавьте их в статью. Можно избрать для себя и другой алгоритм или воспользоваться готовыми программами вроде RubiRipper.
- Во-первых, при чтении аудиодиска в случае возникновения ошибки (например, из-за того, что диск поцарапан и данные прочитать невозможно) чтение не остановится, а ошибка проигнорируется. Пропущенные данные при этом либо интерполируются, либо каким либо другим образом заменяются, а при прослушивании обычно возникает треск и прочие помехи. Именно из-за этой особенности и появилось куча софта для «правильного» чтения Audio CD.
- Во-вторых надо понимать, что с поцарапанного диска обычно в принципе невозможно достать достоверные данные никаким способом. Вы можете сколько угодно раз считывать повреждённый участок и скорее всего постоянно будете получать разные значения. И даже если по чистой случайности получите точные исходные данные, то никак не сможете понять, что это именно они и есть. Задача утилиты чтения - скорректировать как можно больше физических ошибок, этим и занимается
cdparanoia
. - Ну и наконец вы всё же можете прочитать повреждённый участок много раз и на основе полученных данных каким-либо статистическим методом получить выходной образ. Это позволит с некоторой долей уверенности сказать, что вы сняли максимально приближенный к оригиналу образ. Процесс статистической постобработки как раз и называется secure ripping.
cdparanoia
не занимается статистической обработкой, она отвечает только за максимально корректное физическое чтение повреждённых участков. Если вам надо готовое решение для secure ripping
- попробуйте RubiRipper, он использует cdparanoia
для чтения и как раз добавляет постобработку для статистической коррекции ошибок.
Однако если в процессе чтения диска cdparanoia
не выявила никаких ошибок и если после нескольких повторных считываний контрольные суммы полученных образов совпадают - то вы гарантированно получили самый точный и «секьюрный» возможный рип.
И напоследок немного по поводу параноидального режима считывания, как в cdparanoia
, так и в других программах (том же EAC). Это режим позволяет максимально подробно отслеживать ошибки чтения на физическом уровне и по возможности корректировать. Некоторые ресурсы рекомендуют отключать его при использовании EAC, полагаясь только на статистическую постобработку того самого secure ripping
. Реально же при чтении повреждённого диска лучше использовать и то, и другое. По крайней мере при использовании cdparanoia
и основанных на ней утилитах вроде RubiRipper, поскольку при отключении параноидального режима программа вообще никак не будет отслеживать ошибки чтения, а тупо будет читать по много раз данные абы как и дальше исключительно статистически их обрабатывать.
В качестве резюме: если вы считали пару раз диск cdparanoia
без отключённого режима точного считывания (т.е без -Y или -Z опций) без ошибок и получили одинаковые образы - можете быть уверены в их точности не менее, чем при использовании любых других программ чтения.
Обратите, кстати, внимание на смайлы состояния процесса чтения cdparanoia
. Они как раз и сообщают о найденных ошибках чтения и проблемах. Посмотреть их значения можно набрав
man cdparanoia
Или же на странице проекта: http://xiph.org/paranoia/manual.html
Получение CUE
После получения точного рипа необходимо снять с диска информацию о разметке дорожек и сохранить её в файл cue
. Сделать это можно разными способами. Самый простой - утилита mkcue
:
mkcue > disk.cue
Но она не пишет никакой дополнительной информации. Поэтому лучше использовать для считывания информации о дорожках с диска программу cdrdao
. Она записывает всю информацию в файл toc
, получить который можно командой:
cdrdao read-toc disk.toc
Дальше полученный файл можно конвертировать в cue
с помощью утилиты cueconvert
из пакета cuetools
:
cueconvert -i toc disk.toc disk.cue
В любом случае вам скорее всего придётся вручную редактировать полученный cue
файл, добавляя в него необходимую информацию. Подробней о синтаксисе cue
файлов можно почитать тут: http://digitalx.org/cuesheetsyntax.php
Дальнейшая обработка
Хранить музыку в wav
файлах - не лучший выход, если у вас конечно нет под рукой датацентра с неограниченным дисковым пространством. Обычно файлы сжимают. И тут есть два принципиально различных подхода - сжимать можно обратимо без потери качества или же необратимо.
В первом случае лучше всего использовать кодек FLAC, который поддерживается большинством устройств и плееров, во втором - OGG Vorbis, показывающий лучшие параметры по отношению качество/размер.
В любом случае исходный wav
файл придётся разрезать на треки исходя из информации из cue
файла, а затем полученные отдельные композиции закодировать нужным вам кодеком. После чего прописать правильные теги в полученные файлы.
Есть и ещё один весьма странный подход: кодировать целиком диск в один файл и прикладывать к нему заполненный дополнительной информацией cue
файл. Очевидных минусов у такого подхода два:
- Во-первых
cue
- это файл физической разметки, он никогда не был предназначен для хранения расширенной информации о композициях и совершенно для этого не подходит. - Во-вторых из диска, сохранённого в виде одного файла, никаким образом не достать одну песню.
На самом деле разрезать можно как до сжатия выбранным кодеком, так и после. Об этом чуть позже, сначала про кодирование.
Кодирование
Для сжатия wav
файла в различные форматы в Linux существуют несколько утилит.
Для flac
:
flac -8 -o file.flac file.wav
Для ogg
:
oggenc -q 7 file.wav
Для mp3
:
lame -h -b 320 file.wav file.mp3
Команды приведены с оптимальными опциями кодирования, за подробностями обращайтесь к документации по утилитам.
Разрезание lossless образа на треки
Во-первых wav
- это тоже lossless формат, поэтому по инструкции из этого параграфа можно резать как wav
, так и flac
.
Вам потребуется установить два пакета: cuetools
и shntool
. Ну и кроме того вам понадобится кодек flac
из одноимённого пакета.
Для разрезки wav
файла по информации из cue
можно использовать команду:
cuebreakpoints disk.cue | shnsplit -o wav CDImage.wav
Тоже для flac
:
cuebreakpoints disk.cue | shnsplit -o flac CDImage.flac
Разрезание lossy образа на треки
Для разрезания ogg
и mp3
файлов по cue
файлу существует утилита mp3splt
, поставить которую можно из одноимённого пакета.
Разрезать ogg
по cue
можно так:
oggsplt -c disk.cue CDImage.ogg
Или mp3
:
mp3splt -c disk.cue CDImage.ogg
Прописывание тегов
Итак, вы получили разрезанный на треки образ диска, закодированный в нужный формат. Дело за малым - прописать теги. Теги для flac
, ogg
и mp3
можно заполнить из cue
файла командой:
cuetag sample.cue split-track01.flac split-track02.flac split-track03.flac split-track04.flac
Т.е. вам надо указать cue
файл и файлы всех треков. Можно использовать шаблон:
cuetag sample.cue split-track*.flac
Но в любом случае вам придётся скорее всего вручную дописывать теги. Для этого великолепно подходит программа EasyTag
, доступная в репозиториях. Она имеет простой и понятный GUI-интерфейс, надеюсь, вы разберётесь.