如果我从网上下载音频文件并且下载过程出现问题,那么如何使用python有效地检测到音频文件不完整?
有一些想法,例如using the file
command in linux:
file audio.mp4
但它承认它是mp4:
audio.mp4: ISO Media, MPEG v4 system, version 2
即使mplayer检测到mp4音频类型,但在尝试播放时失败。我不认为从python启动mplayer并检查它是否失败是一个可扩展的解决方案。
以下是损坏文件的示例: https://www.dropbox.com/s/5rpscb9r1xrrx4t/They
上面的示例使用mutagen和mp4file失败,导致它们无限期挂起。它与fileObject.tell()。
有关答案 0 :(得分:2)
有许多不同的音频文件格式,以及可能是也可能不是音频文件的容器格式。
幸运的是,有些库可以存储各种不同类型的文件。还有Python包装器:
如果你愿意为不同的文件类型使用单独的包装器,那么还有更多的选择(例如,libmp4v2非常适合MP4文件,但对其他任何东西都没用。)
当然存在巨大的权衡 - 更强大的库通常会更复杂,或者有更多的先决条件。在http://pypi.python.org/进行一些搜索以查看出现的情况;你应该能够找到能满足你想要的一切的东西。
对于一个非常简单的例子,mp4file将尝试解析任何MPEG4容器。如果它不完整,或者有任何无效的原子,你会得到一个例外。因此,支票只有一行,mp4file.Mp4File(path)
。如果成功,它就完成了;如果它抛出异常,则它是不完整或无效的。但是,当然这将接受一个完整的MPEG4视频文件,或者没有音频或视频的MPEG4,它将拒绝完整的MP3,甚至是一个带有一个破坏元数据标签的完整M4A。