Converta em lote e divida .ape com .cue para .flac em várias pastas do terminal

Converta em lote e divida .ape com .cue para .flac em várias pastas do terminal

Eu tenho uma pasta de .apearquivos de CD de 44 GB (sim, quarenta e quatro). Cada um .apeé um CD completo e geralmente há um .cuearquivo junto com cada um .ape. Preciso converter, mas não dividi-los, já que não há dados de sinalização para serem usados. Há também alguns .jpgs e .logs lá, com os quais não me importo. Se uma treesaída de comando ajudar a visualizar isso, aqui está:

├── 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

etc... até 180 CDS.

Basicamente, quero dividir todos os .apearquivos em vários .flacarquivos e copiar as informações da tag do .cue, mantendo a estrutura de diretórios (de preferência em um diretório completamente novo e diferente). Prefiro um comando de linha única a um script, se possível. Como eu faria isso? Obrigado a quem sabe fazer isso!

E antes que alguém sinalize esta questão como uma duplicata desta aqui: Converta todos os arquivos .ape para .flac em diferentes subpastas, gostaria de salientar que esse usuário não precisou dividir o .ape em vários .flacs.

Responder1

Eu faria isso em várias etapas, já que você raramente faz isso. A transparência é mais importante que a automação aqui. Mas uma única linha também é possível. Presumo que se você usar apenas um comando para todos os arquivos em cada etapa, é isso que você pretendia.

Você precisa ter ffmpeg(ou avconv) shntoole cuetoolsinstalado.

Para converter todos os seus .apeno .flaclugar:

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

Se você instalar o codificador e decodificador MAC corrigido para arquivos APE de http://shnutils.freeshell.org/shntool/, este primeiro passo é desnecessário. Mas você precisaria compilá-lo com g++você yasmmesmo. O mesmo vale para .ttaarquivos, que também são frequentemente usados ​​em vez de .ape.

Dividire nome .flacarquivos:

find . -name "*.cue" -exec sh -c 'exec shnsplit -f "$1" -o flac -t "%n_%p-%t" "${1%.cue}.flac"' _ {} \;

Se shnsplittambém for usado para a conversão, substitua .flacin "${1%.cue}.flac"pela extensão do formato do qual você está convertendo.

  • %n- número de rastreio
  • %p- artista
  • %t– nome da faixa

é retirado do .cuearquivo para os .flacnomes dos arquivos. Para marcar os arquivos divididos resultantes .flac:

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

Remova os arquivos , e restantes CDImage.ape.cuequando CDImage.flacquiser CDImage.ape. Os nomes são únicos, então um simples find . -name "CDImage*" -deleteé suficiente, exceto se Mozart fez uma composição a partir da CDImagequal não tenho conhecimento.

Para shnsplitfuncionar, todos os codificadores/decodificadores necessários precisam estar instalados para que ele possa ler e gravar arquivos. Módulos para APE (e para o formato TTA) precisariam ser compilados a partir do código-fonte, os demais instalando o pacote (ou seja, FLAC).

Isso funciona para todos os casos padrão em que os arquivos .cuee .tta/ .flac/ .apetêm o mesmo nome, exceto para a extensão.


Observação lateral para outros: Se você lidar com essa conversão, seus arquivos de origem poderão ser de origem japonesa, onde APE e TTA eram mais populares do que em outros lugares. Se os .cuearquivos foram inicialmente codificados em SHIFT-JIS e agora abertos como UTF-8, a shnsplitetapaquebrará. Você precisa renomear os .cuearquivos com

find . -name "*.cue" -exec rename 's/\.cue$/.cux/' -- {} +

e converta os arquivos intermediários para UTF-8 com

find . -name "*.cux" -exec sh -c 'exec iconv -f SHIFT-JIS -t UTF-8 -o "${1%.cux}.cue" -- "$1"' _ {} \;

antes de tentar executar as etapas acima. Não se esqueça de se livrar dos .cuxarquivos quando terminar:

find . -name "*.cux" -delete

informação relacionada