我有一个 44GB(是的,四十四)个.ape
CD 文件文件夹。每个.ape
都是完整的 CD,并且通常.cue
每个都有一个文件.ape
。我需要转换但不需要拆分它们,因为没有提示数据可供参考。其中还有一些.jpg
s 和.log
s,我不关心。如果tree
命令输出有助于直观地了解这一点,请看这里:
├── Philips Mozart Collection - 180 CD
│ │ ├── box01-Symphonies
│ │ │ ├── 1B.jpg
│ │ │ ├── 1F.jpg
│ │ │ ├── cd01
│ │ │ │ ├── CDImage.ape
│ │ │ │ ├── CDImage.ape.cue
│ │ │ │ ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 1) - Neville Mariner, Academy of St. Martin in the Fields.log
│ │ │ │ ├── img421.jpg
│ │ │ │ └── img422.jpg
│ │ │ ├── cd02
│ │ │ │ └── CDImage.ape
│ │ │ ├── cd03
│ │ │ │ ├── CDImage.ape
│ │ │ │ ├── CDImage.ape.cue
│ │ │ │ ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 2) - Sir Neville Marinner - Acadamy of St Martin in the Fields.log
│ │ │ │ ├── img426.jpg
│ │ │ │ └── img427.jpg
│ │ │ ├── cd04
等等...一直到 180 CDS。
基本上,我想将所有.ape
文件拆分成多个.flac
文件,并从中复制标签信息.cue
,保留目录结构(最好放在一个全新的不同目录中)。如果可能的话,我更喜欢单行命令而不是脚本。我该怎么做?感谢任何知道如何做到这一点的人!
在有人将此问题标记为与此处的问题重复之前: 将不同子文件夹中的所有 .ape 文件转换为 .flac,我想指出的是,用户不需要将 .ape 拆分成多个 .flac。
答案1
我会分多个步骤来做,因为你很少这样做。透明度在这里比自动化更重要。但一行也是可能的。我假设如果你每一步只对所有文件使用一个命令,这就是你想要的。
您需要安装ffmpeg
(或avconv
)。shntool
cuetools
要将所有转换.ape
为.flac
:
find . -name "*.ape" -exec sh -c 'exec ffmpeg -i "$1" "${1%.ape}.flac"' _ {} \;
如果你安装了适用于 APE 文件的 MAC 编码器和解码器补丁, http://shnutils.freeshell.org/shntool/,第一步是不必要的。但你需要自己用 和 来编译它g++
。yasm
文件也是如此.tta
,它们也经常被用来代替.ape
。
分裂和名称 .flac
文件:
find . -name "*.cue" -exec sh -c 'exec shnsplit -f "$1" -o flac -t "%n_%p-%t" "${1%.cue}.flac"' _ {} \;
如果shnsplit
也用于转换,请将.flac
中的替换"${1%.cue}.flac"
为您要转换的格式的扩展名。
%n
- 追踪号码%p
– 表演者%t
– 曲目名称
取自文件名.cue
文件.flac
。要标记生成的拆分.flac
文件:
find . -name "*.cue" -execdir sh -c 'exec cuetag "$1" *.flac' _ {} \;
随意删除剩余的CDImage.ape.cue
、CDImage.flac
和CDImage.ape
文件。这些名称都是独一无二的,因此简单的find . -name "CDImage*" -delete
就足够了,除非莫扎特创作了CDImage
我不知道的开头的乐曲。
为了shnsplit
正常工作,需要安装所有必要的编码器/解码器,以便它能够读取和写入文件。APE 模块(以及 TTA 格式)需要从源代码编译,其他模块则需要通过安装包(即 FLAC)进行编译。
这适用于所有标准情况,其中.cue
和.tta
//.flac
文件.ape
具有相同的名称,扩展名除外。
对其他人的补充说明:如果您处理这种转换,您的源文件可能来自日本,其中 APE 和 TTA 比其他地方更受欢迎。如果文件.cue
最初是 SHIFT-JIS 编码,现在以 UTF-8 格式打开,则shnsplit
步骤将会打破. 您需要使用以下名称重命名.cue
文件
find . -name "*.cue" -exec rename 's/\.cue$/.cux/' -- {} +
并将中间文件转换为 UTF-8
find . -name "*.cux" -exec sh -c 'exec iconv -f SHIFT-JIS -t UTF-8 -o "${1%.cux}.cue" -- "$1"' _ {} \;
.cux
在您尝试执行上述步骤之前。完成以下操作后,不要忘记删除以下文件:
find . -name "*.cux" -delete