2008-11-22 16 views
16

Estoy buscando algunos consejos generales sobre el formato mp3 antes de comenzar un pequeño proyecto para asegurarme de que no estoy en una loca búsqueda.Biblioteca de Python para modificar el audio MP3 sin transcodificar

Mi comprensión de las partes internas del formato mp3 es mínima. Idealmente, estoy buscando una biblioteca que abstraiga esos detalles. Preferiría usar Python (pero podría convencerse de lo contrario).

Me gustaría modificar un conjunto de archivos mp3 de una manera bastante simple. No estoy tan interesado en las etiquetas ID3, sino en el audio en sí. Quiero poder eliminar secciones (por ejemplo, soltar 10 segundos desde el tercer minuto) e insertar secciones (por ejemplo, agregar créditos al final).

Tengo entendido que el formato mp3 es con pérdida, por lo que lo decodifico (por ejemplo) el formato PCM, hacer las modificaciones y luego codificarlo de nuevo en MP3, reducirá la calidad del audio. (Me encanta escuchar que estoy equivocado.)

I conjetura que si me quedo en formato mp3, habrá algún tipo de marco mínimo o paquetes de tamaño para hacer frente, por lo que la granularidad de las operaciones puede ser más grosero Puedo vivir con eso, siempre y cuando obtenga una precisión de unos segundos.

He mirado PyMedia, pero me requiere migrar a PCM para procesar los datos. Del mismo modo, LAME quiere ayudarme a codificar, pero no acceder a los datos en su lugar. He visto muchas otras bibliotecas que solo tratan con las etiquetas ID3.

¿Alguien puede recomendar una biblioteca MP3 de Python? Alternativamente, ¿puede usted desconocer mi suposición de que ir a PCM y volver es malo y evitable?

Respuesta

6

Recibí tres respuestas de calidad, y les agradezco a todos (y les he votado a todos) por ellas. No he elegido ninguna como la respuesta aceptada, porque cada uno abordó un aspecto, así que quería escribir un resumen.

¿Necesitas trabajar en MP3?

  • transcodificación a PCM y volver a MP3 es poco probable que resulte en una pérdida de calidad.

  • No optimice la calidad de audio prematuramente; pruébalo con un prototipo simple y escúchalo.

Trabajando en MP3

  • Wikipedia tiene un resumen de la MP3 File Format.

  • Los marcos de MP3 son cortos (1152 muestras, o solo unos pocos milisegundos) lo que permite una precisión moderada en ese nivel.

  • Sin embargo, Wikipedia advierte que "Los marcos no son elementos independientes (" depósito de bytes ") y, por lo tanto, no se pueden extraer en límites de marcos arbitrarios."

  • Es poco probable que las bibliotecas existentes sean de ayuda, si realmente quiero evitar la decodificación.

Trabajando en PCM

Hay varias bibliotecas en este nivel:

Trabajando en un nivel superior

  • Echo Nest Remix API (Mac o Linux solamente, por el momento) es una API para un servicio web que soporta operaciones muy sofisticadas (por ejemplo, encontrar las ubicaciones de los ritmos musicales y el tempo, etc.)

  • mp3DirectCut (solo Windows) es una GUI que aparentemente realiza las operaciones que quiero, pero como una aplicación. No es de código abierto. (Intenté ejecutarlo, obtuve un error de instalador de acceso denegado y no hice el seguimiento. Una GUI no es adecuada para mí, ya que quiero ejecutar estas operaciones repetidamente en una biblioteca de archivos cambiante)

Mi plan ahora es comenzar en PyMedia, usando PCM. Gracias a todos por su asistencia.

+1

La afirmación "Transcodificar a PCM y volver a MP3 es poco probable que dé como resultado una caída en la calidad" es falsa. La disminución en la calidad puede ser aceptable para usted, pero siempre hay pérdida. – jrwren

+0

@jrwren: Consulte [la respuesta de origen] (http://stackoverflow.com/a/310792/8014) para obtener el origen de esto. – Oddthinking

+0

El enlace a [Echo Nest Remix] (http://code.google.com/p/echo-nest-remix/) no funciona (¿más?) – 576i

3

Mp3 es con pérdida, pero es con pérdida de una manera muy específica. Los algoritmos utilizados están diseñados para descartar ciertas partes del audio que sus oídos no pueden oír (o son muy difíciles de escuchar). Volver a realizar el proceso de compresión en el mismo nivel de compresión una y otra vez es probable que produzca casi resultados idénticos para una determinada pieza de audio. Sin embargo, algunas pérdidas adicionales pueden acumularse lentamente. Si vas a modificar mucho los archivos, esta podría ser una mala idea. También sería una mala idea si te preocupa la calidad, pero usar MP3 si te preocupa la calidad es una mala idea.

Puede construir una prueba usando un codificador y un decodificador para volver a codificar algunos archivos mp3 diferentes varias veces y observar cómo cambian, esto podría ayudarlo a determinar la tasa de deterioro y determinar si es aceptable tú. Parece que tienes bibliotecas que podrías usar para ejecutar esta prueba simple.

Los archivos MP3 se componen de "marcos" de audio, por lo que debería ser posible, con cierto esfuerzo, eliminar cuadros enteros con un procesamiento mínimo (eliminar el marco, actualizar algunos detalles menores en el encabezado del archivo). Creo que los marcos son bastante cortos (unos pocos milisegundos cada uno) que le darían la precisión que está buscando. Así que leer un poco en el MP3 File Format debería darle suficiente información para codificar su propia biblioteca de Python para hacer esto. Esto es un poco diferente al "procesamiento de audio" tradicional (ya que no le importa la precisión) y por lo tanto es poco probable que encuentre una biblioteca existente que haga esto. La mayoría, como has encontrado, descomprimirá el audio primero para que puedas tener un control completo y preciso.

+0

Creo que los marcos de MP3 son ¹/₇₅ segundos, al igual que los CD. Podría estar equivocado sobre la duración, pero si lo estoy, no estoy muy lejos. – tzot

+1

Mi comentario anterior era correcto si el muestreo es 44100 Hz. En general, cada cuadro MPEG 1 Layer III tiene 1152 muestras de longitud. – tzot

1

No es una respuesta directa a sus necesidades, pero consulte el software mp3DirectCut que hace lo que quiere (como una aplicación GUI). Creo que el código fuente está disponible, por lo que incluso si no encuentra una biblioteca, puede crear una propia o construir una extensión de Python usando el código de mp3DirectCut.

7

Si quiere hacer cosas de bajo nivel, use pymad. Convierte MP3 en un buffer de datos de muestra.

Si quiere algo un poco más alto, use el Echo Nest Remix API (revelación: escribí parte de él para mi dayjob). Incluye algunos ejemplos. Si observa el ejemplo cowbell (es decir, MoreCowbell.dj), verá una bifurcación de pymad que le proporciona una matriz NumPy en lugar de un búfer. Ese tipo de datos hace que sea más fácil cortar secciones y hacer cálculos matemáticos sobre ellas.

1

En cuanto a la eliminación o extracción de segmentos de mp3 de un archivo mp3 mientras permanece en el dominio MP3 (es decir, sin conversión al formato PCM y viceversa), también está el paquete de código abierto PyMp3Cut.

En cuanto a empalmes de archivos MP3 (agregando, por ejemplo, 'Créditos' al final o al comienzo de un archivo mp3) He encontrado que puede concatenar los archivos MP3 siempre que los archivos tengan la misma frecuencia de muestreo (ej. 44.1khz) y el mismo número de canales (por ejemplo, ambos son estéreo o ambos son mono).

+0

Tenga en cuenta que PyMp3Cut no funciona con archivos mp3 VBR (velocidad de bits variable). – 576i

Cuestiones relacionadas