音乐文件哈希器

mp3hash的Python项目详细描述


mp3hash

哈希音乐文件忽略元数据。

用于检测不同标记文件中的同一首歌曲。

支持以下元数据标准:

id3v1, id3v1 extended, id3v2.2, id3v2.3 and id3v.24

哈维尔·桑塔克鲁兹(2012-2013)

命令行用法

类似于sha1summd5sum,它接受一个或多个文件并 以这种方式返回散列:

$ ./mp3hash  *.mp3
6611bc5b01a2fc6a6386a871e8c51f86e1f12b33 13_Hotel-California-(Gipsy-Kings).mp3
6611bc5b01a2fc6a6386a871e8c51f86e1f12b33 14_Hotel-California-(Gipsy-Kings).mp3

它返回相同的散列号,即使标记不同,并且 所以他们的常规散列:

$ sha1sum *.mp3
6a1d5f8317add10e205ae30174630b47645fb5b4  13_Hotel-California-(Gipsy-Kings).mp3
c28d6976114d31df3366d9935eb0bedd36cf1f0b  14_Hotel-California-(Gipsy-Kings).mp3

它严格使用文件中的音乐数据,通过 计算标记大小并忽略它们。

默认的散列算法是sha-1,但是任何算法都可以是 只要python的hashlib模块支持,就可以使用它。一个 所有可用哈希算法的完整列表可以通过 使用--list-algorithms调用程序。

$ ./mp3hash --list-algorithms
md5
sha1
sha224
sha256
sha384
sha512

./mp3hash --algorithm md5
ac0fdd89454528d3fbdb19942a2e6653 13_Hotel-California-(Gipsy-Kings).mp3
ac0fdd89454528d3fbdb19942a2e6653 14_Hotel-California-(Gipsy-Kings).mp3

安装

除了python2.7+,它没有任何依赖项。为了 访问mp3hash脚本时,应安装包。

python setup.py install

并且mp3hash命令应该在path中可用。

API

主要组件是mp3hash函数和taggedfile类。

  • mp3hash将计算 给定路径中的文件。

    from mp3hash import mp3hash mp3hash(‘/path/to/song.mp3’) Out: 6611bc5b01a2fc6a6386a871e8c51f86e1f12b33

  • taggedfile类采用支持seek和 seek为负值,将解析 存储在其中的元数据。

    from mp3hash import TaggedFile with open(‘/path/to/song.mp3’) as file: TaggedFile(file).has_id3v2 Out: True

开发商,开发商,开发商!

测试环境

建议您使用virtualenv

$ virtualenv --python python2 --distribute env
$ . env/bin/activate

一旦进入virtualenv,安装包并测试 家属。

$(env) python setup.py develop
$(env) pip install -r dev-reqs.txt

为了执行测试,请从 项目(setup.py的同一目录)。

$ nosetests

关于id3v1

  • ID3v1在文件末尾是128字节,以“tag”开头
  • 扩展的id3v1比常规的id3v1标记早227字节 “标签+”

总大小:128+(如果扩展,则为227)

id3v1在文件末尾是128字节,以“tag”id3v1开头 扩展是在常规ID3v1标记之前227字节,以“tag+”开头

总大小:128+(如果扩展,则为227)

关于id3v2

id3v2在文件开头有一个10字节的头。字节5保持 旗帜。第4位表示在v2.4字节中有页脚6-10是 标签大小(不包括页眉)

总大小:页眉+标记大小+页脚(如果有)

基于id3v1维基百科文档:http://en.wikipedia.org/wiki/ID3基于 ID3v2文档:

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

推荐PyPI第三方库


热门话题
Synth xml中的java设置JLabel图标   java全屏Flash应用程序测试需要外部戳   评测配置文件Java CPU负载   java如何显示布尔值?   java共享库与微服务?   使用bash脚本重定向java输出(liquibase)   java如何进行结构化日志记录?   属性JSF2的java绑定属性<h:dataTable>   java Android Restlet包装崩溃   java如果在一个事务中我们只在一个数据源上写,是否可以避免2PC或手动处理提交?(J2CA0030E)   java从哪里获得openCV的jar?   java正在尝试更新SQL数据库条目,但收到SQL语法错误。我怎么知道这里出了什么问题?   java如何在Firebase数据库值中添加空格   为什么在java中读取datainputstream时会出现EOF异常?   java STDERR将每个stacktrace行作为错误日志条目写入WildFly服务器。日志   java通过socket编写一个没有'ImageIO'的映像   java为什么JBoss会在出现错误时破坏连接池?   javafxjava如何查找当月的第一次登录   java这个Android项目给了我一个崩溃的机会,我正试图让这个项目有一个来自编辑文本的数字,并在文本视图中得到它两次