Convierte por lotes y divide .ape con .cue a .flac en varias carpetas desde la terminal

9

Tengo una carpeta de 44GB (sí, cuarenta y cuatro) de .apearchivos de CD. Cada uno .apees un CD completo, y generalmente hay un .cuearchivo junto con cada uno .ape. Necesito convertir pero no dividir estos, ya que no hay datos de referencia para seguir. También hay algunos .jpgs y .logestá ahí también, que no me importa. 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 ... todo el camino hasta 180 CDS.

Básicamente, quiero dividir todos los .apearchivos en varios .flacarchivos y copiar la información de la etiqueta desde .cue, manteniendo la estructura del directorio (preferiblemente en un directorio completamente nuevo y diferente). Prefiero un comando de una sola línea a un script si es posible. ¿Cómo voy a hacer 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 múltiples .flacs.

willem.hill
fuente
Hola, ¿podría explicar más acerca de su oración "... y copiar la información de la etiqueta de .cue ...". ¿Significa que el nombre de los archivos .flac convertidos debe recogerse del archivo .cue? Entonces, ¿podría compartir contenido de muestra? De lo contrario, ¿cómo se deben crear varios archivos y cuál es el número máximo de estos archivos? Gracias
αғsнιη
> Necesito omitirlos de alguna manera, ya que no hay datos de referencia para seguir. ¿Qué quiere decir con esto? Sin datos de referencia, puede convertir, pero no dividir, ya que la información sobre dónde comienzan y finalizan las pistas está en la referencia.
emk2203
@ Afshin.Hamadi Sí, el nombre del archivo coincidiría con el título de la pista. El archivo .cue tiene información como artista, álbum, etc. Esta información debe copiarse en los nuevos archivos flac.
willem.hill
@ emk2203 Buen punto, actualicé la pregunta.
willem.hill
Te estás contradiciendo aún más. "Necesito convertir, pero no dividirlos, ya que no hay datos de referencia". - "Básicamente, quiero dividir todos los archivos .ape en múltiples archivos .flac, y copiar la información de la etiqueta desde el .cue ..." . ¿Así que qué es lo? Si es el estándar "Tengo archivos .ape y .cue, y quiero convertirlos y dividirlos en el lugar para etiquetarlos .flac", la pregunta podría haberse cerrado con dos buenas respuestas hace 24 horas.
emk2203

Respuestas:

6

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

Necesita tener ffmpeg(o avconv) shntoole cuetoolsinstalar.

Para convertir todos sus .apea .flacen su lugar:

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://www.etree.org/shnutils/shntool/ , este primer paso es innecesario. Pero lo que se necesita para compilar con g++y yasmusted mismo. Lo mismo ocurre con los .ttaarchivos, que también se usan a menudo en lugar de .ape.

Dividir y nombrar .flac archivos:

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 .flacarchivos divididos resultantes :

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

Elimine el resto CDImage.ape.cue, CDImage.flacy los CDImage.apearchivos a su gusto. Los nombres son únicos, por lo que un simple find . -name "CDImage*" -deletees suficiente, excepto si Mozart hizo una composición a partir de la CDImagecual no estoy al tanto.

Para shnsplitque funcione, se deben instalar todos los codificadores / decodificadores necesarios para que pueda leer y escribir archivos. Los módulos para APE (y para el formato TTA) tendrían que compilarse desde la fuente, los otros instalando el paquete (es decir, FLAC).

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


Comentario secundario para otros : si se ocupa de esta conversión, sus archivos de origen podrían ser de origen japonés, donde APE y TTA eran más populares que en otros lugares. Si los .cuearchivos se codificaron inicialmente con SHIFT-JIS y ahora se abrieron como UTF-8, el shnsplitpaso se interrumpirá . Necesita 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 hacer los pasos anteriores. No olvide deshacerse de los .cuxarchivos cuando haya terminado con:

find . -name "*.cux" -delete
emk2203
fuente
de shnsplit página de manual de listas imitan como un formato soportado por lo que puede saltar a la conversión de FLAC con ffmpeg y el uso -o flaccon shnsplit lugar. No espere encontrar un nombre de base y un ape estándar, ya que el códec / contenedor también se utilizan otros códecs sin pérdida, por lo que es mejor no codificar y sería mejor incluir todos los pasos en una ejecución del comando find. metaflac --add-replay-gainTambién sería una buena idea.
LiveWireBT
@ LiveWireBT: Técnicamente, tienes razón. Es por eso que dije "dos soluciones disponibles" en uno de mis comentarios. Sin embargo, debe descargar la fuente de los complementos para el soporte de ape y tta, instalar g ++ y yasm y compilarlos e instalarlos usted mismo. Fui con la solución ffmpeg ya que es más fácil.
emk2203
2
Para una versión de un solo 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
1
Si. Siempre correría una vez sin el interruptor de eliminar primero para asegurarme de que se ejecuta como se esperaba.
emk2203
1
Utilice las instrucciones ligeramente revisadas. Los probé, trabajan.
emk2203