Якось мій приятель-линуксоид Олег Бройтман хотів записати на болванку кінофільм. І виявив, що файл на болванку не влазить. Причому мова йшла про якийсь десяток зайвих мегабайт. Інший би на його місці або засмутився і плюнув на все це справа, або, знову ж, засмутився і пішов би в магазин за приводом, який вміє писати DVD. Але мій приятель не пораженец і не марнотрат, тому він сів і написав скрипт, який може записати на болванку файл, дещо більший, ніж можна на неї записати при штатному режимі роботи.

До речі кажучи, мій приятель взагалі дуже любить писати скрипти і, що найголовніше, вміє це робити. Перші скрипти він написав ще тоді, коли навіть не чув слова «Linux». А працював він тоді в системі DOS і вважав за краще поєднувати готові програми у величезні bat-файли. Як-то раз проходив повз його комп’ютера один чоловік, що заглянув в монітор і сказав: «Та ти ж типовий линуксоид!» Олег подумав і, дійсно, став линуксоидом. Не розкаявся і донині.

Однак повернемося до нашої задачі. Для її вирішення треба згадати про те, що практично усі сучасні приводи підтримують режим запису, званий пережигом (Overburning, Oversizing) і дозволяє записати на болванку деяку кількість додаткової інформації. Оскільки скрипт для пережига болванки є не єдиним скриптом для запису компакт-дисків, то є сенс вказати найбільш загальні параметри, які будуть використовуватися практично кожним скриптом в одному файлі.

Файл .config виглядає так:
cd_image_iso=”$HOME/work/
cd-image.iso”
dev_cdrw=/dev/cdrw
dev_sg=/dev/sg0
dev_scsi=0,1,0
fs_cdrw=/cdrw
fs_mnt=/mnt
eject_cdrw=cdrw
speed=16.

Перший рядок файлу конфігурації вказує на директорію і назва iso-файлу, який є образом записуваного диска (iso-файл можна створити командою mkisofs). У трьох наступних рядках зазначаються пристрої запису на компакт-диск. Наявність трьох рядків пояснюється тим, що скрипти використовують посилання на один і той же привід, як на IDE-і SCSI-пристрій (у системі Linux пишучий привід сприймається як пристрій, підключений по інтерфейсу SCSI), а третій рядок — адресу того ж самого пристрою для низькорівневої програми запису.

Наступні два рядки описують файлові системи, куди будуть монтуватися диски командою mount. Зміст завершальних рядків конфігураційного файлу очевидний — вказується пристрій, лоток якого буде висунутий після завершення роботи, і визначається швидкість запису (зрозуміло, у кожному конкретному випадку слід поставити реальну швидкість запису, підтримувану приводом). Загальний скрипт для запису будь-якого компакт-диска називається cdrec-data і виглядає наступним чином:

#! /bin/sh
. .config
exec cdrecord -v speed=”$speed” dev=”$dev_scsi” -data “$cd_image_iso”.

Зверніть увагу на перший рядок скрипта. Вона говорить про те, що даний скрипт написаний на командному мові shell, який присутній практично в будь-якому дистрибутиві системи Linux і ставиться за замовчуванням. Для того щоб зрозуміти роботу скрипта, зовсім не обов’язково вміти програмувати. Ясно видно, що викликається команда cdrecord, яка записує на пристрій dev_scsi файл cd_image_iso зі швидкістю speed. Як ви можете помітити, поки про пережиге мова не йде. Але цей скрипт досить універсальний і використовується іншими скриптами, що дозволяє збирати їх, як конструктор.

Перед тим, як приступити до реальної запису, було б непогано протестувати болванку на предмет того, чи влізе на неї наш образ (закид у бік тестерів, яким важко крім штатного обсягу компакт-диска приводити і максимально можливий обсяг). Робиться це скриптом overburn-test:

#! /bin/sh
. .config
exec cdrec-data -overburn
-dao -dummy -eject.

Тепер стає ясно, навіщо написаний скрипт cdrec-data. Потім, щоб не повторювати один і той же текст в кожному скрипті, який так чи інакше пов’язаний з пропаленням болванки. При виконанні тестового запису каламарна пристрій працює з вимкненим лазером (або з лазером, включеним на мінімальну потужність), «працюючи» на болванку наш образ.
Якщо тест пройшов успішно, то настав час виконати запис. Для цього завдання призначений скрипт overburn:

#! /bin/sh
. .config
exec cdrec-data -overburn
-dao -eject.

Відрізняється він від тестового сценарію тільки відсутністю опції-dummy, яка і наказує лазеру не псувати болванку раніше часу.

А ще мій приятель Олег Бройтман любить слухати музику у форматі MP3. І сильно не подобається йому те, що у всіх компакт-дисках вітчизняного виробництва теги написані кодування CP-1251 (її ще називають win-кодуванням), оскільки сам він віддає перевагу KOI-8R. Зрозуміло, програвач xmms розуміє теги і кодування CP-1251 (цікаво, чи є програвачі, які працюють під Windows і розуміють KOI-8R?), але інші програми видають абракадабру. Захотілося йому, приміром, подивитися назву композиції, яка звучить в даний момент, не відкриваючи плеєра, а зробити він цього не може.

Інший би на його місці засмутився і плюнув на все це справа, або, знову ж, засмутився і перейшов би на Windows. Але, як я вже говорив, Олег — людина вперта і економний. Грошей на Windows йому шкода, а по-іншому він не вміє — принциповий. Втім, він цю Windows і даром не візьме, хіба що Білл Гейтс ліцензію GPL змінить. У цьому випадку і за гроші готовий купити, а інакше — ніяк. Ось такий він весь із себе принципове.

І тоді він вирішив написати скрипт, який може всі теги перевести з CP-1251 в KOI-8R. А потім подумав і дописав його так, щоб зворотне перетворення теж було можливим, оскільки він не тільки принципова людина, але і великий оптиміст — вірить, напевно, в те, що рано чи пізно одумається Білл Гейтс щодо ліцензії.

Цей скрипт він написав на мові python, вивчати який він почав давно з причини своєї повної нездатності до запам’ятовування складних побудов, які присутні в інших мовах (це він мені сам розповів, хоча, як мені здається, пококетував). А python — мова досить простий, не дарма його потихеньку починають в школі вивчати. Головне достоїнство цієї мови полягає в тому, що програміст, що відноситься до справи творчо, більшу частину часу може приділити методу вирішення поставленого завдання, а не боротьбі з триповерховими конструкціями.

Ця особливість дуже важлива для тих користувачів, які пишуть програми, не будучи при цьому професійними програмістами, — математикам, фізикам, хімікам, біологам… Фактично, для більшості користувачів. Втім, переконайтеся самі.
Виглядає скрипт, який назвав Олег recode-id3v2.py так:

#! /usr/local/bin/python -O
import sys
import pyid3lib
from m_id3 import all_v2_
text_frames
src_encoding = sys.argv[1]
dst_encoding = sys.argv[2]
def recode_str(astr):
astr = astr.replace(chr(185), ‘N’) # Number
return unicode(astr, src_
encoding, «replace»).encode
(dst_encoding, «replace»)
def id3recode(id3tag, attr):
astr = getattr(id3tag, attr, None)
if astr:
setattr(id3tag, attr, recode_
str(astr))
for filename in sys.argv[3:]:
id3tag = pyid3lib.tag(filename)
for frame in all_v2_text_
frames:
id3recode(id3tag, frame)
id3tag.update().

Використовує він одну зі стандартних бібліотек популярного сьогодні мови С++ — id3lib, яку чудово можна використовувати і в програмах, написаних на мові python.

Влаштований скрипт дуже просто — перекодування здійснюється через Unicode. Користуватися цим скриптом також дуже просто — потрібно набрати назву скрипта, потім дві кодування (звідки і куди) і список файлів в будь-якому вигляді, оскільки в системі Linux список файлів програмі підставляє shell.

Тільки слід звернути увагу на те, що програма запише отримані файли в ту ж директорію, що і вихідні (точніше кажучи, музична складова файлів взагалі не зачіпається, а залишається тією ж самою, що і було), стало бути, теги в первісної кодуванні стануть недоступними.

Якщо вам захочеться використовувати ці скрипти для себе, то не обов’язково переносити їх вручну зі сторінок журналу. Все, про що ви прочитали в цій статті (і набагато більше), можна знайти в інтернеті за адресою phd.pp.ru/Software/misc/cdr-mp3-video-tools. А необхідні бібліотеки можна знайти на id3lib.sourceforge.net і pyid3lib.sourceforge.net.