Biblioteca de Python para modificar el audio MP3 sin transcodificación -- python campo con mp3 campo con codec camp Relacionados El problema

Python library to modify MP3 audio without transcoding


18
vote

problema

Español

Estoy buscando algunos consejos generales sobre el formato MP3 antes de comenzar un pequeño proyecto para asegurarme de que no estoy en una persecución de ganso salvaje.

Mi comprensión de los internos del formato MP3 es mínimo. Idealmente, estoy buscando una biblioteca que abstraía esos detalles. Preferiría usar Python (pero podría estar convencido de otra manera).

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

Mi comprensión es que el formato MP3 es con pérdida y, por lo tanto, decodificarlo a (por ejemplo) Formato de PCM, hacer las modificaciones y luego la codificándola nuevamente a MP3 reducirá la calidad de audio. (Me encantaría escuchar que estoy equivocado.)

i conjeture que si me quedo en formato MP3, habrá algún tipo de marco mínimo o tamaño de paquete para tratar, por lo que la granularidad de las operaciones puede ser más gruesa. Puedo vivir con eso, siempre y cuando recibo una precisión de un par de segundos.

He mirado a Pymedia , pero me obliga a migrar a PCM para procesar los datos. De manera similar, coja quiere ayudarme a codificar, pero no acceder a los datos en su lugar. He visto varias otras bibliotecas que solo tratan con las etiquetas ID3.

¿Alguien puede recomendar una biblioteca MP3 de Python? Alternativamente, ¿puedes disuadirme de mi suposición de que ir a PCM y la espalda es malo y evitable?

Original en ingles

I am looking for some general advice about the mp3 format before I start a small project to make sure I am not on a wild-goose chase.

My understanding of the internals of the mp3 format is minimal. Ideally, I am looking for a library that would abstract those details away. I would prefer to use Python (but could be convinced otherwise).

I would like to modify a set of mp3 files in a fairly simple way. I am not so much interested in the ID3 tags but in the audio itself. I want to be able to delete sections (e.g. drop 10 seconds from the 3rd minute), and insert sections (e.g. add credits to the end.)

My understanding is that the mp3 format is lossy, and so decoding it to (for example) PCM format, making the modifications, and then encoding it again to MP3 will lower the audio quality. (I would love to hear that I am wrong.)

I conjecture that if I stay in mp3 format, there will be some sort of minimum frame or packet-size to deal with, so the granularity of the operations may be coarser. I can live with that, as long as I get an accuracy of within a couple of seconds.

I have looked at PyMedia, but it requires me to migrate to PCM to process the data. Similarly, LAME wants to help me encode, but not access the data in place. I have seen several other libraries that only deal with the ID3 tags.

Can anyone recommend a Python MP3 library? Alternatively, can you disabuse me of my assumption that going to PCM and back is bad and avoidable?

        

Lista de respuestas

7
 
vote

Si desea hacer las cosas de bajo nivel, use PYMAD . Convierte MP3 en un búfer de datos de muestra.

Si desea algo un poco más alto, use el Echo Nest remix api (Divulgación: Escribí parte de él para mi Dayjob). Incluye algunos ejemplos. Si mira el Cowbell < / a> Ejemplo (es decir, Morecewbell.dj ), verá un tenedor de Pymad que le da una matriz NUESTPY en lugar de un búfer. Ese tipo de datos hace que sea más fácil cortarse las secciones y hacer matemáticas en ellos.

 

If you want to do things low-level, use pymad. It turns MP3s into a buffer of sample data.

If you want something a little higher-level, use the Echo Nest Remix API (disclosure: I wrote part of it for my dayjob). It includes a few examples. If you look at the cowbell example (i.e., MoreCowbell.dj), you'll see a fork of pymad that gives you a NumPy array instead of a buffer. That datatype makes it easier to slice out sections and do math on them.

 
 
6
 
vote
vote
La mejor respuesta
 

Tengo tres respuestas de calidad, y les agradezco a todos (y te emocioné a todos) para ellos. No he elegido ninguna como la respuesta aceptada, porque cada una dirige un aspecto, así que quería escribir un resumen.

¿Necesita trabajar en MP3?

    Es poco probable que
  • transcodificación a PCM y vuelva a MP3 resulte en una caída de calidad.

  • No optimice la calidad de audio prematuramente; Probarlo con un simple prototipo y escucharlo.

trabajando en MP3

  • Wikipedia tiene un resumen de la Formato de archivo MP3 .

  • Los marcos MP3 son cortos (652 muestras, o solo unos pocos milisegundos) que permiten una precisión moderada a ese nivel.

  • Sin embargo, wikipedia advierte que "los marcos no son artículos independientes (" byte El depósito ") y, por lo tanto, no se puede extraer en los límites de marco arbitrarios".

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

trabajando en PCM

Hay varias bibliotecas en este nivel:

  • coja (última versión: octubre de 2017)
  • Pymedia (última versión: febrero de 2006)
  • pymad (solamente linux? ¡Decodificador solamente? última versión: enero de 2007)

trabajando a un nivel superior

  • Echo Nest Remix Api (Mac o Linux solo, en este momento) es una API a un servicio web que admite operaciones bastante sofisticadas (por ejemplo, encontrar las ubicaciones de los latidos de la música y el tempo, etc.)

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

Mi plan es ahora para comenzar en Pymedia, usando PCM. Gracias a todos por su ayuda.

 

I got three quality answers, and I thank you all (and upvoted you all) for them. I haven't chosen any as the accepted answer, because each addressed one aspect, so I wanted to write a summary.

Do you need to work in MP3?

  • Transcoding to PCM and back to MP3 is unlikely to result in a drop in quality.

  • Don't optimise audio-quality prematurely; test it with a simple prototype and listen to it.

Working in MP3

  • Wikipedia has a summary of the MP3 File Format.

  • MP3 frames are short (1152 samples, or just a few milliseconds) allowing for moderate precision at that level.

  • However, Wikipedia warns that "Frames are not independent items ("byte reservoir") and therefore cannot be extracted on arbitrary frame boundaries."

  • Existing libraries are unlikely to be of assistance, if I really want to avoid decoding.

Working in PCM

There are several libraries at this level:

  • LAME (latest release: October 2017)
  • PyMedia (latest release: February 2006)
  • PyMad (Linux only? Decoder only? Latest release: January 2007)

Working at a higher level

  • Echo Nest Remix API (Mac or Linux only, at the moment) is an API to a web-service that supports quite sophisticated operations (e.g. finding the locations of music beats and tempo, etc.)

  • mp3DirectCut (Windows only) is a GUI that apparently performs the operations I want, but as an app. It is not open-source. (I tried to run it, got an Access Denied installer error, and didn't follow up. A GUI isn't suitably for me, as I want to repeatedly run these operations on a changing library of files.)

My plan is now to start out in PyMedia, using PCM. Thank you all for your assistance.

 
 
     
     
3
 
vote

MP3 es con pérdida, pero es perjudicial de una manera muy específica. Los algoritmos utilizados según lo diseñado para descartar ciertas partes del audio que sus oídos no pueden escuchar (o son muy difíciles de escuchar). Re-realizar el proceso de compresión en el mismo nivel de compresión en exceso y, es probable que lo ceda casi resultados idénticos para una pieza de audio determinada. Sin embargo, algunas pérdidas adicionales pueden acumularse lentamente. Si va a estar modificando mucho archivos, esta podría ser una mala idea. También sería una mala idea si le preocupara la calidad, pero luego usar MP3 si está preocupado por la calidad es una mala idea sobre todos.

Podría construir una prueba con 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 averiguar si es aceptable para usted. . Parece que tiene bibliotecas que puede usar para ejecutar esta simple prueba ya.

Los archivos MP3 están compuestos de "Marcos" de audio y, por lo que, debe ser posible, con algún esfuerzo, para eliminar los marcos completos con un procesamiento mínimo (elimine el marco, actualice algunos detalles menores en el encabezado de archivos). Creo que los marcos son bastante cortos (unos pocos milisegundos cada uno), lo que le daría la precisión que está buscando. Así que haciendo algunas lecturas en la Formato de archivo MP3 debería darle suficiente información para el código Tu propia biblioteca de Python para hacer esto. Este es un poco diferente diferente al "procesamiento de audio" tradicional (ya que no le importa la precisión) y, por lo que es poco probable que encuentre una biblioteca existente que haga esto. La mayoría, como ha encontrado, descomprimirá primero el audio para que pueda tener un control completo de grano fino.

 

Mp3 is lossy, but it is lossy in a very specific way. The algorithms used as designed to discard certain parts of the audio which your ears are unable to hear (or are very difficult to hear). Re-doing the compression process at the same level of compression over and over is likely to yield nearly identical results for a given piece of audio. However, some additional losses may slowly accumulate. If you're going to be modifying files a lot, this might be a bad idea. It would also be a bad idea if you were concerned about quality, but then using MP3 if you are concerned about quality is a bad idea over all.

You could construct a test using an encoder and a decoder to re-encode a few different mp3 files a few times and watch how they change, this could help you determine the rate of deterioration and figure out if it is acceptable to you. Sounds like you have libraries you could use to run this simple test already.

MP3 files are composed of "frames" of audio and so it should be possible, with some effort, to remove entire frames with minimal processing (remove the frame, update some minor details in the file header). I believe frames are pretty short (a few milliseconds each) which would give the precision you're looking for. So doing some reading on the MP3 File Format should give you enough information to code your own python library to do this. This is a fair bit different than traditional "audio processing" (since you don't care about precision) and so you're unlikely to find an existing library that does this. Most, as you've found, will decompress the audio first so you can have complete fine-grained control.

 
 
   
   
1
 
vote

No es una respuesta directa a sus necesidades, pero consulte la mp3directcut software que hace Lo que quieres (como una aplicación GUI). Creo que el código fuente está disponible, por lo que incluso si no encuentra una biblioteca, podría construir uno de los suyos, o construir una extensión de Python usando código de MP3Directcut.

 

Not a direct answer to your needs, but check the mp3DirectCut software that does what you want (as a GUI app). I think that the source code is available, so even if you don't find a library, you could build one of your own, or build a python extension using code from mp3DirectCut.

 
 
1
 
vote

En cuanto a la eliminación o la extracción de segmentos de MP3 desde un archivo MP3 mientras se mantiene en el dominio MP3 (es decir, sin la conversión al formato PCM y la parte posterior), también está el paquete de código abierto PYMP3CUT .

En cuanto a los archivos MP3 de empalme (agregar, por ejemplo, 'créditos' al final o el inicio de un archivo MP3) He encontrado que puede simplemente concatenar los archivos MP3 que proporcionan que los archivos tienen la misma velocidad de muestreo (por ejemplo, 44.1KHz) y la misma cantidad de canales (por ejemplo, ambos son estéreo o ambos son mono).

 

As for removing or extracting mp3 segments from an mp3 file while staying in the MP3 domain (that is, without conversion to PCM format and back), there is also the open source package PyMp3Cut.

As for splicing MP3 files together (adding e.g. 'Credits' to the end or beginning of an mp3 file) I've found you can simply concatenate the MP3 files providing that the files have the same sampling rate (e.g. 44.1khz) and the same number of channels (e.g. both are stereo or both are mono).

 
 
 
 

Relacionados problema

0  Escribir archivos de QuickTime Manualmente  ( Writing quicktime files manually ) 
En la aplicación en la que estoy trabajando, hay una clase de Avirecord que escribe manualmente los encabezados AVI y los marcos JPEG en archivos de video. So...

0  ¿Por qué esta propiedad devuelve indefinida?  ( Why does this property return undefined ) 
Estoy trabajando en un códec AMR en JavaScript y parece que no puedo obtener una referencia de archivo que debe ser reconocida por el módulo de decodificador....

1  A2DP Streaming de Android utilizando el códec AAC / MP3  ( A2dp streaming from android using aac mp3 codec ) 
Como sabemos que la codificación predeterminada utilizada para la transmisión de audio en A2DP es SBC, pero la calidad del sonido no es buena. El perfil A2DP ...

2  Si tuvo que agregar soporte para un formato de archivo de video y códec, ¿cuál elegiría?  ( If you had to add support for one video file format and codec which would you c ) 
Estoy buscando agregar soporte para leer y escribir archivos de video en mi aplicación. Si tuvo que elegir exactamente un formato de archivo y una combinación...

1  ¿Por qué IGRAPHBBUILDER :: RenderingFile no encuentra decodificador de video FFDShoW?  ( Why does igraphbuilderrenderfile not find ffdshow video decoder ) 
Cuando instalo K-Lite Codec Pack (5.90 Basic) como administrador, ejecute una aplicación que llama a IGRAPHBBUILDER :: RenderFile como usuario estándar, el gr...

0  La codificación FFMPEG falla con codec, pero funciona sin  ( Ffmpeg encoding fails with codec but works without ) 
He realizado una instalación con ffmpeginstaller .. This is the version installed: ffmpeg version N-54523-ga71832f-syslint built on Jul 7 2013 12:16:34 w...

25  ¿Qué es un buen códec de video sin pérdida?  ( What is a good lossless video codec ) 
A menudo tengo que escribir especificaciones para la conversión de video para algunas de las casas de producción de video con las que trabajan los clientes de...

2  ¿Cómo hacer decodificación de hardware de video en Android?  ( How to do hardware decoding of video on android ) 
¿Cómo se desconecta el hardware de Tablet PC Android HD video? La CPU es el brazo. La decodificación de hardware en el sistema debe estar con Mali Módulo para...

5  ¿Audiordecord Android y Opciones de códec de Audiotrack?  ( Android audiorecord and audiotrack codec options ) 
Actualmente uso las clases de Audiotrack y AudiorCord en Android. ¡Utilizo los datos puros PCM, pero me preguntaba cuáles son mis opciones para otros códecs...

2  Los navegadores no reproducen mi archivo MP4 (H.264) con <video> etiqueta  ( Browsers does not plays my mp4 h 264 file with video tag ) 
Me incrusté mi propio archivo MP4 (H.264) en el archivo HTML5 usando & lt; video & gt; etiqueta. Pero los navegadores no reproducen el video. Los navega...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos