众所周知, ape由于版权原音, linux下很多软件都不支持, 而网上流传的lossless format很多都是ape,
特别是verycd上的 -,-
for me, 最重要的原因是: mocp 只支持flac, 因此我要把下载回来的东东做成flac或转成320K的mp3, 并可能会分轨.
下面提供我的解决方案.
1. [flac|ape]+cue分轨转成mp3
这里在我上一篇post已经提到了.不再赘述.
2. [flac|ape]+cue分轨转成[flac|ape]
虽然说320Kbps正常的地球人已经听不出音质的损耗了, 但不排除有人是从那美克星来的...
linux下很多播放器不支持cue(audacious支持很好!见这里)
于是就有了这个必要.
原理其实与1差不多,但是有一个问题,就是ape分轨貌似会有问题....我不想看什么问题,毕竟我只需要转成flac.
直接给code吧
<code>
#!/bin/bash
cuefile="$1"
filename="$2"
filetype="$3"
shntool split -t '%p-%a-%n-%t' -f "$cuefile" -o "$filetype" "$filename"
tagfromcue "$cuefile" "$filetype"
</code>cuefile="$1"
filename="$2"
filetype="$3"
shntool split -t '%p-%a-%n-%t' -f "$cuefile" -o "$filetype" "$filename"
tagfromcue "$cuefile" "$filetype"
其中tagfromcue是update id3tag用的,代码如下:
<code>
#!/bin/bash
cuefile="$1"
filetype="$2"
tracks=$(cueprint -d '%N' "$cuefile")
#ID3 tag MP3 files
i=1
while [ $i -le $tracks ]; do
artist[$i]=$(cueprint -n$i -t '%P' "$cuefile")
# note that P=album performer, p=track performer
# and sometimes P may be empty
# since artist is the starting string of file and '-' is not allowed at first
# we need fill some stuff to prevent error... set as unknown
if [ -z "${artist[$i]}" ];then
artist[$i]=$(cueprint -n$i -t '%p' "$cuefile")
if [ -z "${artist[$i]}" ];then
artist[$i]="Unknown"
fi
fi
album[$i]=$(cueprint -n$i -t '%T' "$cuefile")
tracknum[$i]=$(cueprint -n$i -t '%02n' "$cuefile")
title[$i]=$(cueprint -n$i -t '%t' "$cuefile")
f="${artist[$i]}"-"${album[$i]}"-"${tracknum[$i]}"-"${title[$i]}"."$filetype"
echo "setting tag of " "$f"
eyeD3 --no-color --set-encoding=utf8 -a "${artist[$i]}" -A "${album[$i]}" -n "${tracknum[$i]}" -t "${title[$i]}" "$f"
i=$[$i+1]
done
</code>cuefile="$1"
filetype="$2"
tracks=$(cueprint -d '%N' "$cuefile")
#ID3 tag MP3 files
i=1
while [ $i -le $tracks ]; do
artist[$i]=$(cueprint -n$i -t '%P' "$cuefile")
# note that P=album performer, p=track performer
# and sometimes P may be empty
# since artist is the starting string of file and '-' is not allowed at first
# we need fill some stuff to prevent error... set as unknown
if [ -z "${artist[$i]}" ];then
artist[$i]=$(cueprint -n$i -t '%p' "$cuefile")
if [ -z "${artist[$i]}" ];then
artist[$i]="Unknown"
fi
fi
album[$i]=$(cueprint -n$i -t '%T' "$cuefile")
tracknum[$i]=$(cueprint -n$i -t '%02n' "$cuefile")
title[$i]=$(cueprint -n$i -t '%t' "$cuefile")
f="${artist[$i]}"-"${album[$i]}"-"${tracknum[$i]}"-"${title[$i]}"."$filetype"
echo "setting tag of " "$f"
eyeD3 --no-color --set-encoding=utf8 -a "${artist[$i]}" -A "${album[$i]}" -n "${tracknum[$i]}" -t "${title[$i]}" "$f"
i=$[$i+1]
done
3. 单轨的ape 转 flac
直接使用mac来完成.写成script比较方便
<code>
#!/bin/bash
filename="$1"
mac "$1" - -d | flac --best - -o "${filename/%ape/flac}"
<code>filename="$1"
mac "$1" - -d | flac --best - -o "${filename/%ape/flac}"
最后可以再用find wrap之, 作用是把当前目录下的所有ape转成flac.
find . -iname "*.ape" -execdir ape2flac {} \;
参考资料:
2 comments:
拜师兄..
PS:师兄好帅.
谢谢
顺便恭喜你破墙而入 -。-
Post a Comment