LINUX.ORG.RU
ФорумTalks

MP3


0

0

Возник вопрос - можно ли каким-то образом перекодировать ~500 mp3шек с тэгами в cp1251 в UTF-8, не разломав их и не вручную? А то это, пожалуй единственный оставшийся у меня кириллический ресурс в этой сраной кодировке. Есть ведь какие-то TagV2? OGG не предлагать, так как есть еще iPod и не хочется ничего перекодировать-пережимать-курочить. Короче как-то так, но надоели вечные проблемы с русским в свежих билдай самых разных плееров.

★★★★★

Re: MP3

можно скрипт написать, используя id3ed и id3v2.

hateful_dead ()
Ответ на: Re: MP3 от hateful_dead

Re: MP3

А примеры есть? И вообще, это технически реализуемо? И еще надо проверить, что какие-то файлики уже в UTF-8. Ребус :-)

Shaman007 ★★★★★ ()
Ответ на: Re: MP3 от Shaman007

Re: MP3

Я беру eyeD3, id3info и прогоняю следующий наколеночный скрипт по всем mp3'шкам

#!/bin/bash

author="`id3info "$1" | iconv -f WINDOWS-1251 -t KOI8R | grep TPE1 | awk -F':' '{print $2}' | sed s/' '//`"
title="`id3info "$1" | iconv -f WINDOWS-1251 -t KOI8R | grep TIT2 | awk -F':' '{print $2}' | sed s/' '//`"
album="`id3info "$1" | iconv -f WINDOWS-1251 -t KOI8R | grep TALB | awk -F':' '{print $2}' | sed s/' '//`"
year="`id3info "$1" | iconv -f WINDOWS-1251 -t KOI8R | grep TYER | awk -F':' '{print $2}' | sed s/' '//`"
track="`id3info "$1" | iconv -f WINDOWS-1251 -t KOI8R | grep TRCK | awk -F':' '{print $2}' | sed s/' '//`"

eyeD3 --remove-all "$1"
eyeD3 --force-update --set-encoding=utf8 -A "$album" -a "$author" -t "$title" -n "$track" -Y "$year" "$1"

Можно лекго прикрутить проверку на существование v2.4 тэга средствами того же eyeD3.

grob ★★★★★ ()

Re: MP3

eyed3 - умеет писать utf16. с утф8 (и вообще id3v2.4) были траблы.

лучше всего заюзать easyTag. всамой последней версии он научился правильно писать utf8. при этом умеет cp1251 читать. хоть он и GUI, но процесс довольно простой, т.к. он поддерживает mass update.

svyatogor ★★★★★ ()
Ответ на: Re: MP3 от svyatogor

Re: MP3

eyeD3 нормально пишет id3v2.4 в utf8, все замечательно читается и mpd и iTunes.

grob ★★★★★ ()
Ответ на: Re: MP3 от grob

Re: MP3

надеюсь этим скриптов я не угроблю теги?

JB ★★★★★ ()
Ответ на: Re: MP3 от JB

Re: MP3

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

grob ★★★★★ ()
Ответ на: Re: MP3 от grob

Re: MP3

ага :(

JB ★★★★★ ()

Re: MP3

Как раз этим сейчас и занимаюсь:)

// retagger.cpp
// g++ -o retagger retagger.cpp -O0 -g -I/usr/lib/qt-3.3/include -L/usr/lib/qt-3.3/lib -lqt-mt -I/usr/include/taglib -ltag

#include <tbytevector.h>
#include <mpegfile.h>
#include <audioproperties.h>
#include <id3v1tag.h>
#include <id3v2tag.h>
#include <fileref.h>

#include <qtextcodec.h>
#include <qstring.h>

#include <iostream>

class ID3v1StringHandler : public TagLib::ID3v1::StringHandler
{
    QTextCodec *m_codec;

    virtual TagLib::String parse( const TagLib::ByteVector &data ) const
    {
        return QStringToTString( m_codec->toUnicode( data.data(), data.size() ) );
    }

    virtual TagLib::ByteVector render( const TagLib::String &ts ) const
    {
        const QCString qcs = m_codec->fromUnicode( TStringToQString ( ts ) );
        return TagLib::ByteVector( qcs, qcs.length() );
    }

public:
    ID3v1StringHandler( const QString & codecName )
            : m_codec( QTextCodec::codecForName( codecName ) )
    {
    }
};

using namespace std;

int main( int argc, char * argv[])
{
	if ( argc < 2 )
	{
		cout << "Using: retagger /path/to/file.mp3" << endl;
		return 0;
	}

        TagLib::ID3v1::Tag::setStringHandler( new ID3v1StringHandler( "cp1251" ) );
	TagLib::ID3v2::FrameFactory::instance()->setDefaultTextEncoding(TagLib::Stri
ng::UTF8);

	TagLib::MPEG::File *f = new TagLib::MPEG::File( argv[1] );
	
	QString title;
	QString artist;
	QString album;
	QString comment;
	QString genre;
	int year;
	int track;

	TagLib::Tag *tag = f->ID3v1Tag();
	
	if ( !tag )
	{
	    cout << "No ID3v1 tag found. Exiting ..." << endl;
	    return 0;
	}
	
	title = TStringToQString(tag->title());
	artist = TStringToQString(tag->artist());
	album = TStringToQString(tag->album());
	comment = TStringToQString(tag->comment());
	genre = TStringToQString(tag->genre());
	track = tag->track();
	year = tag->year();

	TagLib::FileRef *f1 = new TagLib::FileRef( argv[1], false );
	
	tag = f1->tag();

	tag->setTitle( QStringToTString( title ) );
	tag->setArtist( QStringToTString( artist ) );
	tag->setAlbum( QStringToTString( album ) );
	tag->setComment( QStringToTString( comment ) );
	tag->setGenre( QStringToTString( genre ) );
	
	cout << "Writing recoded tags from id3v1 (cp1251) to id3v2 (utf8)" << endl;

	f1->save( );

	return 0;
}

Delay ★★ ()
Ответ на: Re: MP3 от Delay

Re: MP3

Надоело что наш язык везде зажимают, надо подать ноту протеста.

anonymous ()
Ответ на: Re: MP3 от grob

Re: MP3

А как насчёт сборной солянки из mp3-й, у части которых теги прописаны правильно?

Xellos ★★★★★ ()
Ответ на: Re: MP3 от svyatogor

Re: MP3

> eyed3 - умеет писать utf16. с утф8 (и вообще id3v2.4) были траблы.

Враки!!!

anonymous ()

Re: MP3

rusxmms.

патчим tagwriter и натравливаем его на файл. он автоматом чинит кодировку на уникод и теги на вторую версию

Muromec ☆☆ ()
Ответ на: Re: MP3 от anonymous

Re: MP3

>Надоело что наш язык везде зажимают, надо подать ноту протеста.

Типа CP-1251-говорящее сексуальное меньшинство?

FatBastard ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.