根据mp3文件的id3v1标签信息来更改mp3的文件名

| 暂无评论 | 暂无引用通告

-->

从网上下载的mp3文件的文件名命令方式各式各样,有的是数字命名,有的是拼音命名,平时用起来不是很方便。如果动手一个个的更改又太麻烦,下面的脚本通过模块MP3::Tag提取的歌曲和歌手标签来确定文件名。

前一段时间我将系统(fedora core 6 codepage:gb2312)中的mp3文件复制到移动硬盘(fat32)上,所有的中文文件名全乱了挂载t移动硬盘命令(mount -t vfat -o iocharset=cp936 /dev/sda1 /media)好象没错。

如:

[root@supersun music]# ls
125206413.mp3           new.pl                 ysdmh.mp3    实馨.睾.mp3
1997cmp-10holes-15.mp3  numb.mp3               一..mp3      小.咏.mp3
2005929152321527.mp3    OneStepCloser.mp3      一夜.mp3     慊?..mp3
65541180.mp3            ouruola.mp3            一夜.谢.mp3  殖.mp3
a                       papercut.mp3           业陌.一.mp3  水俸.mp3
BeyondTheHorizon.mp3    PointsOfAuthority.mp3  之..mp3      睾-寓.mp3
BreakTheHabit.mp3       porunacabez.mp3        值..mp3      硕要..mp3
Crawling.mp3            pushing_me_away.mp3    前..mp3      碌..mp3
delid3.mp3              ruguodeshi.mp3         卤一堑.mp3   职..mp3
faint.mp3               simpleid3.pl           同..mp3      蔚某.睾.mp3
HitTheFloor.mp3         somewhereIbelong.mp3   园芫.mp3     虏..mp3
id3iconv-0.2.1.jar      tag.pl                 坦..mp3      要薷.??.mp3
InThenEnd.mp3           te.pl                  失.mp3       觳?.强.mp3
LyingFromYou.mp3        wget-log               女..mp3      魔.藕.mp3
mp3id3.pl               xs.mp3                 始..mp3

现在我们来运行脚本:

[root@supersun music]# for i in *.mp3 ;do ./tag.pl $i;done

生成的文件名如下:

[root@supersun music]# ls *.mp3
 

01papercut-linkinpark.mp3                  今天你要嫁给我-陶?.mp3
04.兄弟-任贤齐.mp3                         公主的魔法项链-张含韵.mp3
08.可以爱很久-张韶涵.mp3                   六月的雨-胡歌.mp3
125206413.mp3                              其实很爱你张韶涵-张韶涵.mp3
13.Numb-LinkinPark.mp3                     卤一堑.mp3
1997cmp-10holes-15.mp3                     同桌的你-老狼.mp3
2005929152321527.mp3                       回来我的爱-阳一.mp3
65541180.mp3                               大漠情人-凤凰传奇.mp3
BeyondTheHorizon.mp3                       寓言-张韶涵.mp3
BreakingtheHabit-LinkinPark.mp3            开始懂了-孙燕姿.mp3
crawling-LinkinPark.mp3                    欧若拉-张韶涵.mp3
delid3.mp3                                 死了都要爱-信乐团SHIN.mp3
faint.mp3                                  殖.mp3
HitTheFloor.mp3                            爱上你这样的女人-张振宇.mp3
LyingFromYou-LinkinPark.mp3                狼爱上羊-汤潮.mp3
OneStepCloser.mp3                          秋天不回来-www.6621.com-王强-6621.com.mp3
PointsofAuthority(CrystalM-LinkinPark.mp3  绗?涓?娆-??????.mp3
PorUnaCabeza-CarlosGardel.mp3              职..mp3
PushingMeAway-LinkinPark.mp3               胆小鬼-梁咏琪.mp3
SOMEWHEREIBELONG-LINKINPARK.mp3            虏..mp3
TheUntitled(IntheEnd)-LinkinPark.mp3       遗失的美好-张韶涵.mp3
一夜.mp3                                   隐形的翅膀-张韶涵.mp3
一夜.谢.mp3                                香水百合-张韶涵.mp3
丁香花-唐磊.mp3
 

下面给出脚本内容:

[root@supersun music]# cat tag.pl
#!/usr/bin/perl -w
#tag.pl
#提取
use strict;
use MP3::Tag;
use Encode;
use Encode::CN;

my $file=shift;
print "----------------------------------------\n";
print "文件名:$file\n";
my $mp3=MP3::Tag->new("$file");
#检测mp3对象中的标签
$mp3->get_tags();
if(exists $mp3->{ID3v1}){
        print "下面是ID3v1的信息:\n";
#操作ID3v1标签:
        my $id3v1= $mp3->{ID3v1};

#下面注释掉的两行是演示使用单个标签时的用法,其他的方法自己可以查看模块的使用说时

#       print "Title:",encode("gb2312",decode("gb2312",$id3v1->title)),"\n";
#       print "Artist:",encode("gb2312",decode("gb2312",$id3v1->artist))."\n";
        print "一次性获取标签:\n\n";
#下面进行字符编码的处理
        my @tag_data=map encode ("gb2312",decode("gb2312",$_)),$id3v1->all();
#打印标签内容
        print "歌名:\t$tag_data[0]\n";
        print "歌手:\t$tag_data[1]\n";
        print "专辑:\t$tag_data[2]\n";
        print "年份:\t$tag_data[3]\n";
        print "注释:\t$tag_data[4]\n";
        print "曲目序号:\t$tag_data[5]\n";
        print "流派:$tag_data[6]\n";
#去除空格及预防在进行mv操作时发生插值
        $tag_data[0] =~ s/\s+//g;
        $tag_data[0] = quotemeta"$tag_data[0]";
        $tag_data[1] =~ s/\s+//g;
        $tag_data[1] = quotemeta"$tag_data[1]";
        `mv $file ${tag_data[0]}"-"${tag_data[1]}'.mp3'`;
}
#对于id3v2的标签暂时还未进行处理
if(exists $mp3->{ID3v2}){
        print "下面是ID3v2的信息:\n";
}else{
}
$mp3->close();

暂无引用通告

发送引用通告网址: http://supersun.info/mt/mt-tb.cgi/616
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

最新资源

  • IMG_1437.JPG
  • line.png
  • bar.png
  • perl_calander.jpg

关于此日记

此日记由 supersun 发表于 2007年4月22日 12:05

此Blog上的上一篇日记简单的cgi脚本

此Blog上的下一篇日记使用-d选项进行perl脚本试调

首页归档页可以看到最新的日记和所有日记。