确保安装了gawk,zenity,shntool,flac,mac

#!/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

linux ape,linux把ape+cue格式转换成flac,同时保留曲目信息转载相关推荐

  1. 怎样将dwg格式转换成pdf?

    怎样将dwg格式转换成pdf?我们知道dwg是电脑辅助设计软件AutoCAD以及基于AutoCAD的软件保存设计数据所用的一种专有文件格式.而且此格式文件组只能在CAD软件中才能打.那当我们的电脑或者 ...

  2. ape转wav音质会损失吗 怎么将ape格式转换成wav

    ape转wav音质会损失吗 怎么将ape格式转换成wav?据了解,WAV是波形文件,是从CD上翻拷下来的无损格式文件,音质最好,但体积很大:而APE是无损压缩格式文件,是按一定的算法把波形文件压缩到原 ...

  3. linux mbr转换成gpt分区格式,MBR怎么转换为GPT?硬盘MBR格式转换成GPT格式教程

    硬盘MBR格式怎么转换成GPT格式?这是很多小白电脑用户所不了解的.首先介绍一下硬盘gpt格式,GPT是一种全局唯一标识分区表(GUID Partition Table,缩写:GPT),是指全局唯一标 ...

  4. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  5. Win10系统如何将M4A音乐格式转换成MP3格式

    M4A和MP3一样也是一种音频格式,不一样的地方就是M4A的音质可能要比MP3好一些(因人而异).那么Win10系统如何将M4A音乐格式转换成MP3格式?其实我们可以利用音频格式转换器来转换M4A音乐 ...

  6. php处理微信返回xml数据,php将微信返回的xml格式转换成数组

    废话不多说直接上代码 代码<?php header("Content-type: text/html; charset=utf-8"); date_default_timez ...

  7. php把时间格式转换为时间戳,php如何将时间格式转换成时间戳?

    php时间格式转换为时间戳的方法:1.使用mktime()将时间转换为时间戳,语法为"mktime(小时.分钟.秒.月.日.年)":2.使用strtime()将字符串表示的日期转换 ...

  8. vep文件如何转换mp4_如何将DVD的vob视频格式转换成mp4格式

    首先简述一下,VOB是DVD Video OBject的缩写,vob文件用来保存所有MPEG-2格式的音频和视频数据,这些数据不仅包含影片本身,而且还有供菜单和按钮用的画面以及多种字幕的子画面流.如何 ...

  9. 处理mp3_如何把MP3转换成FLAC格式?这三个方法简单快速

    在我们日常娱乐和日常工作中,如果遇见将MP3转换为FLAC的问题该怎么办?其实很简单.今天小编就来给大家分享几个将MP3转换为FLAC的方法.一起来看看吧! 工具/原料 电脑 风云音频处理大师 格式工 ...

最新文章

  1. C++_pointer-like classes,function-like classes
  2. python Appium安装及环境配置 mitmproxy安装配置
  3. 文巾解题 leetcode1442. 形成两个异或相等数组的三元组数目
  4. ArcGIS实验教程——实验三十一:ArcGIS构建泰森多边形(Thiessen Polygon)实例精解
  5. Razor语法和Razor引擎大全
  6. echars x轴单位_如何让echarts中y轴的单位位于数值的右上角
  7. linux部署多个jar 会宕机_部署springboot+vue项目文档(若依ruoyi项目部署步骤)
  8. JAVA并发编程实践笔记
  9. APP测试之使用ADB可能遇到的错误及解决办法
  10. 如何区分常见 USB 接口类型
  11. 计算机网络基础知识 帮助学习网络管理的初学者快速了解网络管理的初步结构知识...
  12. 非平衡电桥电阻计算_微安表内阻值对热敏电阻温度计设计的影响
  13. CE认证---EMC最新标准-EN55032
  14. Qt 字体大小的计算
  15. 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
  16. revit二次开发之数据库的使用
  17. excel2003打开后找不到工作表
  18. @html.dropdownlist默认多选,Html.DropDownList()赋默认值
  19. [leetcode] 质因数分解
  20. Linux下编译安装python

热门文章

  1. JavaScript 简介第一课
  2. MyBatis框架generatorSqlmapCustom自动生成及下载方法
  3. linq to sql 行转列_n套SQL面试题--行转列、留存、日活等
  4. 一分钟在云端快速创建MySQL数据库实例
  5. 内存池的设计和实现总结(一)
  6. SqlHelper帮助类_上(SQLServer数据库含Connection详解)
  7. WCF 基础 契约 和 绑定
  8. 【个人笔记】OpenCV4 C++ 快速入门 12课
  9. java插件安装步骤_eclipse插件安装的四种方法
  10. Audio之音频帧周期(四十三)