Saltar al contenido

¿Cómo extraer los datos sin procesar de un archivo mp3 usando python?

No dejes de compartir nuestra página y códigos con otro, apóyanos para hacer crecer nuestra comunidad.

Solución:

Si entiendo su pregunta, puede intentar usar pydub (una biblioteca que escribí) para obtener los datos de audio de esta manera:

from pydub import AudioSegment

sound = AudioSegment.from_mp3("test.mp3")

# sound._data is a bytestring
raw_data = sound._data

Hay algunas preguntas similares flotando en stackoverflow. Hay distintos casos de uso.

  1. El usuario desea convertir archivos .mp3 a archivos PCM como archivos .wav.

  2. El usuario desea acceder a los datos sin procesar en el archivo .mp3 (es decir, no tratarlo como PCM comprimido). Aquí, el caso de uso es comprender cómo funcionan los esquemas de compresión como MP3 y AAC.

Esta respuesta está dirigida al segundo de estos, aunque no tengo un código de trabajo para compartir o señalar.

Los esquemas de compresión como MP3 generalmente funcionan en el dominio de la frecuencia. Como ejemplo simplificado, puede tomar un archivo .wav de 1024 muestras a la vez, transformar cada bloque de 1024 muestras usando una FFT y almacenarlo. En términos generales, la compresión con pérdida desecha información del dominio de la frecuencia para permitir codificaciones más pequeñas.

Una implementación de Python puro es muy poco práctica si todo lo que quiere hacer es convertir de .mp3 a .wav. Pero si desea explorar cómo funcionan .mp3 y esquemas relacionados, tener algo con lo que pueda jugar fácilmente, incluso si el código se ejecuta 1000 veces más lento que lo que usa ffmpeg, en realidad puede ser útil, especialmente si está escrito de una manera que permita el lector del código fuente para ver cómo funciona la compresión .mp3. Por ejemplo, consulte http://bugra.github.io/work/notes/2014-07-12/discre-fourier-cosine-transform-dft-dct-image-compression/ para obtener un libro de trabajo de IPython que explica cómo se transforma el dominio de frecuencia se utilizan en esquemas de compresión de imágenes como JPEG. Algo así para la compresión de MP3 y similares sería útil para las personas que están aprendiendo sobre compresión.

Un archivo .mp3 es básicamente una secuencia de fotogramas MP3, cada uno de los cuales tiene un encabezado y un componente de datos. Entonces, la primera tarea es escribir una clase (o clases) de Python para representarlas y leerlas desde un archivo .mp3. Primero lea el archivo en modo binario (es decir, f = open(filename,”rb”) y luego data = f.read() — en una máquina moderna, dado que una canción típica de 5 minutos en .mp3 ocupa aproximadamente 5 MB, también puede leer todo de una vez).

También puede valer la pena escribir un esquema de codificación más simple (y mucho menos eficiente) a lo largo de estas líneas para explorar cómo funciona, agregando gradualmente los esquemas de trucos como el uso de MP3 y AAC sobre la marcha. Por ejemplo, divida un archivo de entrada PCM en 1024 bloques de muestra, use una FFT o DCT o algo así, y viceversa, y vea cómo recupera sus datos originales. Luego, explore cómo puede desechar los datos de la versión transformada en frecuencia y vea qué efecto tiene cuando se transforman nuevamente en datos PCM. Entonces, el resultado final será muy pobre al principio, pero al ver los problemas y ver lo que hacen, por ejemplo, MP3 y AAC, puede aprender por qué estos esquemas de compresión hacen las cosas como lo hacen.

En resumen, si su caso de uso es “hacer cosas”, probablemente no quiera usar Python. Si, por otro lado, su caso de uso es ‘aprender cómo se hacen las cosas’, eso es diferente. (Como regla general, lo que podría hacer con un ensamblaje optimizado en un Pentium 100 de los años 90, puede hacerlo con aproximadamente el mismo rendimiento usando Python en un Core i5 moderno, algo así, hay un factor de 100 más o menos en rendimiento bruto y una ralentización similar al usar Python).

¿Has probado a abrir el archivo en modo binario de lectura?

f = open("test.mp3", "rb")
first16bytes = f.read(16)
etc...

Si te mola la invitación, tienes la libertad de dejar un post acerca de qué te ha gustado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *