Convierta por lotes y divida .ape con .cue a .flac en varias carpetas desde la terminal

Convierta por lotes y divida .ape con .cue a .flac en varias carpetas desde la terminal

Tengo una carpeta de .apearchivos de CD de 44 GB (sí, cuarenta y cuatro). Cada uno .apees un CD completo y normalmente hay un .cuearchivo junto con cada uno .ape. Necesito convertirlos pero no dividirlos, ya que no hay datos de referencia para seguir. También hay algunos .jpgs y .logs allí, que no me importan. Si la treesalida de un comando ayuda a visualizar esto, aquí tienes:

├── 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... hasta 180 CDS.

Básicamente, quiero dividir todos los .apearchivos en varios .flacarchivos y copiar la información de la etiqueta del archivo .cue, manteniendo la estructura del directorio (preferiblemente en un directorio completamente nuevo y diferente). Si es posible, prefiero un comando de una sola línea a un script. ¿Cómo haría esto? ¡Gracias a cualquiera que sepa cómo hacer esto!

Y antes de que alguien marque esta pregunta como un duplicado de esta aquí: Convierta todos los archivos .ape a .flac en diferentes subcarpetas, me gustaría señalar que ese usuario no necesitaba dividir el .ape en varios .flacs.

Respuesta1

Haría esto en varios pasos, ya que esto rara vez se hace. Aquí la transparencia es más importante que la automatización. Pero también es posible una sola línea. Supongo que si usa solo un comando para todos los archivos en cada paso, esto es lo que pretendía.

Necesitas tener ffmpeg(o avconv) shntoole cuetoolsinstalado.

Para convertir todo en .apesu .flaclugar:

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

Si instala el codificador y decodificador MAC parcheado para archivos APE desde http://shnutils.freeshell.org/shntool/, este primer paso es innecesario. Pero necesitarías compilarlo contigo g++mismo yasm. Lo mismo ocurre con .ttalos archivos, que también se suelen utilizar en lugar de .ape.

Dividiry nombre .flacarchivos:

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

Si shnsplittambién se usa para la conversión, reemplace .flacin "${1%.cue}.flac"con la extensión del formato desde el que está convirtiendo.

  • %n- número de pista
  • %p– intérprete
  • %t– nombre de la pista

se toma del .cuearchivo para los .flacnombres de archivo. Para etiquetar los archivos divididos resultantes .flac:

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

Elimine los archivos CDImage.ape.cue, CDImage.flac, y restantes CDImage.apecuando lo desee. Los nombres son únicos, por lo que un simple find . -name "CDImage*" -deletees suficiente, excepto si Mozart hizo una composición a partir de CDImagela cual no tengo conocimiento.

Para shnsplitque funcione, es necesario instalar todos los codificadores/decodificadores necesarios para que pueda leer y escribir archivos. Los módulos para APE (y para el formato TTA) deberían compilarse desde el código fuente, los demás instalando el paquete (es decir, FLAC).

Esto funciona para todos los casos estándar en los que los archivos .cuey .tta// tienen el mismo nombre, excepto la extensión..flac.ape


Comentario al margen para otros: Si realiza esta conversión, sus archivos fuente podrían ser de origen japonés, donde APE y TTA eran más populares que en otros lugares. Si los .cuearchivos inicialmente estaban codificados con SHIFT-JIS y ahora se abrieron como UTF-8, el shnsplitpasoromperá. Necesitas cambiar el nombre de los .cuearchivos con

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

y convertir los archivos intermedios a UTF-8 con

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

antes de intentar realizar los pasos anteriores. No olvides deshacerte de los .cuxarchivos cuando hayas terminado con:

find . -name "*.cux" -delete

información relacionada