在终端的各个文件夹中将带有.cue的.ape批处理转换并拆分为.flac


9

我有一个44GB的.apeCD文件文件夹(是,四十四个)。每个.ape都是完整的CD,通常.cue每个都有一个文件.ape。我需要转换而不是拆分这些,因为没有提示数据可以通过。里面也有一些.jpgS和.logS,我不在乎。如果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拆分为多个.flacs。


嗨,请您进一步说明一下句子“ ...,然后从.cue ...复制标签信息”。这是否意味着转换后的.flac文件名应从.cue文件中提取?然后,请您分享其中的示例内容。否则应创建多个文件,这些文件的最大数量是多少?谢谢
αғsнιη

>我需要以某种方式跳过这些,因为没有提示数据可以通过。这是什么意思 如果没有提示数据,则可以转换,但不能拆分,因为有关音轨开始和结束位置的信息都在提示中。
emk2203 '16

@ Afshin.Hamadi是的,文件名将与曲目标题匹配。.cue文件包含艺术家,专辑等信息。此信息应复制到新的flac文件中。
willem.hill

@ emk2203好点,我更新了问题。
willem.hill

你更自相矛盾。“我需要转换而不是拆分这些,因为没有提示数据。” - “基本上,我想所有的.ape文件分割成多个.FLAC文件和标签信息从.CUE复制过......”。那是什么 如果它是标准的“我有.ape和.cue文件,并且我希望它们将它们转换并就地拆分为标记的.flac”,则该问题可能在24小时前给出了两个很好的答案。
emk2203 '16

Answers:


6

我会分多个步骤进行,因为您很少这样做。在这里,透明度比自动化更重要。但是单行也是可能的。我假设如果每个步骤仅对所有文件使用一个命令,这就是您想要的。

您需要安装ffmpeg(或avconvshntoolcuetools安装。

要将所有内容转换.ape.flac原位:

find . -name "*.ape" -exec sh -c 'exec ffmpeg -i "$1" "${1%.ape}.flac"' _ {} \;

如果您从http://www.etree.org/shnutils/shntool/安装了用于APE文件的修补MAC编码器和解码器, 则不需要第一步。但是您需要自己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还用于转换,请用要转换的格式的扩展名替换.flacin "${1%.cue}.flac"

  • %n - 追踪号码
  • %p –表演者
  • %t –曲目名称

.cue文件中获取.flac文件名。要标记生成的拆分.flac文件:

find . -name "*.cue" -execdir sh -c 'exec cuetag "$1" *.flac' _ {} \;

随意删除剩余的CDImage.ape.cueCDImage.flacCDImage.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

shnsplit的联机帮助页将ape作为受支持的格式列出,因此您可以跳过使用ffmpeg转换为flac的操作,-o flac而改为使用shnsplit。不要期望找到标准的基名和猿类,因为也会使用其他无损编解码器,因此最好不要硬编码,最好将所有步骤包含在find命令的一次运行中。metaflac --add-replay-gain也是一个好主意。
LiveWireBT

@LiveWireBT:从技术上讲,您是正确的。这就是为什么我在评论之一中说“有两种解决方案可用”的原因。但是,您需要下载支持ape和tta的插件的源代码,安装g ++和yasm并自行编译和安装它们。我使用ffmpeg解决方案,因为它更容易。
emk2203 '16

2
对于单命令版本:find -name '*.ape' -execdir sh -c 'flac="${1%.ape}.flac"; ffmpeg -i "$1" "$flac" && shnsplit -f CDImage.ape.cue "$flac" && cuetag CDImage.ape.cue "$flac"' _ {} \:
David Foerster,2016年

1
是。我总是会先运行一次而无需先执行Delete开关,以确保它按预期运行。
emk2203 '16

1
请使用略有修改的说明。试了他们,他们工作。
emk2203 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.