统计音频文件时长
- 功能
- 代码
- 主要分析
- 提取文件的音频时长
- 读取文件夹下的所有文件的绝对路径
写这个主要是为了能更好的安排自己的学习时间,学习视频的时长很难直观的看总和时间,导致安排的时间没有很好的规划。几经之下还是决定写个程序统计视频总时长,以便更好的安排时间。
功能
可以统计该文件夹下所有音频文件的总时长
代码
from pymediainfo import MediaInfo
import json
import os
# 传入文件的【绝对地址】,返回文件的【时长】
def duration(files_path):
media_info = MediaInfo.parse(files_path)
data = media_info.to_json() # 转成json格式
data = json.loads(data) # 读取json格式
# 内容比较多需要细心分析找到自己需要的信息
try: # 防止存在其他类型文件
data = data.get('tracks')[1].get('other_duration')[3] # 提取到文件时长 00:10:40.807
return data[:8] # 秒以下的忽略 00:10:40
except:
return '00:00:00'
# 传入文件夹的【绝对地址】,【列表】形式返回文件夹下的【所有文件的绝对地址】
def root_path(files_path):
mp4_path_list = [] # 存放音频文件的绝对地址
for root, dirs, files in os.walk(files_path):
for f in files: # 添加音频文件的地址到列表中
mp4_path_list.append(os.path.join(root, f))
return mp4_path_list
# 传入存储时间的列表,返回时间总和
def duration_sum(duration_list):
# 创建三个列表存放【时,分,秒】
hour_list = []
minute_list = []
second_list = []
for duration_ in duration_list:
hour_list.append(int(duration_[:2])) # 存储【时】
minute_list.append(int(duration_[3:5])) # 存储【分】
second_list.append(int(duration_[6:])) # 存储【秒】
# 对时间进行叠加
second_sum = sum(second_list)
second = second_sum % 60
minute_sum = sum(minute_list) + int(second_sum / 60)
minute = minute_sum % 60
hour_sum = sum(hour_list) + int(minute_sum / 60)
hour = hour_sum % 60
# 输出该文件夹下的音频总时长
print(f'文件下的音频总时长为:{hour}小时{minute}分{second}秒')
if __name__ == '__main__':
file_path = r"E:\计算机网络\2022版"
# file_path = r"E:\计算机网络\2022版\第三章数据链路层"
path_list = root_path(file_path)
duration_list_ = [] # 用于存储文件时长
for path in path_list:
duration_list_.append(duration(path))
duration_sum(duration_list_)
可以统计文件夹下所有音频时长总和
亦可以统计单个文件夹下所有音频时长总和
主要分析
提取文件的音频时长
读取json文件的分析
- 读取到的json会很复杂很长
- 可以先查看json的长度
- 再定位到自己需要的数据(选择相应的json数据)
- 此过程可以留意读取和选取后数据的类型
- 逐步分析即可获取需要的数据
读取文件夹下的所有文件的绝对路径
os.walk() 用法
语法:os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
参数
- top – 根目录下的每一个文件夹(包含它自己),
产生3-元组 (dirpath, dirnames, filenames)
【文件夹路径, 文件夹名字, 文件名】。- topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
- onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
- followlinks – 设置为 true,则通过软链接访问目录。