很多音乐CD的镜像文件都带cue格式的分轨文件,在Ubuntu Linux下可以通过一些工具来实现自动分轨。

一、Ubuntu下需要安装的工具有flac,shntool,libav-tools

$ sudo apt-get install flac shntool libav-tools

要对ape直接分轨的话需要linux版的mac编解码器,编译安装;或者,先将ape文件转换为wav或falc格式。

二、对cue索引的flac分轨:

$ shntool split -t "%n.%p-%t" -f example.cue -o flac music.flac -d outputdir

-d 指定分轨后的falc文件的输出目录,不指定的话在当前目录生成

-t 指定输出文件的文件名格式,%n是音轨号,%p是演奏者/艺术家, %t标题

对ape分轨也类似

$ shntool split -t "%n.%p-%t" -f example.cue -o ape example.ape -d outputdir

目前发现ape分轨成多个ape似乎会出现错误无法处理,但是将ape分轨然后转码成其他格式(flac,mp3…)是没有问题的,flac和其他格式之间没有问题。

cue文件的字符集最好与系统当前使用的字符集相同,否则最好用iconv 转码后进行,否则最后生成的文件名可能乱码。
$ iconv -f gb18030 -t utf8 CDImage.cue -o CDImage-linux.cue
$ dos2unix CDImage-linux.cue

三、将ape转换为wav或flac格式

$ avconv -i CDImage.ape CDImage.flac //ape----->flac, 以前用ffmpeg,现在用avconv
$ avconv -i CDImage.wav CDImage.flac //wav----->flac
$ avconv -i CDImage.ape CDImage.wav //ape---->wav

四、其它格式转换

$ flac CDImage.wav CDImage.flac //wav---->flac
$ shnconv -i ape -o flac CDImage.ape //ape----->flac
$ shnconv -i flac -o ape CDImage.flac //flac----->ape

五、附脚本 audio-cue-split.sh

#/bin/bash

if [ $# -ne 2 ]
then

echo -e "Usage: audio-cue-split.sh [AUDIO_FILE_NAME] [DECODE_MODULE]"
echo "example: audio-cue-split.sh CDImage.wav wav"
echo "Note: The cue file must has the same name with the audio file."
echo -e "Note: DECODE_MODULE: wav, flac, etc"
exit

fi

AUDIO_FILE=$1
DECODE_MODULE=$2
FILE_PREFIX=`echo $AUDIO_FILE | sed "s/.$DECODE_MODULE$//"`

if [ "$DECODE_MODULE" = "ape" ]
then

echo -e "First, convert ape format to flac format, waite a minute..."
FLAC_FILE=$FILE_PREFIX.flac
#ffmpeg -i "$AUDIO_FILE" "$FLAC_FILE"
avconv -i "$AUDIO_FILE" "$FLAC_FILE"
AUDIO_FILE=$FLAC_FILE
DECODE_MODULE='flac'
CONVERT="true"

fi

CUE_FILE=$FILE_PREFIX.cue
CUE_FILE_LINUX=$FILE_PREFIX-linux.cue
#echo AUDIO_FILE=$AUDIO_FILE
#echo DECODE_MODULE=$DECODE_MODULE
#echo FILE_PREFIX=$FILE_PREFIX
#echo CUE_FILE=$CUE_FILE

iconv -f gb18030 -t utf8 "$CUE_FILE" -o "$CUE_FILE_LINUX"
dos2unix "$CUE_FILE_LINUX"
shntool split -t "%n-%t" -f "$CUE_FILE_LINUX" -o $DECODE_MODULE "$AUDIO_FILE"

if [ "$CONVERT" = "true" -a "$FLAC_FILE" != "" ]
then

echo -e "Remove temporary flac file: $FLAC_FILE"
rm -f "$FLAC_FILE"

fi

注:以上脚本在Ubuntu Kylin 14.04下测试通过。

最新文章

  1. [.net 面向对象编程基础] (3) 基础中的基础——数据类型
  2. Java override 和 overload 的区别
  3. ajax 跨域提交数据
  4. 屠龙之路_任生活如何虐你,屠龙之路还得继续_SeventhDay
  5. paip.字符串操作uapi java php python总结..
  6. IO流01--毕向东JAVA基础教程视频学习笔记
  7. linux 同步IO: sync msync、fsync、fdatasync与 fflush
  8. Java学习笔记之:Java简介
  9. 关闭“编辑窗体”后, 主窗体的DatagridView刷新数据的问题
  10. ip地址中的网络号,主机号
  11. Jquery中toggleClass的两种用法
  12. 使用psftp.exe
  13. s3c2440的A/D转换应用
  14. Linux IPC实践(8) --共享内存/内存映射
  15. PHP之二维数组根据某个下标排序
  16. Navicat 12 破解方法
  17. Java 基础:变量 与 字符串
  18. 第六周 可执行代码 以及 PSP 燃尽图 等等
  19. [Java]进程与线程的区别(转)
  20. [转] lua 获取本地当月天数

热门文章

  1. 【lucene系列学习二】Lucene实现高亮显示关键词
  2. cmd第一次推送github
  3. 一天精通MongoDB数据库
  4. TFS下载文件已损坏问题
  5. springmvc 导出excel
  6. 分针网—IT教育:调皮的JavaScript
  7. 如何为mysql添加、启动服务
  8. Bitwise And Queries
  9. mysql5.6 主从复制
  10. OpenCv关于灰度积分图的SSE代码学习和改进。