在网站上查找音频文件的比特率,而无需下载文件

穆尼卜K

我想在不下载文件的情况下在网站上找到mp3的比特率。使用Python3和Mutagen移植版本

代码

from mutagen.id3 import ID3
audio = ID3("http://songs.djmazadownload.com/music/indian_movies/Creature%20(2014)/01%20-%20Creature%20-%20Sawan%20Aaya%20Hai%20%5BDJMaza.Info%5D.mp3")
print (audio.info.length, audio.info.bitrate)

错误

Traceback (most recent call last):
  File "C:\Python_Mass_downloader\New folder\download.py", line 20, in <module>
    audio = ID3("http://songs.djmazadownload.com/music/indian_movies/Creature%20(2014)/01%20-%20Creature%20-%20Sawan%20Aaya%20Hai%20%5BDJMaza.Info%5D.mp3")
  File "C:\Python34\lib\site-packages\mutagen\id3.py", line 76, in __init__
    super(ID3, self).__init__(*args, **kwargs)
  File "C:\Python34\lib\site-packages\mutagen\_util.py", line 41, in __init__
    super(DictProxy, self).__init__(*args, **kwargs)
  File "C:\Python34\lib\site-packages\mutagen\__init__.py", line 46, in __init__
    self.load(*args, **kwargs)
  File "C:\Python34\lib\site-packages\mutagen\id3.py", line 122, in load
    self._fileobj = open(filename, 'rb')
OSError: [Errno 22] Invalid argument: 'http://songs.djmazadownload.com/music/indian_movies/Creature%20(2014)/01%20-%20Creature%20-%20Sawan%20Aaya%20Hai%20%5BDJMaza.Info%5D.mp3'

样本输入

http://songs.djmazadownload.com/music/indian_movies/Creature%20%282014%29/01%20-%20Creature%20-%20Sawan%20Aaya%20Hai%20%5BDJMaza.Info%5D.mp3

也欢迎任何其他方式:)谢谢

阿巴内特

第一的:

我不想下载文件。我只需要从服务器检查。我也想查找图像的(jpg,png等)信息,例如size,pixel。有可能吗?

不,不可能。获取该信息的唯一方法是解析文件数据,除非下载文件数据,否则无法解析文件数据。

当然,如果服务器以其他方式(例如通过REST或RPC API或您可以抓取的网页)提供了该信息,则可以下载该信息……但是,在这种情况下,您并不是自己解析文件的,而且您不需要Mutagen。(如果控制服务器,则始终可以添加一个Web应用程序,该应用程序在服务器端进行解析并以所需的任何格式提供信息。)


如果您只是担心将文件保存到磁盘:无论是从stdlib还是从第三方模块,Python中大多数需要文件名的函数都不能使用网络URL。这与其他一些语言不同,后者使用无处不在的URL,并在可能的情况下(通过将文件逐块下载到内存中)尝试以相同的方式对待http和文件URL。

但是,大多数需要文件对象的函数都可以采用urlrequest或类似的对象,如果不能,通常可以采用BytesIO因此,您无需将其下载到磁盘上的文件中:

import urllib.request

r = urllib.request.open(url)
spam(r)

问题是,我不认为Mutagen的“简单API”函数ID3可以接受文件对象,而只能接受文件名。因此,您将不得不使用其他库,使用较低级的功能*,或下载到临时文件。

但是即使最后一个也不是那么糟糕:

import tempfile
import urllib.request

r = urllib.request.open(url)
with tempfile.NamedTemporaryFile(mode='wb', delete=False) as f:
    f.write(r.read())
try:
    id3 = mutagen.id3.ID3(f.name)
finally:
    os.remove(f.name)

或者,如果您不关心Windows,则可以将其简化为:

r = urllib.request.open(url)
with tempfile.NamedTemporaryFile(mode='wb') as f:
    f.write(r.read())
    f.flush()
    id3 = mutagen.id3.ID3(f.name)

NamedTemporaryFile创建并打开一个临时文件。默认情况下,它将在您关闭时将其删除(在with语句结束时立即删除)。以这种方式使用它的问题在于,在Windows上,ID3可能无法打开临时文件,除非您将其关闭,这意味着您必须传递delete=False给构造函数,然后os.remove在以后显式将传递笨拙,但是我所知道的最好的方式是,对所有平台都安全可靠地编写它。(同样,如果您不关心Windows,只需使用较简单的第二个版本。)

如果您不理解该with语句,则PEP 343可能最好地解释了语句,但过分简化了,其想法是运行所有缩进的代码,然后自动关闭文件(即使您return或在缩进的中间引发异常)代码)。


可以从HTTP服务器获取的少数内容之一就是文件的大小。服务器通常会Content-Length:为每个响应发送一个标头,如果您发送HEAD请求而不是发送一个GET,那么您只会获得标头,而不是所有数据。所以:

>>> req = urllib.request.Request(url, method='HEAD')
>>> resp = urllib.request.urlopen(req)
>>> size = int(resp.headers['Content-Length'])
6201098

*实际上,我什至不确定“使用较低级别的函数”是否是一个选项;我不确定,但我认为MusicBrainz必须添加到Mutagen的分支中,才能使用打开的文件对象或字符串代替文件名,因为没有办法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据音频文件的截止频率(实际比特率)(kHz)对音频文件进行排序?

来自分类Dev

为什么moviepy在生成音频文件时抱怨比特率?

来自分类Dev

基于ffmpeg输出的音频文件的比特率是多少?

来自分类Dev

如何在javascript中转换音频文件的比特率?

来自分类Dev

为什么moviepy在生成音频文件时抱怨比特率?

来自分类Dev

如何在QT中获取音频文件的比特率?

来自分类Dev

24kHz 音频文件问题:不支持比特率 64000

来自分类Dev

在使用 Javascript 上传之前更改音频文件的比特率

来自分类Dev

如何在网站上显示不断增长的音频文件存档?

来自分类Dev

PHP检查下载链接,而无需下载文件

来自分类Dev

使用python分别获取Mp4文件的视频和音频比特率?

来自分类Dev

如何使用FFprobe从视频文件中获取音频比特率?

来自分类Dev

ReCaptcha下载音频文件?

来自分类Dev

如何通过命令行查找mp3文件的比特率?

来自分类Dev

如何通过命令行查找mp3文件的比特率?

来自分类Dev

录制和保存音频文件,而无需替换其他文件

来自分类Dev

无法设置音频比特率

来自分类Dev

ffmpeg,音频比特率太大

来自分类Dev

确定WebM视频文件的比特率

来自分类Dev

下载网站上可用的文件

来自分类Dev

是否可以读入并解析链接到网站上的.docx文件,而无需下载该文件(使用Java,Python或其他语言)?

来自分类Dev

从网站自动下载文件

来自分类Dev

在React Native中下载音频文件?

来自分类Dev

iOS-如何下载音频文件

来自分类Dev

AUSampler:引用外部(下载的)音频文件

来自分类Dev

在PHP中将较高比特率的mp3文件转换为较低比特率

来自分类Dev

Scrapy-从URL获取文件大小和类型,而无需下载文件?

来自分类Dev

Scrapy-从URL获取文件大小和类型,而无需下载文件?

来自分类Dev

如何使用音频文件而无需重新编码以输出具有相同格式的音频流?

Related 相关文章

  1. 1

    如何根据音频文件的截止频率(实际比特率)(kHz)对音频文件进行排序?

  2. 2

    为什么moviepy在生成音频文件时抱怨比特率?

  3. 3

    基于ffmpeg输出的音频文件的比特率是多少?

  4. 4

    如何在javascript中转换音频文件的比特率?

  5. 5

    为什么moviepy在生成音频文件时抱怨比特率?

  6. 6

    如何在QT中获取音频文件的比特率?

  7. 7

    24kHz 音频文件问题:不支持比特率 64000

  8. 8

    在使用 Javascript 上传之前更改音频文件的比特率

  9. 9

    如何在网站上显示不断增长的音频文件存档?

  10. 10

    PHP检查下载链接,而无需下载文件

  11. 11

    使用python分别获取Mp4文件的视频和音频比特率?

  12. 12

    如何使用FFprobe从视频文件中获取音频比特率?

  13. 13

    ReCaptcha下载音频文件?

  14. 14

    如何通过命令行查找mp3文件的比特率?

  15. 15

    如何通过命令行查找mp3文件的比特率?

  16. 16

    录制和保存音频文件,而无需替换其他文件

  17. 17

    无法设置音频比特率

  18. 18

    ffmpeg,音频比特率太大

  19. 19

    确定WebM视频文件的比特率

  20. 20

    下载网站上可用的文件

  21. 21

    是否可以读入并解析链接到网站上的.docx文件,而无需下载该文件(使用Java,Python或其他语言)?

  22. 22

    从网站自动下载文件

  23. 23

    在React Native中下载音频文件?

  24. 24

    iOS-如何下载音频文件

  25. 25

    AUSampler:引用外部(下载的)音频文件

  26. 26

    在PHP中将较高比特率的mp3文件转换为较低比特率

  27. 27

    Scrapy-从URL获取文件大小和类型,而无需下载文件?

  28. 28

    Scrapy-从URL获取文件大小和类型,而无需下载文件?

  29. 29

    如何使用音频文件而无需重新编码以输出具有相同格式的音频流?

热门标签

归档