gpt4 book ai didi

python - 从远程 mp3 中提取封面艺术

转载 作者:行者123 更新时间:2023-12-01 03:22:55 27 4
gpt4 key购买 nike

我需要从远程 mp3 文件中提取封面艺术并将其保存到文件中,而不下载整个 mp3。但我没有成功。我尝试下载文件的前 100 个字节,例如:

import urllib2
from mutagen.mp3 import MP3

req = urllib2.Request('http://www.stephaniequinn.com/Music/Commercial%20DEMO%20-%2001.mp3')
req.headers['Range'] = 'bytes=%s-%s' % (0, 100)
response = urllib2.urlopen(req)
headers = response.info()
print headers.type
print headers.maintype

data = response.read()
print len(data)

我读到 id 3 标签位于 mp3 的最后 128 字节。现在我需要一些帮助来仅下载包含 apic 封面艺术的最后字节并提取图像。

谢谢你帮助我

最佳答案

隐藏艺术位于文件开头的 id3v2 标记中。

这里有一个 hacky 解决方案:读取直到整个文件被读取或者诱变剂不会出错。如果 mp3 不是 mp3,这将读取整个文件。理想情况下,您应该向它传递一个可查找的类似文件,它可以进行缓冲,也许有一个库可以实现这一点。

# Python 2 or 3
try:
import urllib2 as request
except ImportError:
from urllib import request
from io import BytesIO
from mutagen import MutagenError
from mutagen.mp3 import MP3


def get_mp3(url):
"""
Args:
url (str)
Returns:
mutagen.mp3.MP3
Raises:
mutagen.MutagenError
EnvironmentError
"""

r = request.urlopen(url)
try:
size = 128
filelike = BytesIO()
while 1:
data = r.read(size)
size *= 2
filelike.seek(0, 2)
filelike.write(data)
filelike.seek(0)
try:
return MP3(filelike)
except MutagenError:
if not data:
raise
pass
finally:
r.close()

try:
f = get_mp3("http://web.ist.utl.pt/antonio.afonso/www.aadsm.net/libraries/id3/music/Bruno_Walter_-_01_-_Beethoven_Symphony_No_1_Menuetto.mp3")
except (MutagenError, EnvironmentError):
pass
else:
if f.tags:
for frame in f.tags.getall("APIC"):
print(frame.pprint())

关于python - 从远程 mp3 中提取封面艺术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com