Видео ролики бесплатно онлайн

Смотреть измена видео

Официальный сайт aksakal 24/7/365

Смотреть видео бесплатно

h31 04.05.2011 18:31

Tips & tricksМодифицируем ID3-теги в MP3 для максимальной совместимости.

Про кодировку тегов в MP3 было сказано действительно очень много, ведь почти каждый линуксоид знаком с проблемой "кракозябр". Казалось бы, что ещё можно сказать? Сегодня я расскажу, как сделать теги читаемыми сразу и в Windows, и в Linux. Это будет весьма полезно для тех. кто любит обмениваться музыкой с друзьями или распространяет её в файлообменных сетях.

Немного теории


Существует две основных версии ID3-тегов - первая и вторая. Основным различием между ними является то, что ID3v1 располагается в конце файла, а ID3v2 - в начале. Кроме этого, в ID3v1 есть ограничение на длину тега, что временами вызывает проблемы.

В спецификации ID3v1 сказано, что должна использоваться только кодировка ISO 8859-1 (она же Latin-1), однако на практике это редко когда соблюдается. Лучший и самый популярный кодировщик Lame не сильно мудрствует и просто пишет всё в кодировке локали, поэтому и возникает столько проблем с "кракозябрами".

В ID3v2 тег может быть помечен как использующий Latin-1, UTF-16 (LE и BE) или UTF-8. К сожалению, UTF-8 поддерживается только начиная с относительно новой версии ID3v2.4, поэтому не все программы могут его прочитать. В число таких проблемных программ входит Explorer, Windows Media Player и старые версии остальных проигрывателей. В списках изменений новых версий Lame что-то сказано про юникод, но на практике всё без разбору помечается как Latin-1, а man-страница по этому поводу молчит.

Почти все программы, которые исправляют теги для нормального отображения под Linux, используют ID3v2.4 + UTF-8. По этой причине мы либо теряем совместимость с устаревшими проигрывателями, либо теряем совместимость с Linux. Но есть и консенсус - использование предыдущей версии ID3v2.3, которая поддерживается гораздо шире, совместно с кодировкой UTF-16 LE.

Шаг первый - из локальной кодировки в UTF-8


О подобном преобразовании пишут довольно часто. Существует несколько методов для этого, расскажу о команде, которая у меня работает всегда:
1
find . -iname "*.mp3" -type f -exec mid3iconv -e CP1251 --remove-v1 '{}' \;


Для работы необходим пакет Mutagen (python-mutagen). Если файлы были закодированы в Linux, то вместо CP1251 пишем UTF-8 (а если дело бы очень давно, то KOI8-R). Можно добавить ключ -d к mid3iconv, тогда на экран будут выводиться сами теги и вы сможете проконтролировать, всё ли правильно сделано.

Шаг второй - из UTF-8 в UTF-16


И Mutagen, и TagLib используют только ID3v2.4 для записи тегов, поэтому на этот раз нам понадобится eyeD3 (в Ubuntu это пакет eyed3, в ArchLinux - python-eyed3). Выполняем следующую команду:
1
find . -iname "*.mp3" -type f -exec eyeD3 --force-update --to-v2.3 --set-encoding=utf16-LE --no-tagging-time-frame '{}' \;


Ключ --force-update включает принудительную перезапись тегов, а --no-tagging-time-frame запрещает записывать в файл информацию о дате изменения тегов (зачем она нужна?).

EasyTag


Многим больше нравится EasyTag. Лично у меня он никогда не хотел правильно работать, в отличие от консольных утилит. Тем не менее. если уж так вы его любите, то его настройки должны выглядеть примерно так:



P.S. В комментариях речь зашла об обложках, тут тоже всё просто:
1
eyeD3 --add-image file.jpg:FRONT_COVER music.mp3



Тэги: cp1251 eyeD3 ID3 mid3iconv mp3 taglib кодировки
+ 10 -
Похожие Поделиться

derfenix 08.05.2011 21:43 #
+ 3 -
фтопку mp3, ogg - и никаких проблем с кодировкой.
h31 08.05.2011 22:11 #
+ 0 -
Музыку в Ogg фиг где найдешь.
Brodyaga 09.05.2011 01:55 #
+ 0 -
Согласен, даже на том же Jamendo ogg только через торент, а что если он в общаге запрещён.
dront78 08.05.2011 22:02 #
+ 0 -
flax же. ogg хрен где играется кроме компа
h31 08.05.2011 22:12 #
+ 4 -
Да везде Ogg играется: на Android, на куче портативных плееров.
Brodyaga 09.05.2011 02:10 #
+ 0 -
Вы это скажите владельцам телефонов чуть по старше.
inst 09.05.2011 14:16 #
+ 0 -
"Чуть постарше" это Siemens'ы, да?

В любое устройство с Symbian 9+ можно загрузить кучу сторонних плееров, которые с лёгкостью справляются с ogg.

А проблемы есть всегда.
melksoft 08.05.2011 23:02 #
+ 0 -
У меня на плеере (iRiver e200) OGG читается, правда почему-то без тегов, может из-за ID3v2.4. Хотя на предыдущей модели (e150) все было хорошо. FLAC, конечно, тоже читается, но весит он слишком дофига. В итоге коллекция лежит в OGG и рассована по папкам - вполне устраивает.
mhspace 08.05.2011 22:59 #
+ 5 -
ID3v1 давно пора похоронить.
h31 08.05.2011 23:18 #
+ 0 -
Для коротких строк, состоящих только из латиницы, он более чем подходит.
mhspace 09.05.2011 00:48 #
+ 1 -
Вот именно. Он подходит под сшишком узкий круг задач. Пока программы будут поддерживать запись в ID3v1, будут находиться такие идиоты, которые будут записывать туда и кириллицу, и всё остальное. Да, ID3v2 занимает внутри файла больше места, чем первый, но по сравнению с размером всего mp3 файла это незначительно.
vkapas 09.05.2011 01:39 #
+ 0 -
Толково написано. Спасибо.
Brodyaga 09.05.2011 01:52 #
+ 0 -
На линуксе всего 2 месяца, про эту проблему слышал, но не сталкивался. Пользовался Deadbeed, Amarok и Clementine. Они научились распознавать виндвовую кодировку, точнее амарок и апельсинка который, Deadbeef умеет, я знаю?
h31 10.05.2011 14:43 #
+ 0 -
Deadbeef должен уметь. Максимум, что может от него требоваться - указать кодировку CP1251 в настройках.
Насчёт Amarok и Clementine не могу ничего сказать - не экспериментировал.
Brodyaga 10.05.2011 16:08 #
+ 0 -
Только что проверил. Взял консольный mp3blaster и дал папку с ддт - кракозябры. Проверил Amarok, Clementine и Audacious. Они всё отлично показывали. Они научились или сравнение с плеером из терминала не корректно?
h31 10.05.2011 21:10 #
+ 0 -
Скорее это косяк mp3blaster'а. Судя по зависимостям, он не использует внешние библиотеки, так что внутри там свой велосипед, вполне вероятно, что кривой и неполный. Попробуй "mid3v2 --list music.mp3" (из пакета mutagen) - если он показывает всё верно, то значит это MP3-файлы "правильные", если нет, то таки научились распознавать.
Brodyaga 10.05.2011 22:08 #
+ 0 -
mp3 всё-таки правильные.
nk 09.05.2011 02:45 #
+ 0 -
EasyTag вроде бы сносно все переконвертирует,
полезным дополнением мне в нем кажется, то что можно задавать обложку альбома, на выделенных файлах , справа там уведите (Тег: Картинки) и выбирайте картинку, возможно еще понадобится выбрать в свойствах "обложка спереди" и в плеере музычка будет играть и еще обложка к ней будет показана.

За команды в статье спасибо, теперь точно, если что знаю куда заглянуть в начале)
h31 10.05.2011 14:56 #
+ 0 -
Ну это уж кому что больше нравится. Насчет обложек:
1
eyeD3 --add-image file.jpg:FRONT_COVER music.mp3
PaulRed 09.05.2011 10:39 #
+ 0 -
Изитег у меня всегда отлично работал + легко добавлять cover`ы. Винды у меня нет, использую vorbis на PC и сматрфоне.
caxap 10.05.2011 09:17 #
+ 0 -
на днях писал скрипт чтобы переименовать кучу мп3 с неадекватными именами (вытянул с контакта) по имени исполнителя и песни.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

TYPE="$(file -b $1 | awk '{print $1}')"
echo $TYPE
case "$TYPE" in

        directory) 
for i in $1/*.mp3; do
UNIQ="$(uuidgen)"
TITLE="`id3info "$i" | grep '^=== TIT2' | sed -e 's/.*: //g' | sed -e 's/\//-/g'`"
ARTIST="`id3info "$i" | grep '^=== TPE1' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
ALBUM="`id3info "$i" | grep '^=== TALB' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
YEAR="`id3info "$i" | grep '^=== TYER' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
TRACKNUM="`id3info "$i" | grep '=== TRCK' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
test -z "$TITLE" && TITLE=$UNIQ
test -z "$ARTIST" && ARTIST=$UNIQ

#echo "$ARTIST $TITLE $ALBUM $YEAR $TRACKNUM"
echo "$ARTIST - $TITLE"

cp $i "$ARTIST - $TITLE.mp3"
done;;
        Audio) 
UNIQ="$(uuidgen)"
TITLE="`id3info "$1" | grep '^=== TIT2' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
ARTIST="`id3info "$1" | grep '^=== TPE1' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
ALBUM="`id3info "$1" | grep '^=== TALB' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
YEAR="`id3info "$1" | grep '^=== TYER' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
TRACKNUM="`id3info "$1" | grep '=== TRCK' | sed -e 's/.*: //g'| sed -e 's/\//-/g'`"
test -z "$TITLE" && TITLE=$UNIQ
test -z "$ARTIST" && ARTIST=$UNIQ


#echo "$ARTIST $TITLE $ALBUM $YEAR $TRACKNUM"

cp $1 "$ARTIST - $TITLE.mp3";;
esac
kstep 10.05.2011 15:36 #
+ 1 -
Тогда уже рекурсивно:
1
2
3
4
5
directory)
for i in $1/*; do
scriptname.sh $i
done;;
...
caxap 10.05.2011 20:01 #
+ 0 -
на скорую руку писал, когда срочно нудно было :)

тут много есть таких но типа двойных пайпов и прочей фигни
nk 11.05.2011 19:29 #
+ 1 -
Кстати, из графических еще такая есть
Kid3 - ID3 Tagger

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн