0

我有一组很多歌曲,其中一些png在元数据中有图像,我需要将它们转换为jpg.

我知道如何将png图像转换为jpg一般的图像,但我目前正在使用eyed3返回ImageFrame对象的元数据访问元数据,但我不知道如何操作这些。例如,我可以使用

print(img.mime_type)

返回

image/png

但我不知道如何从这里取得进展。我非常天真地尝试使用 OpenCV 加载图像,但它不是兼容的格式,或者我没有正确执行。无论如何,我也不知道如何用新图像更新旧图像!

注意:虽然我目前正在使用eyed3,但如果我能以任何其他方式解决这个问题,那就太好了。

4

1 回答 1

0

我终于能够解决这个问题,虽然不是很优雅。

第一步是加载图像。由于某种原因,我无法使用eyed3,但TinyTag可以完成这项工作:

from PIL import Image
from tinytag import TinyTag        

tag = TinyTag.get(mp3_path, image=True)
image_data = tag.get_image()
img_bites = io.BytesIO(image_data)
photo = Image.open(im)

然后我操纵它。例如,我们可以调整它的大小并将其另存为jpg. 因为我们在这些操作中使用了Pillow( PIL),所以我们实际上需要保存图像,最后将其加载回来以获取二进制数据(这个细节可能是这个过程中应该改进的地方)。

photo = photo.resize((500, 500))  # suppose we want 500 x 500 pixels
rgb_photo = photo.convert("RGB")
rgb_photo.save(temp_file_path, format="JPEG")

因此,最后一步是加载图像并将其设置为元数据。您在此答案中有有关此步骤的更多详细信息。:

audio_file = eyed3.load(mp3_path)  # this has been loaded before
audio_file.tag.images.set(
        3, open(temp_file_path, "rb").read(), "image/jpeg"
    )
audio_file.tag.save()
于 2021-02-18T08:40:23.377 回答