python判断视频是否为mp3格式的方法介绍
- 更新时间:2022-09-14 08:56:35
- 编辑:姜琳淼
-
mp3编码
MP3文件是一种流媒体文件格式,所以没有文件头。像AVI、WAV这种有文件头的格式,很好判断,他们都是RIFF开头的,只要进行RIFF字符串对比,就可以查出是否是AVI、WAV,而mp3就只能分析编码格式了。这里大概说mp3编码规则一下,详细的可用参考这篇文章
MP3 文件大体分为三部分:TAG_V2(ID3V2),音频数据,TAG_V1(ID3V1)
a). ID3V2 在文件开始的位置,以ID3开头,包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1 的信息量,非必需
b). 一系列的音频数据的帧,在文件的中间位置,个数由文件大小和帧长决定;每个帧都以FFF开头,的长度可能不固定,也可能固定,由位率bitrate决定;每个帧又分为帧头和数据实体两部分;帧头记录了mp3 的位率,采样率,版本等信息,每个帧之间相互独立 。
c). ID3V1在文件结尾的位置,以TAG开头,包含了作者,作曲,专辑等信息,长度为128Byte,非必须。
ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame
.
.
.
Frame
一系列的帧,个数由文件大小和帧长决定
每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定
每个FRAME又分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立。
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE。
也就是说,根据TAG_V2(ID3V2),音频数据,TAG_V1(ID3V1)三结构中的开头信息,便可以判断出是不是mp3编码的文件。
2.python代码
# coding: utf-8 import os #mp3filePath是否是mp3格式的 def isMp3Format(mp3filePath): #读取文件内字符串 f = open(mp3filePath, "r"); fileStr = f.read(); f.close(); head3Str = fileStr[:3]; #判断开头是不是ID3 if head3Str == "ID3": return True; #判断结尾有没有TAG last32Str = fileStr[-32:]; if last32Str[:3] == "TAG": return True; #判断第一帧是不是FFF开头, 转成数字 # fixme 应该循环遍历每个帧头,这样才能100%判断是不是mp3 ascii = ord(fileStr[:1]); if ascii == 255: return True; return False; #遍历folderPath看看是不是都是mp3格式的, #是就true,不是就是false, 并返回是mp3的list,不是MP3的list def isMp3FolderTraverse(folderPath): mp3List = []; notMp3List = []; isAllMpFormat = True; for dirpath, dirnames, filenames in os.walk(folderPath): for filename in filenames: path = dirpath + os.sep + filename; isMp3 = isMp3Format(path); #判断是不是mp3结尾的 并且 是mp3格式的 if isMp3 == False and str.endswith(path, ".mp3") == True: # print("--warning: file " + path + " is not mp3 format!--"); notMp3List.append(path); isAllMpFormat = False; else: mp3List.append(path); return isAllMpFormat, mp3List, notMp3List; if __name__ == '__main__': isMp3Format("s_com_click1.mp3"); isAllMp3, mp3List, notMp3List = isMp3FolderTraverse("sound"); print isAllMp3; print mp3List; print notMp3List;
以上就是python判断视频是否为mp3格式的方法介绍的详细内容,更多请关注码农之家其它相关文章!
相关教程
-
Python机器学习降低静态日志噪声实例方法
今天小编就为大家分享一篇关于使用Python和机器学习的静态日志噪声的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2019-06-23
-
实例详解Python实现排列组合、破解密码算法
这篇文章主要介绍了Python实现的排列组合、破解密码算法,结合实例形式分析了Python排列组合、密码破解相关数学运算操作技巧,需要的朋友可以参考下
发布时间:2020-01-09
-
python解包裹传递是什么
python解包裹传递的介绍:1、调用函数时,函数接收的实际参数为元组或字典类型时,可以使用“*”和“**”来解除函数参数的包裹。2、将实际参数分为多个值,并根据位置传递方式或关键词传递方式将值传递给各值。
发布时间:2021-06-15
-
python里“//”的含义及用法
python里//表示取整除,返回商的整数部分(向下取整)。Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
发布时间:2019-12-31
-
python3.4用函数操作mysql5.7方法
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # __author__ =
发布时间:2020-05-05
-
Python获取ftp服务器文件时间的代码和方法
今天小编就为大家分享一篇Python 获取ftp服务器文件时间的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2020-01-24
-
python打包exe能运行但是没有结果解决方案
在本篇文章里小编给大家整理了关于python打包exe能运行但是没有结果解决方案以及相关扩展知识内容,需要的朋友们参考学习下。
发布时间:2019-06-27
-
ipython和python区别点总结
IPython与标准Python的最大区别在于,Ipython会对命令提示符的每一行进行编号。python不能在退出保存历史;ipython历史记录自动保存:python不支持tab自动补全;ipython支持tab补全。
发布时间:2020-02-10
-
Python关于12306抢票开源项目实战
今天小编就为大家分享一篇关于Python爬虫实战之12306抢票开源,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2020-04-16
-
Python登录状态进行接口测试 Python 保持登录状态进行接口测试的方法示例
记录三种添加cookie保持接口登录状态的方法,方便自己回顾。 1.简单粗暴式。 此方法比较小白,前提是已经通过fiddler抓包等方式拿到了cookie,然后直接塞进去。 import requests trainsUrl =http://XXX
发布时间:2019-08-06