统计文件夹下音频文件时长


写这个主要是为了能更好的安排自己的学习时间,学习视频的时长很难直观的看总和时间,导致安排的时间没有很好的规划。几经之下还是决定写个程序统计视频总时长,以便更好的安排时间。

功能

可以统计该文件夹下所有音频文件的总时长

代码

下载链接:统计音频文件时长

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,则通过软链接访问目录。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值