Converter em lote e dividir .ape com .cue para .flac em várias pastas do terminal

9

Eu tenho uma pasta de 44 GB (sim, quarenta e quatro) de .apearquivos de CD. Cada .apeum é um CD completo e geralmente há um .cuearquivo junto com cada um .ape. Preciso converter, mas não dividi-las, pois não há dados de sugestão para serem utilizados. Também existem alguns " .jpges" .logtambém, dos 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 .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 iria fazer isso? Obrigado a quem sabe como fazer isso!

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

willem.hill
fonte
Olá, por favor, explique mais sobre sua frase "... e copie as informações da tag no .cue ...". Isso significa que o nome dos arquivos .flac convertidos deve ser retirado do arquivo .cue? Então, por favor, compartilhe o conteúdo da amostra. Caso contrário, como vários arquivos devem ser criados e qual é o número máximo desses arquivos? Obrigado
αғsнιη
> Eu preciso, de alguma forma, pular esses dados, já que não há dados de sinalização. O que você quer dizer com isso? Sem os dados da sugestão, você pode converter, mas não dividir, pois as informações sobre onde as faixas começam e terminam estão na sugestão.
emk2203
@ Afshin.Hamadi Sim, o nome do arquivo corresponderia ao título da faixa. O arquivo .cue possui informações como artista, álbum etc. Essas informações devem ser copiadas para os novos arquivos flac.
willem.hill
@ emk2203 Bom ponto, atualizei a pergunta.
willem.hill
Você está se contradizendo ainda mais. "Preciso converter, mas não dividi-los, pois não há dados de sugestão para serem utilizados." - "Basicamente, quero dividir todos os arquivos .ape em vários arquivos .flac e copiar sobre as informações da marca no .cue ..." . Então o que é? Se for o padrão "Eu tenho arquivos .ape e .cue, e quero que eles sejam convertidos e divididos no local com a tag .flac", a pergunta poderia ter sido encerrada com duas boas respostas 24 horas atrás.
precisa saber é o seguinte

Respostas:

6

Eu faria isso em várias etapas, já que você faz isso raramente. 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 a cada etapa, é isso que você pretende.

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

Para converter todos os seus .apearquivos .flacno local:

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

Se você instalar o codificador e decodificador MAC corrigidos para arquivos APE em http://www.etree.org/shnutils/shntool/ , essa primeira etapa será desnecessária. Mas você precisa compilar com g++e yasmsi mesmo. O mesmo vale para .ttaarquivos, que também são frequentemente usados ​​em vez de .ape.

Dividir e nomear .flac arquivos:

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 o .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 .flacarquivos resultantes, divididos :

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

Retire os restantes CDImage.ape.cue, CDImage.flace CDImage.apearquivos em seu lazer. Os nomes são únicos, portanto, find . -name "CDImage*" -deletebasta um simples , exceto se Mozart fez uma composição começando com a CDImagequal não estou ciente.

Para shnsplitfuncionar, todos os codificadores / decodificadores necessários precisam ser instalados para que ele possa ler e gravar arquivos. Módulos para APE (e para o formato TTA) precisariam ser compilados a partir da fonte, os outros instalando o pacote (isto é, FLAC).

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


Observação adicional para outras pessoas : se você lida com essa conversão, seus arquivos de origem podem ser de origem japonesa, onde o APE e o 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 shnsplitetapa será interrompida . Você precisa renomear os .cuearquivos com

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

e converta os arquivos intermediários em 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
emk2203
fonte
A página de manual do shnsplit lista o macaco como um formato suportado, para que você possa pular a conversão para flac com ffmpeg e usar -o flaccom o shnsplit. Não espere encontrar um nome de base e um macaco padrão, pois o codec / contêiner também é usado por outros codecs sem perdas, por isso é melhor não codificar e seria melhor incluir todas as etapas em uma execução do comando find. metaflac --add-replay-gaintambém seria uma boa ideia.
LiveWireBT
@LiveWireBT: Tecnicamente, você está correto. Foi por isso que disse "duas soluções disponíveis" em um dos meus comentários. No entanto, você precisa fazer o download da fonte dos plugins para suporte a macacos e tta, instalar g ++ e yasm, compilar e instalá-los você mesmo. Eu fui com a solução ffmpeg, pois é mais fácil.
precisa saber é o seguinte
2
Para uma versão de um comando: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 22/04
11
Sim. Eu sempre executava uma vez sem a opção delete primeiro para garantir que ela funcione conforme o esperado.
precisa saber é o seguinte
11
Por favor, use as instruções ligeiramente revisadas. Tentei eles, eles trabalham.
precisa saber é o seguinte