22 123
发新话题
打印

Amarok播放MP3标签乱码的解决方法

Amarok播放MP3标签乱码的解决方法 + 歌词显示脚本

Amarok已经去除了对utf8编码以外的id3tag的支持,现在下载的一般都是GBK编码的.所以只要将它的编码全部转换成utf8.这样Amarok就可以显示了.

先安装mutagen.

命令:urpmi mutagen

然后用vi输入如下代码:
-----------------------------------转换MP3ID编码的脚本--------------------------------------------

#!/usr/bin/python


import os
import sys
import locale

from optparse import OptionParser

VERSION = (0, 1)

def isascii(string):
    return not string or min(string) < '\x127'

class ID3OptionParser(OptionParser):
    def __init__(self):
        mutagen_version = ".".join(map(str, mutagen.version))
        my_version = ".".join(map(str, VERSION))
        version = "mid3iconv %s\nUses Mutagen %s" % (
            my_version, mutagen_version)
        return OptionParser.__init__(
            self, version=version,
            usage="%prog [OPTION] [FILE]...",
            description=("Mutagen-based replacement the id3iconv utility, "
                         "which converts ID3 tags from legacy encodings "
                         "to Unicode and stores them using the ID3v2 format."))

    def format_help(self, *args, **kwargs):
        text = OptionParser.format_help(self, *args, **kwargs)
        return text + "\nFiles are updated in-place, so use --dry-run first.\n"

def update(options, filenames):
    encoding = options.encoding or locale.getpreferredencoding()
    verbose = options.verbose
    noupdate = options.noupdate
    force_v1 = options.force_v1
    remove_v1 = options.remove_v1

    def conv(uni):
        return uni.encode('iso-8859-1').decode(encoding)

    for filename in filenames:
        if verbose != "quiet":
            print "Updating", filename

        if has_id3v1(filename) and not noupdate and force_v1:
            mutagen.id3.delete(filename, False, True)

        try: id3 = mutagen.id3.ID3(filename)
        except mutagen.id3.ID3NoHeaderError:
            if verbose != "quiet":
                print "No ID3 header found; skipping..."
            continue
        except Exception, err:
            if verbose != "quiet":
                print str(err)
            continue

        for tag in filter(lambda t: t.startswith("T"), id3):
            if tag == "TDRC": # non-unicode field
                continue

            frame = id3[tag]

            try:
                text = map(conv, frame.text)
            except (UnicodeError, LookupError):
                continue
            else:
                frame.text = text
                if min(map(isascii, text)):
                    frame.encoding = 3
                else:
                    frame.encoding = 1

        enc = locale.getpreferredencoding()
        if verbose == "debug":
            print id3.pprint().encode(enc, "replace")

        if not noupdate:
            if remove_v1: id3.save(filename, v1=False)
            else: id3.save(filename)

def has_id3v1(filename):
    f = open(filename, 'rb+')
    try: f.seek(-128, 2)
    except IOError: pass
    else: return (f.read(3) == "TAG")

def main(argv):
    parser = ID3OptionParser()
    parser.add_option(
        "-e", "--encoding", metavar="ENCODING", action="store",
        type="string", dest="encoding",
        help=("Specify original tag encoding (default is %s)" %(
        locale.getpreferredencoding())))
    parser.add_option(
        "-p", "--dry-run", action="store_true", dest="noupdate",
        help="Do not actually modify files")
    parser.add_option(
        "--force-v1", action="store_true", dest="force_v1",
        help="Use an ID3v1 tag even if an ID3v2 tag is present")
    parser.add_option(
        "--remove-v1", action="store_true", dest="remove_v1",
        help="Remove v1 tag after processing the files")
    parser.add_option(
        "-q", "--quiet", action="store_const", dest="verbose",
        const="quiet", help="Only output errors")
    parser.add_option(
        "-d", "--debug", action="store_const", dest="verbose",
        const="debug", help="Output updated tags")

    for i, arg in enumerate(sys.argv):
        if arg == "-v1": sys.argv = "--force-v1"
        elif arg == "-removev1": sys.argv = "--remove-v1"

    (options, args) = parser.parse_args(argv[1:])

    if args:
        update(options, args)
    else:
        parser.print_help()

if __name__ == "__main__":
    try: import mutagen, mutagen.id3
    except ImportError:
        # Run out of tools/
        sys.path.append(os.path.abspath("../"))
        import mutagen, mutagen.id3
    main(sys.argv)

保存为mid3iconv.

运行: find . -iname "*.mp3" -execdir mid3iconv -e GBK {} \;
就可以自动转换成utf8的编码了.


--------------------------------显示歌词的脚本---------------------------------------------------
作者是Mandrakechina的三翻领.现在转发出来给大家.觉得好用就下载吧.这个脚本是专门给utf8环境使用的.      
附件: 您所在的用户组无法下载或查看附件
Desktop:Pentium4 1.7G/512+128M DDR/BLACKGOLD CANNON/FX5200/107S5/SiI 680/ST 60G+MT 40G+MT 46G x3@XP SP2+2003 SRV+MDV 2007 Laptop:Asus A9T

TOP

............................收藏了

我都是自己手动换的...........................      
Powered By Myself

TOP

我也不容易啊      
附件: 您所在的用户组无法下载或查看附件
Powered By Myself

TOP

现在头痛的是Amarok放弃了其他引擎,只支持XINE的。

我的APE都不知道如何才能支持上。我已经慢慢放弃MP3了。      
Desktop:Pentium4 1.7G/512+128M DDR/BLACKGOLD CANNON/FX5200/107S5/SiI 680/ST 60G+MT 40G+MT 46G x3@XP SP2+2003 SRV+MDV 2007 Laptop:Asus A9T

TOP

ape那东西玩不起啊,就算在电脑上能放出来,也达不到理想效果。

除非...........

创新高端声卡或者坦克的声卡+惠威2.0的音箱,5.1的更好,你要拿个漫步者2.0的,都不好意思跟人家打招呼.......      
Powered By Myself

TOP

要想听音乐,最好的办法就是1000块钱以上的cd机,便携的也行+2.0的音箱。你要用2.1的音箱是享受不了hi-fi的。

算起来的话,2000块的投入,基本与hi-fi沾点边了。      
Powered By Myself

TOP

我说点题外话啊,楼主用ape我理解,咱都是喜欢音乐的人,给你一个地址,你看看那里面几张台式cd机的输入-解码-输出系统中的电路版,那样的东西才能放出高品质cd,他们的原件都是自己配的,买的最好的,不计成本了已经。

前几个电路版只是dac部分,是整个输入-解码-输出部分中的数字/类比转换器。后几张是老式cd的输入-解码-输出的整体电路版,这些东西太复杂,需要高品质元件,还要合理布局,躲避干扰。这样的电路设计,可以完全达到cd音质的高保真效果,要超出ape很多。很极品的东西

而我们的便携式cd和声卡,把所有这些东西只作在一张5寸左右的电路版上,还要考虑成本和空间,用一般电阻和廉价的滤波器还有解码芯片以及很薄的pcb电路版。更无优秀的布局和屏蔽性可言。所以,建议楼主还是听高品质mp3音乐,这样才能发挥出我们声卡应有的效果~~~

玩hi-fi(高保真设备)就是一个无底洞。

http://www.feverhifi.com/ShowPost.asp?ID=150&\"\"age=1      
Powered By Myself

TOP

握手...

原来兄台也是爱音乐之人啊.嘻嘻.太发烧的东西我玩不起啊.现在我的配置比普通的板载还算好一点吧.板载的我已经禁用了.我现在用的是黑金II CANNON.声音还可以.原来在它与创新A2还有乌龟的卡之间选择.最后看中它的音乐方面的性能就买了.配冲击波的5102六声道箱.煲了一个星期.效果一般.后来我自己将主声道的喇叭给换了.信号线也换成秋叶原的无氧铜.嘻嘻.结果听起来有点感觉了.听320K的MP3和听APE能分辨出.原来用2.4内核的时候有驱动.现在转到2.6内核后就出不了声了.官方没有出驱动.用内核自带的水晶4630模块驱动不起来.因为这块卡是带有继电器的.要特殊的模块激活(我EMAIL官方这样说的).现在只能用本本听歌.很不爽.

说实话.目前最好的音质当然非CD莫属.要在电脑上达到CD的效果恐怕很难.兄台给的网站里的东东都是HI-FI级别的了.DALE的电阻中频解释力一向很强悍.JE253也是精品来的.呵呵.这样的元件...玩不起啊.现在我的NH1已经很满足了.能支持CD的PCM格式.配EX71低音不比以重低音著称的SHARP差. ^-^      
Desktop:Pentium4 1.7G/512+128M DDR/BLACKGOLD CANNON/FX5200/107S5/SiI 680/ST 60G+MT 40G+MT 46G x3@XP SP2+2003 SRV+MDV 2007 Laptop:Asus A9T

TOP

呵呵,兄弟小有成就啊,我得多像你学习啊

以后还要向你多多学习,元件这一块我不是太懂,只是明白点,我用的笔记本,只能配漫步者北美版1000tc了。打算配个外置声卡....以后咱们多交流啊~~~

ape貌似在pc上只是听着音色上亮很多,可能我声卡的解析度没这么高。ape拿手的音场和声音还原效果pc声卡还是不能发挥出来啊。      
Powered By Myself

TOP

创新那块PCMCIA的A2效果听说很不错啊.兄台可以考虑.

PS:网上的320K MP3很少啊.就算有但有时又不是自己喜欢的歌.所以要自己买CD压.而现在网上很多APE的资源.所以我才疯狂BT APE的.呵呵.(小声点啊.现在BT在香港列为刑事犯罪了.不知道会不会蔓延到大陆.到时就惨了.)      
Desktop:Pentium4 1.7G/512+128M DDR/BLACKGOLD CANNON/FX5200/107S5/SiI 680/ST 60G+MT 40G+MT 46G x3@XP SP2+2003 SRV+MDV 2007 Laptop:Asus A9T

TOP

 22 123
发新话题