[分享]把ape+cue文件切割成flac的图形操作脚本。全部标签都能写进flac的(07.12.30更新)

Totem,mplayer,sopcast,realplayer,bmp
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

[分享]把ape+cue文件切割成flac的图形操作脚本。全部标签都能写进flac的(07.12.30更新)

#1

帖子 fanhe » 2007-08-03 18:50

系统要安装
gawk(貌似mawk不够强大)
monkeys-audio
zenity
shntool
cuetool
flac
才行的
如果cue是gb18030的话会自动转换成utf8编码的
把cue和ape组合的文件切割成单个的flac,标签都写进flac了,之后可以用soundkconverter慢慢折腾了
#########################
升级到7.10,旧的脚本不能工作,我改了下,发现awk不能处理shntool的输出,暂时没时间搞完美,现在这个脚本能正常工作,但图形化的进度条不能实现,想看详细进度的就在命令行运行,直接运行的话就是看不了进度而已。
我测试过,能正常使用的
#########################
今天解决了进度条的问题,现在进度条正常了
原来要加个2>&1才行,原理不清楚,那位XD知道的告诉我一声

代码: 全选

#!/bin/bash
# PS4="##### "
selection=`zenity --title="请选择一个.ape文件和一个.cue文件" --file-selection --multiple`
if [ -z "$selection" ]; then exit 0; fi
if [[ "$selection" != *.ape\|*.cue && "$selection" != *.cue\|*.ape ]]; then exit 0; fi
if [ `echo $selection | gawk -F "|" 'END {print NF}'` -ge 3 ]; then exit 0; fi

arg1=${selection%|*}; arg2=${selection#*|}
if [[ "$arg1" == *.ape ]];then file_ape=$arg1; file_cue=$arg2
else file_ape=$arg2; file_cue=$arg1; fi

i=0
while [ -f "temp$i" ]; do
i=$(($i+1))
done
> temp$i
iconv -f gb18030 -t utf8 "$file_cue" > "temp$i" && mv "temp$i" "$file_cue"
rm -f "temp$i"

tracks=`gawk -vRS="TRACK" 'END {print NR-1}' "$file_cue"`
#echo $tracks

all_titles=`gawk -vRS='TRACK' -vFS='\n' \
'{j=0;for(i=1;i<=NF;i++){if($i~/TITLE/){print $i;j=1}}};j==0 {print "TITLE \"#####\""}' "$file_cue" | \
gawk -F "\"" 'NR>=2 {printf("%s|",$2)}'`

j=1; while [ -n "$all_titles" ]; do
title=${all_titles%%|*}
artist=${all_artists%%|*}
num=`printf "%0${#tracks}d" $j`
rm -f "${num}.$title.flac"
((j++))
all_titles=${all_titles#*|}
all_artists=${all_artists#*|}
done

shntool split -f "$file_cue" -t '%n.%t' -o flac "$file_ape" 2>&1 | \
gawk -vvar=$tracks 'NR>=1 {print "#正在转换...";print (NR-1)*100/var};{fflush();}' | \
zenity --title="进度" --text="正在转换..." --progress --auto-kill --auto-close

all_titles=`gawk -vRS='TRACK' -vFS='\n' \
'{j=0;for(i=1;i<=NF;i++){if($i~/TITLE/){print $i;j=1}}};j==0 {print "TITLE \"#####\""}' "$file_cue" | \
gawk -F "\"" 'NR>=2 {printf("%s|",$2)}'`

all_artists=`gawk -vRS='TRACK' -vFS='\n' \
'{j=0;for(i=1;i<=NF;i++){if($i~/PERFORMER/){print $i;j=1}}};\
j==0 {print "PERFORMER \"#####\""}' "$file_cue" | gawk -F "\"" 'NR>=2 {printf("%s|",$2)}'`

album=`gawk -vRS='TRACK' -vFS='\n' \
'{j=0;for(i=1;i<=NF;i++){if($i~/TITLE/){print $i;j=1}}};j==0 {print "TITLE \"#####\""}' "$file_cue" | \
gawk -F "\"" 'NR==1 {printf("%s",$2)}'`

j=1; while [ -n "$all_titles" ]; do
title=${all_titles%%|*}
artist=${all_artists%%|*}
num=`printf "%0${#tracks}d" $j`
if [ "$title" != "#####" ]; then metaflac --set-tag=TITLE="$title" "${num}.$title.flac"; fi
if [ "$artist" != "#####" ]; then metaflac --set-tag=ARTIST="$artist" "${num}.$title.flac"; fi
if [ "$album" != "#####" ]; then metaflac --set-tag=ALBUM="$album" "${num}.$title.flac"; fi
metaflac --set-tag=TRACKNUMBER="$j" "${num}.$title.flac"
#if [ "$title" != "#####" ]; then mv "${num}.$title.flac" "${num:1}.$title.flac"
#else mv "${num}.$title.flac" "${num:1}.NoTitle.flac"; fi
((j++))
all_titles=${all_titles#*|}
all_artists=${all_artists#*|}
done

zenity --info --text="结束。"
exit 0
附件
ape2flac-gui.bash.tar.bz2
不想复制粘贴的就下载这个
(1.19 KiB) 已下载 156 次
上次由 fanhe 在 2007-12-30 21:52,总共编辑 10 次。
头像
jarryson
帖子: 4002
注册时间: 2005-08-14 19:53

#2

帖子 jarryson » 2007-08-03 21:50

用什么写的?支持一下。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

#3

帖子 fanhe » 2007-09-26 17:45

更新一下,由于之前用了冷门的gawk写的,所以默认情况下会有问题,现在改好了
头像
依寻依然
帖子: 1617
注册时间: 2006-10-31 14:49

#4

帖子 依寻依然 » 2007-09-26 18:46

试用了,转完一首歌就停下了,将

代码: 全选

cuebreakpoints "$file_cue" | shnsplit -o flac -n track "$file_ape" | \ 
改成

代码: 全选

shntool split -f "$file_cue" -t '%n. %t' -o flac "$file_ape" | \
就好了。中文标签仍是乱码
Borders are meant to be crossed
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

#5

帖子 fanhe » 2007-09-26 22:19

测试了一下,转换没有问题,但是进度条有问题,原来是默认的那个mawk的问题,gawk没有问题,唉,又花了我一个小时的时间。
中文标签我测试没有问题的,请确保那个cue是utf-8编码的
我更新一下
头像
依寻依然
帖子: 1617
注册时间: 2006-10-31 14:49

#6

帖子 依寻依然 » 2007-09-26 23:44

做测试就是这样嘛 :lol:
Borders are meant to be crossed
cooleeryan
帖子: 42
注册时间: 2007-04-14 14:43

#7

帖子 cooleeryan » 2007-09-28 0:02

请问下,怎么样把GB编码的cue或者说文本文件转换成UTF-8格式的
头像
依寻依然
帖子: 1617
注册时间: 2006-10-31 14:49

#8

帖子 依寻依然 » 2007-09-28 0:11

gedit之类的另存为的时候可以选择编码格式
Borders are meant to be crossed
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

#9

帖子 fanhe » 2007-11-10 14:34

今天更新一下
因为xmms2貌似还不是很完美地支持ape+cue,所以又要用这个脚本了 8)
李丑男
帖子: 320
注册时间: 2007-08-29 22:44

#10

帖子 李丑男 » 2007-11-10 23:43

我用魅族的ape2flac相当不错的说,不过得用wine模拟。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

#11

帖子 fanhe » 2007-12-30 21:53

今天解决了进度条的问题,现在进度条正常了
头像
eagle5678
帖子: 1865
注册时间: 2006-07-08 14:07

#12

帖子 eagle5678 » 2008-01-02 17:56

很好,但,我用还是没有进度条。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

#13

帖子 fanhe » 2008-01-02 23:03

eagle5678 写了:很好,但,我用还是没有进度条。
请检查有没有装齐我上面提到的软件,例如gawk
dualface
帖子: 30
注册时间: 2006-01-01 3:00

#14

帖子 dualface » 2008-01-04 22:05

我最近也转了一些 APE。

不过我是装了一个 VMPlayer,然后装了 Windows XP 深度精简版,再用千千静听来转的。

反正有些东西必须用 Windows,干脆跑虚拟机。而且深度的 Windows XP 精简版安装文件才 300M 不到,装好也就 900M 的样子。内存分配个 384M 足够了。
头像
TheThirdGhost
帖子: 1592
注册时间: 2006-07-23 16:25
来自: 南京

#15

帖子 TheThirdGhost » 2008-01-11 21:39

dualface 写了:我最近也转了一些 APE。

不过我是装了一个 VMPlayer,然后装了 Windows XP 深度精简版,再用千千静听来转的。

反正有些东西必须用 Windows,干脆跑虚拟机。而且深度的 Windows XP 精简版安装文件才 300M 不到,装好也就 900M 的样子。内存分配个 384M 足够了。
每次为转ape开win太过麻烦了,还是喜欢写个脚本,然后批量转比较方便。
回复