Резюме:
Заметка продолжает разговор начатый в предыдущей заметке о записи mp3 файлов в реальном времени, например радиотрансляций. В предыдущей заметке мы рассмотрели процесс создания большого mp3 файла (650 Mb - 12 часов или 1.3 Gb - 24 часа музыки CD качества (128 kbit/s; стерео)). Теперь перед нами встают такие вопросы - как его обработать, что лучше - создать еще больший файл или сжать данные. Также немного поговорим о качестве предоставляемым форматом mp3.
Редактирование mp3 файлов
Представьте, что вы сделали прекрасную 24-х часовую запись (например Eighties Top 300 передаваемые Loostad radio), и хотели бы разделить ее на более мелкие части. Также неплохо было бы удалить рекламу и новости. Как это все сделать? Предлагаю один из вариантов:- перегоняем mp3 в wav
- используем любой wave-редактор для 'вырезания и вставки'
- перегоняем обратно - wav в mp3
- mp3 файл размером 650 Mb увеличится до 6.5 Gb в формате wav, не говоря уже о требуемом процессорном времени!
- во время декодирования mp3 в wav, mp3 файл остается. Редактирование wav файла также требует дискового пространства - например разделение файла на части по 1 часу потребует 2x6.5=13 Gb!
Короче говоря - не обойтись без программы способной редактировать сами mp3 файлы! Такие программы есть, но (в настоящее время) не под Linux. Достаточно много их под Windows, но у всех один большой недостаток - они не способны обрабатывать файлы такого размера - 650 Mb. Но мне все же удалось найти одну подходящую - 'Manns' mp3 edit'. Я использовал ее под Windows98. Графический интерфейс этой программы позволяет отметить нужное место исходного mp3 файла и скопировать его в другой файл командой 'trim'. Эта программа из категории 'donationware', что означает не обязательную плату за нее, но при полезности ее для вас было бы неплохо за нее заплатить. Но и она не без изъянов - первый: ужасно медленная работа с такими большими файлами (650 Mb) и второй: способна обработать только файлы с постоянными частотами!!! Поиск последнего часового фрагмента в 24 часовом mp3 файле занимает очень много времени и сильно нагружает диск. Извлечение же нужного фрагмента наоборот - достаточно быстрое (и без потери mp3 качества). До сих пор я не обнаружил никаких проблем с воспроизведением mp3 файлов, созданных с помощью этого редактора. Тем не менее я всегда проверяю вырезанные фрагменты, помещая их в mp3-редактор - если загрузка корректна - файл в порядке. Во время первых экспериментов я жал на кнопку 'trim' в период интенсивной работы программы с диском - вследствие чего портились файлы - их становиилось невозможно воспроизводить! Обработка файла размером 650 Mb занимает у меня примерно 1 час.
Еще более продолжительные записи (>24 часов)
Никаких особенных проблем не возникает при записи 24 часовой радиотрансляции - файл получается достаточно компактный (1.3 Gb) для записи на жесткий диск. Проблемы могут возникнуть при записи более продолжительных трансляций, например целой недели. Возможно, в таком случае, у вас просто не хватит дискового пространства. У меня такая проблема возникла во время трансляции 'Alltimes Top 2000' на Рождество и Новый год 2000 (144 часа музыки), которые передавала Radio 2. Мой жесткий диск оказался слишком маленьким и мне пришлось искать решение для такой ситуации. Вот мой рецепт:- создаем пустой файл для 700 Mb CD-R (80 минут CD)
- создаем на нем файловую систему Linux - ext2
- монтируем его, для доступа как к отдельному Linux диску
- записываем туда 12 часовой mp3 файл (128 kbit/s; стерео; примерно 670 Mb)
- размонтирываем его, монтируем второй и продолжаем запись на него
- записываем первый на CD. У меня Pentium II 450 MHz - проблем не возникло (без XWindows)
- если запись прошла удачно - удаляем mp3 файл (файл, а не image). Image будем использовать для следующей записи
- Повторяем эту процедуру до конца трансляции
- сначала я создал 4 images на отдельном разделе - для этого потребовалось 2.9 Gb дискового пространства
- соответственно они получили такие имена - image_1, image_2, image_3, и image_4:
dd if=/dev/zero of="image_1" bs=1024k count=700И повторил эту команду 4 раза. Создание их заняло некоторое время!
- Далее создал файловую систему Linux - ext2 на них:
shell> /sbin/mke2fs -b 2048 image_1Обратите внимание: файловая система ext2 сама занимает некоторое место, поэтому для записи у вас реально будет немного меньше 700 Mb!
empty_file is not a block special device.
Proceed anyway? (y,n) y - Для монтирования надо использовать loopback device, что требует поддержки в ядре (или на уровне модулей).
mount -t ext2 -o loop=/dev/loop1 image_1 /mntТеперь image доступен в каталоге /mnt. Можно попробовать делать записи!
- Размонтирование и запись CD:
umount /mntТакже обратите внимание, что 'dev=0,1,0' зависит от конфигурации вашей системы и может отличаться от приведенной в примере (команда cdrecord -scanbus выдаст вам всю необходимую информацию). Далее записываем CD и одновременно продолжаем запись трансляции на следующий image (надеюсь).
cdrecord -v speed=2 dev=0,1,0 -data image_1 - Проверяем записанный CD:
mount -t ext2 /dev/scd0 /cdromЕсли все прошло удачно - mp3 файл доступен в каталоге /cdrom! Должен заметить, что возникли некоторые проблемы с версиями ядер с 2.4.0 по 2.4.2 - я не смог примонтировать эти CD (с файловой системой ext2) и были проблемы с loopback device. В версии ядра 2.4.3 эти проблемы решены и все работает прекрасно (также как и с версиями ядер 2.2.x).
Преимущество этого способа в низких требованиях, предъявляемых к процессору. Images уже созданы! Можно автоматизировать процесс с помощью небольшого скрипта: монтирование image, запись mp3, размонтирование после 12 часов записи, монтирование следующего image и продолжение записи и т.д. Я записал все диски вручную, потому что возникла проблема (правда всего один раз и была связана с носителем). Итак, я создал 4 images: 3 были в запасе на случай возникновения проблем с записью CD (36 часов на решение проблемы). Скрипт, которым я пользовался, выглядит следующим образом:
#!/bin/sh echo "loading modules for sound support..." modprobe -k snd-card-sb16 modprobe -k snd-pcm-oss modprobe -k snd-mixer-oss echo "setting mixer..." amixer set Line 31 unmute capture; amixer set Master 31; amixer set PCM 31 cd /where/ever/you/stored/the/images/ for i in 1 2 3; do for ii in 1 2 3 4; do echo "mounting image_$ii on /mnt ..." mount -t ext2 -o loop=/dev/loop1 image_$ii /mnt echo "starting mpegrec ..." mpegrec -b 128 -x -mj -o /mnt/top2000_$ii.mp3 echo "umount /mnt" umount /mnt done done
Всю работу я проделал без XWindows, только Bash-prompt. Поддержка звука, эмуляция OSS и mixer были загружены вручную (конечно вы можете автоматизировать этот процесс посредством опций файла /etc/conf.modules). В 4-ой строке настраиваем mixer: источник записи- "линейный вход", громкость на максимум. После настройки скрипт управляет монтированием/размонтированием. Далее рассмотрим опции mpegrec: '-mj' указывает на joined stereo. Я ожидал, используя эту опцию, что файлы станут меньшего размера, но это оказалось не так - не имеет значения запиываете вы stereo или joined-stereo! В следующий раз я буду использовать ordinary stereo. Также было желание остановить 'mpegrec' после 12 часов записи. Я подправил исходники - поменял 24 на 12, но к сожалению запись продолжалась по-прежнему. Мне пришлось прерывать запись самому каждые 12 часов. Надо будет повнимательнее посмотреть на исходники...
Обратите внимание:
Также возникли проблемы с самым свежим релизом cdrecord (cdrecord-1.9). Работа предыдущей версии была корректной. Эти проблемы были решены модернизацией firmware моего CD recorder - Philips CDD 3610, с 3.02 на 3.09. Сначала я подумал, что проблемы записи дисков связаны с ядром 2.4.3, но это предположение также оказалось ошибочным!
Качество mp3 записей
На странице отзывов моей предыдущей заметки кто-то оставил ссылку на сайт (http://www.r3mix.net/), где я обнаружил интересную информацию о mp3 записях - качество и т.д. на основе программы 'lame'.
Наиболее интересные моменты:
- 128 kbit/s - не является CD качеством. Но что касается радиотрансляций- там речь не идет о таком качестве, поэтому такого вполне достаточно!!!
- реальное CD качество - это 256 kbit/s, другими словами - невозможно отличить 256 kbit/s mp3 поток от CD.
- рекомендуется делать записи с переменной частотой (variable bitrate - VBR). Стандартная частота 192 kbit/s - хорошая отправная точка. В зависимости от сложности произведения частота может увеличиваться или уменьшаться. Еще одна рекомендация - использование фильтров, которые улучшаеют качество mp3 файлов до уровня, сравнимого с 256 kbit/s записью. Philips определила эти фильтры во время разработки технологии записи CD.
Максимальное уменьшение mp3 записей
Ниже рассмотрим небольшой скрипт, присланный мне по e-mail читателем.#!/bin/bash echo "record $1 named ($3) for $2 seconds" aumix -f ~/.aumixrc /usr/bin/yes x | /usr/bin/radio $1 >/dev/null 2>/dev/null sox -V -r 44100 -c 2 -t ossdsp -w -s /dev/dsp -t wav - 2>/dev/null | lame - ~/$3.`/bin/date "+%H%M.%m-%d-%y"`.mp3 --resample 16 -b 8 -a -m m -h --lowpass 4 --highpass .12 --voice& sleep $2 kill -9 $! # copy the output to a different direcory. If you want you can # replace cp by rcp or scp and copy it to a different computer: cp $3.*`/bin/date "+.%m-%d-%y"`.mp3 /tmp/outputdir
Основная задача его - создание различаемой записи радиотрансляции ограниченной дисковым пространтсвом 3.5 Mb на час! Различаемая - значит записанная речь должна быть понятна. Естественно качество получается ужасное. В 1-ой строке настраиваем mixer, запускаем программу для карточки и 'sox'. Основная хитрость в опциях 'lame':
--resample 16 | переопределяем частоту исходного файла с 44 kHz до 16 kHz. |
-b 8 | устанавливаем 8 kbit/s. |
-a | объединяем стерео потоки в моно запись. |
-m m | включаем моно mp3 кодирование. |
-h | включаем высококачественное mp3 кодирование (медленное). |
--lowpass 4 | устанавливаем фильтр нижних частот на 4 kHz (все сигналы выше этого предела будут удалены). |
--highpass .12 | устанавливаем фильтр верхних частот на 12 kHz (все сигналы ниже этого предела будут удалены). |
--voice | используем технологию mp3 сжатия адаптированную для речи. |
Ясно, что для записи речи такое сжатие приемлемо. Но в большинстве случаев оно конечно не к чему. Тем не менее такая возможность есть!
Стандартный скрипт для создания mp3 записей
Этот скрипт также был получен чрез TalkBack pages (я благодарен за это и несомненно каждый получит выгоду от этой информации!). Это полезная сторона страницы отзывов. Любой читатель может поделиться своим опытом, спросить совет и если коротко - различная информация собирается в одном месте и доступна всем! Скрипт называется 'mp3_record':#!/bin/sh /usr/local/bin/mpegrec \ -l 5400 \ -x '--preset fm \ --tt "Computers in Your Life" \ --tl "Open Line with Tom Wieble" \ --ta "Tom Wieble" --ty `date +%Y` \ --tg "Speech" \ --tc "Copyright (c) 1997 - `date +%Y` WOSU" -c' \ -o open_line_`date +%d%b%y`_`date +%H%M`.mp3
Опция '-l 5400' ограничиваем время записи 90 минутами. Все опции после '-x' перенаправляются 'lame' (строки с 4 по 9) и опция '-o' задает имя файла в виде 'date_and_time.mp3'. Эти строки могут быть изменены по желанию. Для этого не помешает более тесное знакомство с опциями 'lame'. Рассмотрим опции подробнее:
--preset fm | Lame узнает некоторые стандартные установки. 'fm' для записи радиотрансляций. |
--tt "Computers in Your Life" | '--tt' название записи (30 символов максимум). |
--tl "Open Line with Tom Wieble" | '--tl': название альбома (30 символов максимум). |
--ta "Tom Wieble" --ty `date +%Y` | '--ta': исполнитель (30 символов максимум). |
--tg "Speech" | '--tg': жанр (название или номер). |
--tc "Copyright (c) 1997 - `date +%Y` WOSU" -c" | '--tc': комментарий (30 символов максимум). |
Неплохой вариант для создания mp3 файлов, включающий дату и время и массу другой информации. Конечно надо потратить немного времени на это, но опять же, приятно видеть что есть такая возможность!