read - Biblioteca de Python para modificar audio MP3 sin transcodificación
reproduce audio python (5)
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 arroje resultados casi 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.
Podría construir una prueba usando un codificador y un decodificador para recodificar unos pocos 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 para usted. 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 formato de archivo MP3 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.
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.
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, dejar caer 10 segundos desde el tercer minuto) e insertar secciones (por ejemplo, agregar créditos hasta el final).
Tengo entendido que el formato mp3 es con pérdida, por lo que decodificarlo (por ejemplo) en formato PCM, hacer las modificaciones y luego codificarlo nuevamente en MP3 reducirá la calidad del audio. (Me encantaría saber que estoy equivocado).
Supongo que si me quedo en formato mp3, habrá algún tipo de fotograma o tamaño de paquete mínimo para tratar, por lo que la granularidad de las operaciones puede ser más grosera. Puedo vivir con eso, siempre y cuando obtenga una precisión de unos segundos.
Miré PyMedia , pero me exige 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 de MP3 Python? Alternativamente, ¿puede usted desconocer mi suposición de que ir a PCM y volver es malo y evitable?
Si quieres hacer cosas de bajo nivel, usa pymad . Convierte MP3 en un buffer de datos de muestra.
Si quieres algo un poco más alto, utiliza la API de Echo Nest Remix (divulgación: escribí una parte para mi dayjob). Incluye algunos ejemplos. Si observa el ejemplo del cencerro (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.
No es una respuesta directa a sus necesidades, pero consulte el software mp3DirectCut que hace lo que desea (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.
En cuanto a eliminar o extraer segmentos de mp3 de un archivo mp3 mientras permaneces 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 empalmar archivos MP3 juntos (agregar, por ejemplo, ''Créditos'' al final o al comienzo de un archivo mp3), he encontrado que puedes concatenar los archivos MP3 siempre que los archivos tengan la misma frecuencia de muestreo (por ejemplo, 44.1khz) y el mismo número de canales (por ejemplo, ambos son estéreo o ambos son mono).
Obtuve tres respuestas de calidad, y les agradezco a todos (y los elevé a todos) por ellos. 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?
Es poco probable que la transcodificación a PCM y de nuevo a MP3 resulte en una caída en la calidad.
No optimice la calidad de audio prematuramente; pruébalo con un prototipo simple y escúchalo.
Trabajando en MP3
Wikipedia tiene un resumen del formato de archivo MP3 .
Los cuadros 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
La API de Echo Nest Remix (Mac o Linux, por el momento) es una API para un servicio web que admite operaciones bastante sofisticadas (por ejemplo, encontrar las ubicaciones de ritmos y tempo de música, 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.