8 votos

Cómo identificar el códec (AAC vs ALAC) utilizado en un archivo m4a

Dado que el formato m4a no es más que un contenedor, y puede contener música codificada con un códec con pérdidas (AAC) o sin pérdidas (ALAC), ¿hay alguna forma sencilla de determinar qué códec se ha utilizado para un archivo determinado?

10voto

Mapad Puntos 3033

Cuando uso el file en un archivo .m4a, me devuelve una respuesta genérica de "ISO Media, Apple iTunes ALAC/AAC-LC (.M4A) Audio" tanto para archivos AAC como ALAC. Se me ocurren otros dos enfoques que no requieren ni la pesada mano de iTunes ni la instalación de un nuevo software:

  1. Abra el archivo de audio en cuestión con QuickTime Player. Selecciona "Mostrar inspector de películas" en el menú 'Ventana' (o pulsa -i) para ver el tamaño del archivo, la velocidad de datos y el códec utilizado en su creación.

  2. Utilice el afinfo (información del archivo de audio) en Terminal.app para obtener más información de la que proporciona QuickTime Player. Aquí hay una muestra de la salida:

    $ afinfo /Users/admin/Desktop/01\ The\ Guns\ of\ August\ 1.m4a
    
    Num Tracks: 1 Data format: 2 ch,  44100 Hz, 'alac' (0x00000001) from
    16-bit source
    
    4096 frames/packet
    
    Channel layout: Stereo (L R)
    
    estimated duration: 18702.930431 sec audio bytes: 1006059541
    
    audio packets: 201367 bit rate: 430332 bits per second
    
    packet size upper bound: 12334 maximum packet size: 12334
    
    audio data file offset: 48
    
    optimized audio
    
    824799232 valid frames + 0 priming + 0 remainder = 824799232

Para cualquier lector que no esté familiarizado con el uso de la terminal, es bastante sencillo y no romperá nada. Abre el Terminal, y escribe -o corta y pega desde abajo- la palabra afinfo seguida de un solo espacio:

afinfo 

A continuación, arrastra un archivo de audio a la ventana del Terminal y suéltalo. Verás que la ruta del archivo se añade al comando afinfo. Si al arrastrar el icono el Finder se convierte en el proceso activo, tendrás que hacer clic en la ventana de la Terminal para despertarla antes del paso final de pulsar intro para ejecutar el comando. Si quieres, puedes obtener información sobre más de un archivo a la vez arrastrando y soltando varios iconos en lugar de uno solo. Cuando hayas terminado, simplemente sal de Terminal.app como lo harías con cualquier otro programa.

0voto

Erk Puntos 11

Quería hacer esto para identificar qué archivos m4a de una carpeta eran ALAC y cuáles eran AAC. Esto se hace fácilmente a una carpeta entera como esta:

afinfo ./*.m4a |grep -B 4 alac

que da un resultado como:

File:           Track 09.m4a
File type ID:   m4af
Num Tracks:     1
----
Data format:     2 ch,  44100 Hz, 'alac' (0x00000001) from 16-bit source, 4096 frames/packet

Para obtener sólo los nombres de los archivos, he utilizado esto:

afinfo ./*.m4a |grep -B 4 alac |grep File: |sed 's/.*\///'

lo que resulta en:

Track 09.m4a

0 votos

Un montón de engrudo y de tuberías. No lo haría grep -l alac /path/to/file ¿trabaja para usted?

1 votos

@fd0: Eso no funcionaría, pero creo que esto funcionaría mejor ya que sólo saldrán los archivos que sean alac: for file in *.m4a; do if afinfo "$file" | grep -q \'alac\'; then echo "$file"; fi; done

1 votos

@jjj - Sí, tu solución funciona. Podrías añadir el -b opción de afinfo para limitar la salida de texto- afinfo -b FILE | ....

0voto

swesdo Puntos 1

Terminé buscando este tipo de preguntas ya que necesitaba mirar el nivel superior de mi disco duro de música para identificar cuáles eran alac para poder convertirlos a m4a(aac) comprimido para mejorar las capacidades de las plataformas.

Escribí una función que busca recursivamente en la carpeta actual ( es decir, si necesita ir más allá del directorio de trabajo en el que lo ejecutó )

si necesita cambiar la profundidad, el -maxdepth puede añadirse a la opción find comando en $m4a_files así como especificar rutas para no buscar, como he hecho con ! -path "*.app*" .

Utilicé echo para imprimir el comando en una variable y ejecutarlo mediante eval porque tuve problemas aquí y en el pasado con otras herramientas de línea de comandos ( como qpdf ) iterando la salida de find en otra herramienta a través de un bucle for.

allu () {

    # alac lookup

    echo
    echo "looking up m4a files"
    echo

    # bypasses paths with .app in their name so if you run it on some place like ~/Downloads
    # and you have an app downloaded there it won't look in it

    m4a_files=$( echo $( find . -name "*.m4a" ! -path "*.app*" | sed "s|.*|\"&\"|" ) );

    # syntax afinfo $m4a_files |grep -B 4 m4a |grep File: |sed 's/.*\///'

    echo 'checking for alac'
    echo

    # looks alac files up 
    file_lookup_merger=$( echo "afinfo" $m4a_files "|grep -B 4 alac |grep File: |sed 's/.m4a*\///'" ) ;

    # uses eval to return the list of files it found *with srnd. quotes*
    eval $file_lookup_merger |sed 's/File:           //'| sed "s|.*|\"&\"|";

}

Edición: Un día después de escribir lo anterior, quise escribir una versión más simple y compatible que funcionara tanto en Mac como en Linux, así que escribí una usando Exiftool de Phillip Harvey. https://exiftool.org/ ( instalación homebrew ) https://formulae.brew.sh/formula/exiftool#default

# finds alac files

( find . -name *.m4a -exec exiftool -T -audioformat -filepath {} \; )|grep alac

# prints list of alac files for use as a string separated by spaces

echo $( ( find . -name *.m4a -exec exiftool -T -audioformat -filepath {} \; )|grep alac |sed 's.alac..g'|sed "s|.*|\"&\"|")|sed 's." /."/.g'

-1voto

Paul Puntos 5080

Si vas a iTunes > View > View Options > Show Columns > Kind incluirá una columna que indica si el archivo es Apple Lossless o AAC

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X