搜索和下载音乐专辑封面

sacad的Python项目详细描述


SACAD

智能自动封面下载程序

PyPI versionAUR versionTests statusCoverageLines of codeSupported Python versionsLicense

SACAD是一个多平台的命令行工具,无需手动干预即可下载唱片封面,非常适合与脚本、音频播放器等集成。

自1.6版以来,sacad还提供了一个新的命令行工具sacad_r,用于扫描音乐库、从音频标记读取元数据和自动下载丢失的封面,还可以选择将图像嵌入音频文件(自1.9版起)。

自2.0版以来,sacad被重写为使用asyncio框架,这通常会使sacad的处理速度提高约40%,并使处理速度提高600-700%(是的,提高了6-7倍!)对于sacad_r

功能

  • 可以针对特定的图像大小,查找高分辨率封面的结果
  • 支持JPEG和PNG格式
  • 目前支持以下封面来源:
    • last.fm
    • 谷歌图片
    • coverlib(站点关闭)
    • 亚马逊CD(.com、.ca、.cn、.fr、.de、.co.jp和.co.uk变体)
    • 亚马逊数字音乐
  • 智能排序算法为一个给定的查询选择最佳覆盖,使用几个因素:源可靠性、图像格式、图像大小、图像与参考覆盖的相似性等
  • 使用optipng或jpegoptim自动压缩图像(可以节省30%的文件大小而不损失任何质量,非常适合便携式播放器)
  • 在本地缓存搜索结果,以便将来更快地进行搜索
  • 尽一切努力避免被源阻止:隐藏用户代理并自动处理速率限制
  • 如果需要,自动转换/调整图像大小
  • 多平台(Windows/Mac/Linux)

sacad的设计是健壮的,可以成批执行数千个查询:

  • HTML解析不使用正则表达式,但使用了LXML库,它速度更快,对页面更改更健壮
  • 当源报告的图像大小不可靠时(即google images),自动下载文件的第一个kb以从文件头获取其实际大小
  • 同时处理多个查询(使用asyncio),以加快处理速度
  • 自动重用TCP连接(HTTP保持活动状态),以获得更好的性能
  • 自动重试失败的http请求
  • 音乐库扫描支持所有常见的音频格式(MP3、AAC、Vorbis、FLAC…)
  • 由于测试覆盖率很高,覆盖源页面或API更改会很快被检测到,SACAD也会相应地快速更新

安装

SACAD要求Python>;=3.5

独立Windows可执行文件

windows用户可以下载不需要python的standalone binary

Arch Linux

arch linux用户可以安装sacadaur包。

来自PYPI(带PIP)

  1. 如果还没有,请使用python 3的install pip
  2. 安装sacad:pip3 install sacad

来源

  1. 如果还没有,那么对于Python 3,install setuptools
  2. 克隆此存储库:git clone https://github.com/desbma/sacad
  3. 安装sacad:python3 setup.py install

可选

另外,如果您想从图像处理中受益(无损重新压缩以节省额外空间):

在ubuntu和其他debian衍生物上,您可以使用sudo apt-get install optipng jpegoptim安装两者。

请注意,根据CPU的速度,处理可能会显著减慢处理速度,因为它非常占用CPU(特别是对于PNG文件)。

命令行用法

提供了两个工具:sacad用于搜索和下载一个封面,以及sacad_r用于扫描音乐库并下载所有丢失的封面。

运行sacad -h/sacad_r -h获得完整的命令行引用。

示例

下载木偶大师的封面smetallica到文件AlbumArt.jpg,目标是~600x600像素分辨率:sacad "metallica" "master of puppets" 600 AlbumArt.jpg

使用与前面示例相同的参数下载库的封面:sacad_r library_directory 600 AlbumArt.jpg

限制

  • 仅支持前盖

添加覆盖源

如果您是python开发人员,添加一个新的封面源代码非常容易,您需要继承CoverSource类并实现以下方法:

  • getSearchUrl(self, album, artist)
  • parseResults(self, api_data)
  • updateHttpHeaders(self, headers)(可选)

有关详细信息,请参见代码中的注释。

许可证

Mozilla Public License Version 2.0

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法设置@Async方法   在Java中设置链表   未设置id时遇到java StaleObjectStateException   java如何保存程序的状态并加载它?   java映射类和schemaderived类之间有什么区别?   控制器类中的java全局变量在最新会话打开时被覆盖   java Hystrix和连接池   java Sonar在我不关闭ignite对象时引发拦截器问题   java无法在Junit TestCase中为控制器设置Mockito值   java保证异步传递消息   java如何高亮显示按钮,直到为微调器提供有效值?   java在Android中使用ImageView控件创建错误   JMX垃圾收集和系统之间的java差异。gc()?   java在尝试向标记添加信息窗口时卡住了?   java JavaFX检测与后台的冲突   java将光标放在按钮上时更改按钮的位置   java Maven。如何从paren pom继承配置文件。xml?   带空格的Java填充字符串   java将两个对象设置为相等,并找到其布尔结果