当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求一段批量转换MP3文件id3和id3v2信息的脚本
帖子发表于 : 2006-02-27 19:23 

注册: 2006-02-26 16:17
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
现有MP3文件的id3和id3v2编码都为GB18030,能不能写一段脚本把它们都转换为UTF-8编码的?

有id3和id3v2两个软件包可以更改id3和id3v2信息。

万分感谢!


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-02-27 20:01 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
man exif自己写就是了。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-06-08 13:50 

注册: 2005-11-19 18:43
帖子: 181
送出感谢: 0 次
接收感谢: 0 次
网上找到一个,不过下载不了,供参考

一直找不到合用的能正確處理utf-8的id3tag editor,最後索性自己閉門造車寫了一個。功能很簡單,就是編輯id3tag,而且只能產生id3v2.4、UTF-8的tag。我只在UTF-8的環境下測試過,不知道能不能在其他locale正常運作,我想是不行的。最簡單的執行方法:

代碼:
id3v2 filename.mp3


就可以顯示id3v2標籤,並可以選擇要不要更新。
加上-p參數可以分割檔名,由檔名切割出想要的id3標籤。

代碼:
id3v2 曲目#-歌手-歌名.mp3 -p %n-%a-%t.mp3


這樣可以由檔名切割出曲目、歌手、歌名,並寫入tag中。目前支援的有%n(曲目編號)、%a(歌手)、%t(歌名)、%b(專輯)。不過碰到用空格分開、又是有空格的歌名時(英文歌)會出問題。在-p模式之下,有時候檔名不見得能切出所有想要的資訊,例如上例中沒有專輯,可以用--set-album參數:

代碼:
id3v2 曲目#-歌手-歌名.mp3 -p %n-%a-%t.mp3 --set-album 專輯


這種參數有兩個,--set-album可以設定專輯、--set-singer可以設定歌手。

這個程式最主要的功能就是可以批次轉檔,因為沒有研究linux下的檔案處理,所以只能透過外部程式取得檔案列表,導入程式的標準輸入。加上--standard-input參數,程式就會從標準輸入讀取檔名,一個檔案一行。配合ls指令使用如下:

代碼:

ls -1 *.mp3 | id3v2 -p %n-%a-%t.mp3 --set-album 專輯 --standard-input


就會把目錄下所有的mp3檔案用「曲目#-歌手-歌名.mp3」的方式分解,並把專輯名稱設為「專輯」。

最後,如果擔心-p之後的pattern分析有錯,可以加--preview參數。在preview模式之下,會印出結果,但所有的修改都不會被寫入。

程式的寫法很暴力,不過最後還是達到我的目的,在xmms、rhythmbox、amarok還有我的mp3隨身聽都能正常顯示。在寫入tag的時候,程式會把整個mp3一次讀到記憶體中,所以對於太大的mp3檔案可能不太合適。

程式與原始碼:
http://beta.yousendit.com/transfer.php? ... A87D908F43


_________________
不积跬步,无以致千里

ArchLinux


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-06-08 13:52 

注册: 2005-11-19 18:43
帖子: 181
送出感谢: 0 次
接收感谢: 0 次
还有一个,改改应该可以
嗨,樓上的訪客兄,
小弟在 sid 下測試, zh-autoconvert 可以把 big5/gb 轉成 utf-8 哦.
它還可以 gb <=> big5 / big5 <=> utf-8 / gb <=> utf-8
用來把 gb/big5 轉成 utf-8 時,只須指定 -o utf8 即可
若要把簡體中文 gb 轉成繁體 utf-8, 也只要先轉 big5 再轉成 utf-8.
簡體 utf-8 也可以用這種方法轉成繁體 utf-8.

只可惜, 若 input 是 utf-8 時, 就沒辦法省略 -i

下面是小弟用 zh-autoconvert 及 id3v2 湊出來的轉換script
代碼:
#!/bin/sh
function conv
{
TARGETSONG="$1"
id3v2 -R "$TARGETSONG" >/tmp/id3conv.sh.tmp
ID3V1_TITLE=$(cat /tmp/id3conv.sh.tmp|head -4|tail -3|head -1|tail -1|cut -c10-41|autogb -o big5|autogb -o utf8|tr -s ' ' ' ')
ID3V1_ARTIST=$(cat /tmp/id3conv.sh.tmp|head -4|tail -3|head -1|tail -1|cut -c49- |autogb -o big5|autogb -o utf8|tr -s ' ' ' ')
ID3V1_ALBUM=$(cat /tmp/id3conv.sh.tmp|head -4|tail -3|head -2|tail -1|cut -c10-41|autogb -o big5|autogb -o utf8|tr -s ' ' ' ')
ID3V1_COMMENT=$(cat /tmp/id3conv.sh.tmp|head -4|tail -3|head -3|tail -1|cut -c10-41|autogb -o big5|autogb -o utf8|tr -s ' ' ' ')
ID3V2_TALB=$(cat /tmp/id3conv.sh.tmp|grep TALB|cut -c32-|autogb -o big5|autogb -o utf8)
ID3V2_TPE1=$(cat /tmp/id3conv.sh.tmp|grep TPE1|cut -c38-|autogb -o big5|autogb -o utf8)
ID3V2_TIT2=$(cat /tmp/id3conv.sh.tmp|grep TIT2|cut -c44-|autogb -o big5|autogb -o utf8)
ID3V2_TCON=$(cat /tmp/id3conv.sh.tmp|grep TCON|cut -c22-|cut -d " " -f1|autogb -o big5|autogb -o utf8)
ID3V2_COMM=$(cat /tmp/id3conv.sh.tmp|grep COMM|cut -c24-|autogb -o big5|autogb -o utf8)
ID3V1_TITLE=${ID3V1_TITLE##\ }
ID3V1_ARTIST=${ID3V1_ARTIST##\ }
ID3V1_ALBUM=${ID3V1_ALBUM##\ }
ID3V1_COMMENT=${ID3V1_COMMENT##\ }
ID3V2_TALB=${ID3V2_TALB##\ }
ID3V2_TPE1=${ID3V2_TPE1##\ }
ID3V2_TIT2=${ID3V2_TIT2##\ }
ID3V2_TCON=${ID3V2_TCON##\ }
ID3V2_COMM=${ID3V2_COMM##\ }
ID3V1_TITLE=${ID3V1_TITLE%\ }
ID3V1_ARTIST=${ID3V1_ARTIST%\ }
ID3V1_ALBUM=${ID3V1_ALBUM%\ }
ID3V1_COMMENT=${ID3V1_COMMENT%\ }
ID3V2_TALB=${ID3V2_TALB%\ }
ID3V2_TPE1=${ID3V2_TPE1%\ }
ID3V2_TIT2=${ID3V2_TIT2%\ }
ID3V2_TCON=${ID3V2_TCON%\ }
ID3V2_COMM=${ID3V2_COMM%\ }
id3v2 --artist "$ID3V1_ARTIST" --album "$ID3V1_ALBUM" --song "$ID3V1_TITLE" --comment "":"$ID3V1_COMMENT":"" $TARGETSONG
id3v2 --TPE1 "$ID3V2_TPE1" --TALB "$ID3V2_TALB" --TIT2 "$ID3V2_TIT2" --COMM "$ID3V2_COMM" --TCON "$ID3V2_TCON" $TARGETSONG
}
function shinfo
{
echo "Usage: $SHNAME file1|path1 [file2|path2]... "
}
declare -i NOMS=$#
SHNAME=$0
SHNAME=${SHNAME##*/}
if [ $NOMS -eq 0 ];then
shinfo
else
while [ $NOMS -gt 0 ];do
if [ -d "$1" ]; then
IFS=":"
for abc in $(find "$1" -name *.[Mm][Pp]3|tr -s "\n" ":") ;do
conv "$abc"
done
elif [ -f "$1" ]; then
conv "$1"
else
echo "$1 does not exist!"
fi
NOMS=$NOMS-1
shift
done
fi


寫得很沒效率,功能也很陽春,就只是把 id3v1/v2 讀出來, 一個個轉碼後再存回去.
但這個 script 只能吃 id3 為 gb/big5 編碼的 mp3
(小弟還想不到方法在 script 中自動判別utf-8/big-5.
所以,若餵一個id3用 utf-8 編碼的 mp3, 它沒辦法判別, 會轉成亂碼.
請哪位大大出面指導一下小弟吧 ^_^ )


_________________
不积跬步,无以致千里

ArchLinux


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-08-30 11:05 
头像

注册: 2005-08-18 18:43
帖子: 3277
送出感谢: 0 次
接收感谢: 3
下载连接要注册的吗?

這兩天都在找转换ID3 tag的小工具


_________________
໌→ iCookie Gtk Theme
໌→DropPlusBluetheme
กรัก กรัก`菠萝


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-10-11 22:13 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
eexpress 写道:
man exif自己写就是了。


exif好像是编辑jpg图像文件的啊!


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2006-10-12 8:57 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10116
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 128
http://wiki.ubuntu.org.cn/Ubuntu%E6%8A%80%E5%B7%A7

有。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译