Запись CD и DVD.


Не открою Америку, заявив, что большинство Linux-программ для записи CD и DVD являются просто графическими оболочками для ряда консольных утилит. Исключение составляет, пожалуй, только версия Nero для Linux.

Долгое время утилиты записи на CD/DVD выпускались в пакете cdrtools, разрабатываемом Йоргом Шиллингом (Joerg Schilling). В 2006 году Шиллинг решил сменить лицензию с GPL на CDDL (Common Development and Distribution License), несовместимую с GPL. Точнее, сначала была изменена лицензия нескольких make-файлов. И этим сразу озаботились люди из Debian, которые не могли создавать пакеты, где GPL-код зависим от не-GPL-кода. И люди из Debian после долгих дебатов с Шиллингом (насколько я знаю, во время которых код cdrtools стал уже на 80 процентов под CDDL), сделали ответвление от оригинального проекта и назвали его cdrkit. Утилиты, входящие в его состав, получили другие названия, однако параметры командных строк сохранились прежними. Так, программа cdrecord стала именоваться wodim (сокращение от «write optical disk media»), cdda2wav превратилась в icedax («incredible digital audio extractor»), а mkisofs переименовали в genisoimage («generate ISO image»).
 

Создание образа



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

$ dd if=/dev/cdrom of=mycd.iso

Используемое здесь dd — это название стандартной программы, которая найдется в любом дистрибутиве Linux. Она копирует содержимое одного файла в другой, а поскольку в UNIX любое устройство есть файл, то dd можно использовать для создания образов любых дисков: от доисторических дискет до DVD (и более того, dd способна записать образ на тот же флоппи).

Разберем параметры: if означает input file, т.е. «входной файл», а of — output file («выходной файл»). /dev/cdrom — это стандартная ссылка на устройство CD/DVD-привода, вместо нее можно подставить и настоящее имя устройства (например, /dev/hdd). В параметре of указывается имя файла, под которым будет создан образ с помещенного в привод диска. Расширение iso — дань традиции. По умолчанию dd читает с устройства блоками по 512 байт. Это значение можно изменить параметром bs (например, bs=1024). Для принудительного копирования даже после ошибок чтения можно добавить ключ noerror. Создание копии при помощи dd может не сработать при использовании двухслойных DVD. В остальных случаях обычно работает.

В результате, на выходе получается точная копия диска. Но таким образом не получится скопировать ни аудиодиск, ни какой-нибудь защищенный диск с игрой (последний перепишется, но распознаваться как «правильный», лицензионный, не будет). Кроме того, dd не показывает данные о процессе выполняемого копирования — для этого можно лишь наблюдать за светодиодом привода и слушать гудение вращающегося диска (Прим. ред.: Или проверять изменения в размере записываемого файла-образа.).

Есть и другой способ создания образа диска. Он особенно актуален для случаев, когда нужно записать на диск каталог с файлами или множество таких каталогов. Поможет замечательная программа genisoimage. Она умеет делать образ диска из директории вот так:

$ genisoimage -f -v -J -o mycd.iso /mnt/somedisk/temp

В этом примере в текущем каталоге создается образ каталога /mnt/somedisk/temp и записывается в файл mycd.iso. Параметр -v указывает, что genisoimage должна информировать о ходе процесса в консоль, -J задает формат файловой системы (Joliet), а -f указывает genisoimage следовать по символическим ссылкам, помещенным в копируемый каталог.

Итак, чтобы сделать «виртуальный проект» диска, надо создать некий временный каталог и поместить в него символические ссылки на директории или файлы, которые вы желаете видеть в своем проекте. В чистой консоли это делать весьма скучно, поэтому воспользуемся для создания этих ссылок консольным файловым менеджером Midnight Commander. Запустим mc, на одной панели перейдем в каталог, где «проектируем» диск, а на другой панели — туда, где находится файл или каталог, символическую ссылку на который вы хотите добавить в проект. Помещаем курсор на этот файл или каталог, нажимаем Ctrl-X, отпускаем. Теперь нажимаем клавишу S. Появляется диалоговое окно с уже заполненными полями (на что делать ссылку и куда ее помещать). Подтверждаем нажатием на Enter. Всё, готово. Таким образом наполняем проект файлами и каталогами. Ничуть не медленнее, чем в k3b.

Теперь остается передать каталог проекта упомянутой утилите genisoimage и создать образ. Но хватит ли приведенных мною выше параметров на все случаи жизни? Конечно же, нет. Вникнем в некоторые тонкости. Linux может откровенно плохо читать с носителя большие видеофайлы, если на диске нет файловой системы UDF (Universal Disc Format). Напомню, что на болванке могут соседствовать разные файловые системы. По умолчанию это ISO-9660: она понимается даже в MS-DOS и «железные» DVD-плееры ее тоже очень любят. Есть также Joliet — надстройка над ISO-9660, разрешающая длинные имена файлов, причем даже в юникоде. И Linux, и Windows хорошо понимают эту файловую систему, и многие «железные» плееры тоже.

Но вернемся к UDF: ее поддержку надо обязательно включать, если вы записываете «стандартный» DVD с видео, т.е. с четкой структурой каталогов VIDEO_TS (с фильмом, состоящем из VOB-файлов) и иногда AUDIO_TS. Впрочем, лично я использую UDF при записи любых DVD. Есть два способа включить UDF для образа диска. Первый — использовать ключ -udf, а второй — это «ориентированный» на DVD Video параметр -dvd-video. В последнем случае надо, чтобы имена файлов и каталогов (VIDEO_TS и прочих) были в верхнем регистре. При создании образа файлы (их содержимое) будут отсортированы и расположены в образе диска. Сортировка не произойдет, если все названия не в верхнем регистре. Всё это должно «способствовать» чтению получаемых дисков на всех «железных» DVD-плеерах. Однако я эту сортировку не включаю, и по имеющейся у меня информации записанные без нее диски с DVD Video все равно нормально читаются на «железных» плеерах.

Другое расширение к ISO-9660 — это Rock Ridge. Оно по умолчанию включено в k3b и дает возможность использовать более длинные, чем в Joliet, имена файлов, а также большую глубину вложенности каталогов и атрибуты файлов UNIX (обратите на это особое внимание). Rock Ridge включается параметром -r, а название этого расширения взято из фильма Мэла Брукса «Сверкающие седла» (там был городок Рок Ридж). Особой нужды во включении Rock Ridge я не вижу. К слову, записанные мною в k3b (с включенным Rock Ridge) диски с DVD Video читаются только с правами пользователя root.
 

Запись образа



Когда образ подготовлен, надо его записать на болванку. Здесь поможет программа wodim. В простейшем случае ее запуск выглядит так:

# wodim dev=/dev/hdc -eject -v mycd.iso

Очевидно, что вместо /dev/hdc вы можете подставить другое устройство, а mycd.iso — это название файла с образом. Параметр -eject выдвигает каретку привода после окончания записи. У wodim есть ряд других интересных параметров:

* -dummy — симуляция прожига с выключенным лазером. Полезно, чтобы определить, сколько времени может занять запись.
* -multi — многосессионный диск.
* -fix — фиксация диска (без записи).
* speed=значение — задает скорость записи.
* blank=режим — очистка содержимого CD-RW. Доступные режимы: all (полная очистка, долго), fast (быстро), session (очистить последнюю сессию).
* -format — форматировать болванку CD/DVD-RW.
* -overburn — включить возможность записи больше, чем стандартный объем диска. В этом случае, как правило, необходимо также использовать режим записи SAO (-sao).

На этом можно было бы и закончить статью, но я не коснулся еще одной важной темы — записи обычных звуковых CD.
 

Запись музыкальных дисков



Перед записью аудиодиска необходимо подготовить звуковые дорожки. Это обычные WAV-файлы с определенными параметрами: два канала (стерео), знаковый integer — 16 бит, частота оцифровки — 44100 герц, PCM (Pulse-code modulation). Грубо говоря, это самый стандартный WAV-файл, который можно себе представить. Поскольку зачастую такие файлы и появляются в результате их копирования с аудиодисков, сначала рассмотрю эту, «обратную» записи, операцию. Если вы хотите скопировать audioCD, получив музыкальные файлы с оригинальным качеством, вам поможет утилита cdparanoia. Вообще она знаменита своим умением считывать музыку даже с крайне поцарапанных дисков. Это умение занимает очень много времени, поэтому его можно отключать ключом Z. Тогда запуск программы выглядит примерно так:

$ cdparanoia -BZ

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

$ cdparanoia 2-6 -BZ

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

Теперь — вновь к записи аудиодисков. Звуковой CD можно записать в двух режимах: TAO (track at once) и DAO (disk at once). TAO добавляет между дорожками паузы длиной в 2 секунды, а кроме того, после записи каждой дорожки выключает лазер. DAO — более новый и гибкий режим. В нем между дорожками можно записывать что угодно (не только паузы, но и, например, звуковые заметки), благодаря чему становится возможной даже запись дорожки, которая будет доступна к воспроизведению, однако не пронумерована — слушатель найдет ее только перемоткой (Прим. ред.: Это и есть так называемые «hidden tracks», зачастую помещаемые музыкальными исполнителями в конец альбома.). В такие диски можно внедрять и текст (CD-Text). Кроме того, DAO-режим — единственный способ записать диск без пауз между песнями. Еще один режим, SAO (session at once), напоминает DAO, но поддерживает многосессионность. Для выбора режима записи в wodim существуют переключатели:

-tao
-dao
-sao

Чтобы записать WAV-файлы на болванку, нужно выполнить примерно такую команду (из каталога, где они находятся):

# wodim dev=/dev/hdc -tao -eject speed=4 -pad -audio *.wav

Рассмотрим параметры. Новых для нас — всего два:

* -pad. Размер дорожки (а значит — и исходного звукового файла) должен быть кратен 2352 байтам. Иначе wodim откажется его записывать. Этот параметр (-pad) заставляет wodim автоматически дополнять нулями размер/длину дорожки до кратности 2352.
* -audio — указывает, что диск записывается в формате CD-DA (Red Book).


Заключение (про growisofs)



Многие задачи, описанные в этой статье, решаются и другими способами. Например, для копирования музыкального диска в WAV-файлы есть утилита icedax, а копировать диск с данными можно командой readom. Совершенно за бортом остался консольная утилита growisofs, служащая для записи данных на DVD, поэтому концовку я решил посвятить именно ей. growisofs — это подобие надстройки над wodim и genisoimage. Программа понимает параметры от genisoimage. Вот как с ее помощью можно записать диск:

# growisofs -Z /dev/dvd -J -f -udf /foo/bar
 
Отформатировать dvd-rw диск можно командой:
 
dvd+rw-format -f /dev/dvd

«Родной» параметр тут один — -Z, который указывает, что записывается первая сессия. Для следующей надо указывать ключ -M. Других собственных параметров у growisofs немного. Из основных назову лишь -overburn, -speed=скорость и -dvd-compat (закрывает диск DVD+R и DVD-R: его нельзя будет дополнить, зато он хорошо читается на «железных» плеерах).

Финализация многосессионного диска с growisofs:

# growisofs -M /dev/dvd=/dev/zero

Запись подготовленного ранее образа диска:

# growisofs -dvd-compat -Z /dev/dvd=mycd.iso

В ходе работы growisofs образ диска создается на лету и через канал (pipe) отправляется на программу записи.

В завершение дам совет, значение которого трудно недооценить: Работая с genisoimage и growisofs, не забывайте о параметре -f!

April 16, 2010