Перекодировка mp3 тэгов (из cp1251 в koi8-r)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
Mitya-ncc
Сообщения: 268
Статус: Живущий тут

Re: Перекодировка mp3 тэгов

Сообщение Mitya-ncc »

Класс! :)
А я всё пытал

Код: Выделить всё

for i in `find . -name "*.[mM][pP]3"`; do ...

а вот с каталогами у меня и не получалось :(
В одном мгновеньи – видеть вечность,
Огромный мир в горсти песка,
В одной песчинке – бесконечность,
И небо в чашечке цветка.
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: Перекодировка mp3 тэгов

Сообщение Gloomy »

madskull
К сожалению скрипт не работает т.к. в первую очередь переименовывает самого себя; перловый скрипт траслита тоже не работает :(
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Перекодировка mp3 тэгов

Сообщение madskull »

Не должон, смотри внимательней.

Код: Выделить всё

[ "$f" == "$fn" ] || mv "$f" "$fn"

Проверка специально стоит, чтоб не пытаться переименовывать неизменяемые имена файлов.

А перловый скрипт слишком большой, чтоб его ковырять и разбираться что там к чему.

К тому же, скрипт в лине - это не BAT в досе. Можешь его вообще удалить после его старта, он нормально отработает до конца.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: Перекодировка mp3 тэгов

Сообщение Gloomy »

А перловый скрипт слишком большой, чтоб его ковырять и разбираться что там к чему.

Переделал с временными файлами - все заработало, спасибо :thumbsup:
Спасибо сказали:
Аватара пользователя
Warderer
Модератор
Сообщения: 1056
Статус: киберпИнгвин на гусеничном ходу
ОС: Debian unstable

Re: Перекодировка mp3 тэгов

Сообщение Warderer »

Люди, а давайте глупый скрипт до ума доведем?

Код: Выделить всё

#!/usr/bin/perl -w
use Getopt::Std;
$fromenc=$opts{'f'} if defined $opts{'f'};
$toenc=$opts{'t'} if defined $opts{'t'};
if($toenc){}else{$toenc="utf-8"};
if($fromenc){}else{$fromenc="koi8-r"};
$filename=$ARGV[0];
$tags=`id3v2 -l "$filename"`;
($artist)=$tags=~/TIT2.+?:(.*)/;
($title)=$tags=~/TPE1.+?:(.*)/;
($album)=$tags=~/TALB.+?:(.*)/;
chomp($artist);
chomp($album);
chomp($title);
if($artist){$newartist=(`echo "$artist" | iconv -f $fromenc -t $toenc`)}else{$newartist=""};
if($title){$newtitle=(`echo "$title" | iconv -f $fromenc -t $toenc`)}else{$newtitle=""};
if($album){$newalbum=(`echo "$album" | iconv -f $fromenc -t $toenc`)}else{$newalbum=""};
`id3v2 -a "$newartist" -A "$newalbum" -t "$newtitle" "$filename"`;
Читаю вслух с выражением маны - $50/ч + стоимость звонка. Настраиваю сервисы за Вас - $100/ч + стоимость выезда и проживания.
И восемь строк матом...(бесплатно)
Спасибо сказали:
Аватара пользователя
clx
Сообщения: 3121
Статус: Think Different !
ОС: Mac OS X

Re: Перекодировка mp3 тэгов

Сообщение clx »

2 Strangerrr:

Большое спасибо! Оч нужная вещь.
З.Ы. Может стоит тему перенести в проекты форума ?
iMac 20" Core Duo.
Спасибо сказали:
Аватара пользователя
Warderer
Модератор
Сообщения: 1056
Статус: киберпИнгвин на гусеничном ходу
ОС: Debian unstable

Re: Перекодировка mp3 тэгов

Сообщение Warderer »

(clx @ Понедельник, 11 Апреля 2005, 11:25) писал(а):2 Strangerrr:

Большое спасибо! Оч нужная вещь.
З.Ы. Может стоит тему перенести в проекты форума ?

Подожди чуть-чуть. Я-таки надеюсь что к этому скрипту снизойдет madskull, вот тогда мы скрипт в "проекты" и перенесем.
Читаю вслух с выражением маны - $50/ч + стоимость звонка. Настраиваю сервисы за Вас - $100/ч + стоимость выезда и проживания.
И восемь строк матом...(бесплатно)
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Перекодировка mp3 тэгов

Сообщение madskull »

А что - Косой? Чуть что - так Косой!...

Ну нате, получите. Я это так вижу :)

Код: Выделить всё

#!/usr/bin/perl -w
use strict;
use Getopt::Std;
use Text::Iconv;

my %opts;
getopts('f:t:', \%opts);
my ($fromenc,$toenc) = ("koi8-r","utf-8");
$fromenc=$opts{'f'} if defined $opts{'f'};
$toenc=$opts{'t'} if defined $opts{'t'};

my $filename=$ARGV[0] or die "Usage: bla-bla-bla";

my $tags=`id3v2 -l "$filename"`;
my ($artist)=$tags=~/TIT2.+?:\s*(.*)/;
my ($title)=$tags=~/TPE1.+?:\s*(.*)/;
my ($album)=$tags=~/TALB.+?:\s*(.*)/;

my $iconv = new Text::Iconv($fromenc, $toenc);

my ($newartist,$newtitle,$newalbum) = (
    $artist? '-a "'.$iconv->convert($artist).'"': "",
    $title? '-t "'.$iconv->convert($title).'"': "",
    $album? '-A "'.$iconv->convert($album).'"': "",
);

`id3v2 $newartist $newalbum $newtitle "$filename"`;


Не проверял!!!

Хотя, по большому счету, надо было добавить только забытый getopts('f:t:', \%opts)
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Перекодировка mp3 тэгов

Сообщение nercus »

Вспомнил тут, как сам в свое время мучался с кодировками mp3. Тоже писал всякие гадости:) Правда потом узнал, что MusicPD все и сам умеет и плюнул. Но потом меня кое чего не устроило, и я написал вот эту гадость (мож пригодится кому):

Код: Выделить всё

#!/bin/sh

SPATH="music"
DPATH="music.new"
FENC="-f cp1251"
#TENC="-t utf8"
TENC=
rm .unprocessed
find "${SPATH}" -name '*.mp3' -type f | while read MP3FILE
do
unset TPE1 TALB TRCK TIT2 TYER Bitrate
EVAL=$(id3info "${MP3FILE}"|sed \
'/^===/{s!`!'\''!g;s!["$]!\&!g;'\
's!^=== \(....\)[^:]*: !\1="!;'\
's!$!"!;p};'\
'/Bitrate/{s!: !=!;p};'\
'd'| iconv -f cp1251)
eval "${EVAL}"
[ -z "${TPE1}" -o -z "${TALB}" -o -z "${TIT2}" ] && echo "${MP3FILE}" >>.unprocessed && continue
DP=$(echo "${DPATH}/${TPE1}/${TYER}${TYER:+\ -\ }${TALB}" | sed "s!\`!\'!g")
[ -n "${TRCK}" ] && TRCK=$(echo "0${TRCK}"|sed 's!.*\(..\)$!\1!')
DN=$(echo "${TRCK}${TRCK:+\ -\ }${TIT2}.mp3" | sed "s!\`!\'!g")
mkdir -p "${DP}" >/dev/null
echo "${DP}/${DN} - ${Bitrate}"
cp -i "${MP3FILE}" "${DP}/${DN}"
done


На всякий случай - оно раскидывает mp3'шки по каталогам. Когда-то там была еще одна строчечка с id3v2, но потом за ненадобностью отмерла. Гадость родилась быстро и использовалась всего однажды. Как следствие - поле для усовершенствования имеется.
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
Мак Сим
Сообщения: 231
ОС: Ubuntu 9.04

Re: Перекодировка mp3 тэгов

Сообщение Мак Сим »

Блин, я в восхищение! Это что то.
Толкьо один вопрос... Люди, вы все пользуетесь id3info. А откель её взять то?
2:5020/8086.465
Мой открытый PGP-ключ тут
Dell Inspiron 2200 - Debian(testing)
Спасибо сказали:
Аватара пользователя
valeri_ufo
Бывший модератор
Сообщения: 274
Статус: Everywhere, yet nowhere

Re: Перекодировка mp3 тэгов

Сообщение valeri_ufo »

Мак Сим писал(а):
08.05.2006 23:09
Блин, я в восхищение! Это что то.
Толкьо один вопрос... Люди, вы все пользуетесь id3info. А откель её взять то?

http://id3lib.sourceforge.net/
Спасибо сказали:
Аватара пользователя
Мак Сим
Сообщения: 231
ОС: Ubuntu 9.04

Re: Перекодировка mp3 тэгов

Сообщение Мак Сим »

Спасибо, заработало.
Проникся трепетом перед башем
2:5020/8086.465
Мой открытый PGP-ключ тут
Dell Inspiron 2200 - Debian(testing)
Спасибо сказали:
Аватара пользователя
aim
Бывший модератор
Сообщения: 749
ОС: GNU/Linux

Re: Перекодировка mp3 тэгов

Сообщение aim »

Mitya-ncc писал(а):
15.06.2004 06:44
Могу предложить такой однострочник для subj.

Код: Выделить всё

for i in *mp3; do id3tag -s"`id3info "${i}" | iconv -f CP1251 -t KOI8R | grep "=== TIT2" | sed -e 's/^.*: //'`
" "${i}" >  /dev/null && id3tag -a"`id3info "${i}" | iconv -f CP1251 -t KOI8R | grep "=== TPE1" | sed -e 's/^.
*: //'`" "${i}" > /dev/null &&  id3tag -A"`id3info "${i}" | iconv -f CP1251 -t KOI8R | grep "=== TALB" | sed -
e 's/^.*: //'`" "${i}" > /dev/null; done


г-ди... какой ужас.

помимо знаний шелл-скриптинга должны присутсвовать ещё и другие. например те, что говорят что теги должны быть в unicode и idv2 2.3 или 2.4
Спасибо сказали:
dr-evil
Сообщения: 159
ОС: Fedora 18

Re: Перекодировка mp3 тэгов

Сообщение dr-evil »

а для переименования convmv совсем не катит?
тема-то вроде начиналась про перекодировку тегов, а продолжилась уже в переименовании...
Анализ подозрительных файлов тут
Все что вы скажете может быть использовано как баян.
Jabber-конференция: sysadmins.ru на conference.jabber.ru - всем добро пожаловать!
Спасибо сказали: