es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mutagen: ¿Cómo puedo “correctamente” incrustar la carátula del álbum en un archivo mp3 para que pueda verla como icono de archivo?

Estoy tratando de convertir archivos flac a formato mp3, utilizando pydub para la conversión y mutagen para copiar etiquetas y portadas de álbum.

Convertir un archivo flac a mp3 a 320Kbps:

from pydub import AudioSegment

<p>path_flac  = 'mc_test/from/01 Lapislazuli.flac'
path_mp3   = 'mc_test/to/01 Lapislazuli.mp3'
flac_audio = AudioSegment.from_file(path_flac, format="flac")
flac_audio.export(path_mp3, format="mp3", bitrate='320K')
<code>
Cargar la imagen de portada del archivo flac y embeberla en el archivo mp3 ([seguir esta pregunta][3]):
</code>
from mutagen.flac import FLAC
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC</p>

<p>archivo = FLAC(path_flac)
portada = archivo.pictures[0].data</p>

<p>audio = MP3(path_mp3, ID3=ID3)<br>
audio.tags.add(
    APIC(
        encoding=3, # 3 para utf-8
        mime='image/png', # image/jpeg o image/png
        type=3, # 3 para la imagen de portada
        desc=u'Portada',
        data=portada
    )
)
audio.save()

He logrado embeber la portada del álbum en el archivo mp3, y la imagen se muestra en reproductores como foobar y MPC, pero no se muestra correctamente en el ícono del archivo. Si convierto el archivo a través de foobar, se muestra correctamente, pero no funciona con mutagen.

Ícono del archivo (vista previa de imagen) en diferentes situaciones

¿Alguien sabe cómo hacer que la portada del álbum se muestre correctamente como icono?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Python, mp3, flac, mutagen y albumart, puedo sugerir las siguientes soluciones para la pregunta:

    Para que la carátula del álbum se muestre correctamente como un icono, es posible que necesite ajustar el parámetro type en APIC() a 2 en lugar de 3. El type 2 es para el icono de archivo, mientras que el 3 es para mostrar la carátula del álbum en el reproductor. Puede probar el siguiente código:

    from mutagen.flac import FLAC
    from mutagen.mp3 import MP3
    from mutagen.id3 import ID3, APIC
    
    file = FLAC(path_flac)
    art = file.pictures[0].data
    
    audio = MP3(path_mp3, ID3=ID3)    
    audio.tags.add(
        APIC(
            encoding=3, # 3 es para utf-8
            mime='image/png', # image/jpeg o image/png
            type=2, # 2 es para el icono de archivo
            desc=u'Portada',
            data=art
        )
    )
    audio.save()
    

    Esto debería incrustar correctamente la carátula del álbum como el icono de archivo. Si aún no funciona, puede intentar convertir la imagen de la carátula del álbum a formato de archivo .ico, que es el formato estándar para los iconos de archivo en Windows. Puede usar la biblioteca Pillow para hacer esta conversión. Aquí hay un ejemplo de código:

    from mutagen.flac import FLAC
    from mutagen.mp3 import MP3
    from mutagen.id3 import ID3, APIC
    from PIL import Image
    
    file = FLAC(path_flac)
    art = file.pictures[0].data
    
    im = Image.frombytes('RGBA', (file.pictures[0].width, file.pictures[0].height), art)
    im.save('portada.ico')
    
    audio = MP3(path_mp3, ID3=ID3)    
    audio.tags.add(
        APIC(
            encoding=3, # 3 es para utf-8
            mime='image/png', # image/jpeg o image/png
            type=2, # 2 es para el icono de archivo
            desc=u'Portada',
            data=open('portada.ico', 'rb').read()
        )
    )
    audio.save()
    

    Este código convierte la imagen de la carátula del álbum a formato de archivo .ico y luego la incrusta en el archivo mp3 utilizando mutagen. Esto debería hacer que la carátula del álbum se muestre correctamente como el icono de archivo.

Comments are closed.