3 title: "Archlinux下有关无损音乐的折腾"
6 tags: [Linux, music, ZT]
9 最近发现一些旧番的音乐只有无损的了...MP3的已经无法满足大众的需求了么....
10 但是在Linux下直接用MPD播放无损音乐不能分轨播放实在是不能接受.
11 于是就开始找寻切割的方法...Archwiki有相关的条目[APE+CUE Splitting](https://wiki.archlinux.org/index.php/APE%2BCUE_Splitting)
12 但是,有个明显的缺陷是分轨之后的文件居然不是用歌曲名字命名的!
14 不过我还是在菊苣的帮助下找到了完美的解决方案~
17 Linux下有个shntool的工具非常实用,可以完美解决无损音乐分轨的问题.
18 根本不需要wiki里面说的cuebreakpoints
19 `shntool split -f example.cue -t %n_%p_%t -o 'cust ext=mp3 lame --quiet - %f' example.ape`
20 -t指的是文件的标题,%n 代表编号,%p 表示 Performer,%t 表示 Title.都是从cue里面读取的信息,shntool默认不支持
21 mp3格式的,所以需要指定用lame编码器进行编码.当然很多人只是想分轨,并不想转换成压缩的mp3格式.
22 `shntool split -f example.cue -t %n_%p_%t -o flac example.ape`
23 直接转换成flac格式就好了,因为flac格式是开源的无损音乐格式,播放器对它支持的肯定比较好.
26 转换之后的文件只是单纯的音乐文件,每个音乐并没有包含想关的TAG信息,这时候需要用cuetag.sh给每个音乐文件打TAG
27 [cuetag.sh脚本](https://gist.github.com/acgotaku/7279681) 最新版貌似有问题不能使用.
28 `cuetag.sh file.cue *.mp3`
29 命令很简单,在转换好的音乐文件夹下指定cue文件和mp3文件即可自动打TAG,但是需要注意的一点是,这个脚本打的是ID3v1的标签,如果是非英语语言的话,
30 会出现乱码问题.详情请戳[Mp3标签乱码问题分析与解决方案](http://linux-wiki.cn/wiki/Mp3%E6%A0%87%E7%AD%BE%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90%E4%B8%8E%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88)
31 所以,之后我们还是要使用[mp3tagiconv](https://code.google.com/p/mp3tagiconv/)
32 这个工具来进行标签的转换使得所有的播放器都能够正确识别mp3音乐的标签.
33 `for i in *.mp3; do echo "y"| mp3tagiconv "${i}" ;done`
34 因为mp3tagiconv这个工具每次更新标签都会提示yes or no ,所以我就修改了下执行方式,使得批量自动化修改.flac格式的音乐不存在TAG编码问题.
37 虽然在PC上听无损比较爽,但是放在手机上受制于存储空间和CPU性能,还是转换成Mp3比较好.
38 `flac -d -c example.flac | lame -q 0 -b 320 - example.mp3`
39 如果想保留flac的回放增益特性的话可以在转换的时候加上
40 `--apply-replaygain-which-is-not-lossless` 参数.
48 # cuetag.sh - tag files based on cue/toc file information
49 # uses cueprint output
50 # usage: cuetag.sh <cuefile|tocfile> [file]...
58 echo "usage: cuetag.sh <cuefile|tocfile> [file]..."
62 # for FLAC and Ogg Vorbis files
66 # --remove-all-tags overwrites existing comments
67 METAFLAC="metaflac --remove-all-tags --import-tags-from=-"
70 # -w overwrites existing comments
71 # -a appends to existing comments
72 VORBISCOMMENT="vorbiscomment -w -c -"
79 VORBISTAG=$VORBISCOMMENT
83 # space seperated list of recomended stardard field names
84 # see http://www.xiph.org/ogg/vorbis/doc/v-comment.html
85 # TRACKTOTAL is not in the Xiph recomendation, but is in common use
87 fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC'
89 # fields' corresponding cueprint conversion characters
90 # seperate alternates with a space
109 (for field in $fields; do
111 for conv in `eval echo \\$$field`; do
112 value=`$CUEPRINT -n $1 -t "$conv\n" "$cue_file"`
114 if [ -n "$value" ]; then
119 done) | $VORBISTAG "$2"
126 # space seperated list of ID3 v1.1 tags
127 # see http://id3lib.sourceforge.net/id3/idev1.html
129 fields="TITLE ALBUM ARTIST YEAR COMMENT GENRE TRACKNUMBER"
131 # fields' corresponding cueprint conversion characters
132 # seperate alternates with a space
142 for field in $fields; do
144 for conv in `eval echo \\$$field`; do
145 value=`$CUEPRINT -n $1 -t "$conv\n" "$cue_file"`
147 if [ -n "$value" ]; then
152 if [ -n "$value" ]; then
155 $MP3INFO -t "$value" "$2"
158 $MP3INFO -A "$value" "$2"
161 $MP3INFO -a "$value" "$2"
164 $MP3INFO -y "$value" "$2"
167 $MP3INFO -c "$value" "$2"
170 $MP3INFO -g "$value" "$2"
173 $MP3INFO -T "$value" "$2"
183 if [ $# -lt 1 ]; then
191 ntrack=`cueprint -d '%N' "$cue_file"`
194 if [ $# -ne $ntrack ]; then
195 echo "warning: number of files does not match number of tracks"
201 vorbis $trackno "$file"
204 vorbis $trackno "$file"
210 echo "$file: uknown file type"
213 trackno=$(($trackno + 1))