В наше время всё ещё популярны обычные Audio-CD с музыкой. У них есть одна особенность: они фактически не содержат никаких файлов и просто скопировать их из файлового менеджера нельзя. Мало того, их формат таков, что при чтении вполне могут возникать ошибки, которые вы даже не заметите при обычном проигрывании музыки, но которые нежелательны при снятии рипа.

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

  • k3b
  • RubyRipper
  • linuxrip
  • … многие другие

В этом случае просто сохраните музыку в ogg (или mp3) с нужными вам настройками качества и можете дальше не читать эту статью.

Однако часто хочется иметь точную копию того самого любимого диска. В этом случае вам во первых не подойдёт обычная программа чтения, а во вторых придётся использовать так называемый lossless формат хранения музыки.

Подробности про то, что такое lossless, про всякие тонкости формата Audio-CD и прочие теоретические аспекты можете почитать на соответствующих тематических ресурсах. В этой же статье хочется собрать максимально подробную практическую информацию по снятию аудио рипов.

Реально самые качественные рипы можно получить с помощью программы RubiRipper. Она ничем не уступает EAC и позволяет делать всё тоже самое. Данная статья носит скорей теоретический характер и написана ради подробного описания всего процесса снятия рипа с комментариями.
Ещё раз обращаю внимание: совершенно необязательно использовать консольные утилиты, описываемые в данной статье. Для снятия качественного рипа достаточно воспользоваться RubiRipper, эта программа как раз является графической надстройкой над описываемыми операциями. Однако возможно вам будет интересно прочитать эту статью до конца и вкратце познакомиться с широчайшим спектром возможных действий с аудиоданными в Linux.

Снятие рипа

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

Поэтому часто лучше использовать именно её для снятия рипов, благо по качеству она не уступает ни одной другой существующей программе, включая широко известный EAC.

Небольшой комментарий. Cdparanoia не занимается статистической обработкой (т.н. secured режим чтения), она только максимально качественно считывает данные с диска. Подробней об этом чуть ниже.

Итак, я для снятия рипов использую команду

cdparanoia -vzl -O +6 [::]- CDImage.wav

Самым важным тут является так называемый оффсет, без правильного указания которого вы никогда не получите точный рип. Для моего привода он равен +6. Узнать оффсет можно из базы данных accuraterip.com, узнать модель вашего привода можно командой

sudo lshw -c disk
Если вы можете подробно и технически грамотно расписать параметры cdparanoia, то смело правьте эту статью и добавляйте как можно больше информации!

Рекомендуется снимать рип несколько раз подряд, а потом проверить идентичность полученных файлов вычислением md5-суммы для них. Например, если вся работа происходит в одной папке, это можно сделать так:

md5sum -b *.wav

Все суммы должны совпадать. Если диск слишком повреждён - то совпадать они возможно не будут. В этом случае есть несколько вариантов для получения таки правильного и точного рипа:

  1. Снимать рип до тех пор, пока не получите несколько совпадающих файлов.
  2. Более сложный, но при этом правильный вариант - выбрать некий небольшой размер для блока, разбить каждый wav файл на такие блоки, посчитать md5 сумму для каждого блока и затем собрать выходной файл из блоков, совпадающих в наибольшем количестве файлов. Этот вариант требует хорошего знания скриптования (или готового скрипта), но он позволяет при желании добиться максимального качества, недоступного даже для EAC и считать даже сильно порченные диски.
  3. Различные вариации предыдущего пункта, основанные на многократном считывании данных с дальнейшей их статистической обработкой по частям.

Технических подробностей реализации этих механизмов сказать не могу, если вы можете - то добавьте их в статью. Можно избрать для себя и другой алгоритм или воспользоваться готовыми программами вроде RubiRipper.

На некоторых аудиофильных ресурсах ведутся бесконечные споры на тему того, какой рип считать правильным. Важно понимать три вещи:
  1. Во-первых, при чтении аудиодиска в случае возникновения ошибки (например, из-за того, что диск поцарапан и данные прочитать невозможно) чтение не остановится, а ошибка проигнорируется. Пропущенные данные при этом либо интерполируются, либо каким либо другим образом заменяются, а при прослушивании обычно возникает треск и прочие помехи. Именно из-за этой особенности и появилось куча софта для «правильного» чтения Audio CD.
  2. Во-вторых надо понимать, что с поцарапанного диска обычно в принципе невозможно достать достоверные данные никаким способом. Вы можете сколько угодно раз считывать повреждённый участок и скорее всего постоянно будете получать разные значения. И даже если по чистой случайности получите точные исходные данные, то никак не сможете понять, что это именно они и есть. Задача утилиты чтения - скорректировать как можно больше физических ошибок, этим и занимается cdparanoia.
  3. Ну и наконец вы всё же можете прочитать повреждённый участок много раз и на основе полученных данных каким-либо статистическим методом получить выходной образ. Это позволит с некоторой долей уверенности сказать, что вы сняли максимально приближенный к оригиналу образ. Процесс статистической постобработки как раз и называется 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 файл. Очевидных минусов у такого подхода два:

  1. Во-первых cue - это файл физической разметки, он никогда не был предназначен для хранения расширенной информации о композициях и совершенно для этого не подходит.
  2. Во-вторых из диска, сохранённого в виде одного файла, никаким образом не достать одну песню.

На самом деле разрезать можно как до сжатия выбранным кодеком, так и после. Об этом чуть позже, сначала про кодирование.

Кодирование

Для сжатия 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-интерфейс, надеюсь, вы разберётесь.

Ссылки