提取文件夹中视频(.mp4,.avi,.flv)播放的时间并生成.txt文件

临近考研很多小伙伴都开始制定周密的计划,但是由于观看不同视频,播放的时长不同,计划也得随着改变,本程序可以获取不同文件夹下的不同视频的播放时长并生成.txt文件便于查看,同时会生成不同文件夹下视频格式下的总和。

1.加载视频,使用moviepy.editor库中的VideoFileClip类https://blog.csdn.net/Scarlett2025/article/details/117998921?spm=1001.2014.3001.5506

__init__(self, filename, has_mask=False,
                 audio=True, audio_buffersize=200000,
                 target_resolution=None, resize_algorithm='bicubic',
                 audio_fps=44100, audio_nbytes=2, verbose=False,
                 fps_source='tbr')
其中

filename:视频文件名,只要是ffmpeg支持的视频文件如  .mp4, .mpeg, .avi, .mov等都可以

has_mask:如果视频文件中包含遮罩该参数设置为“True”

audio:如果视频没有声音或者希望加载时不读取音频,则应该将改参数设置为False

audio_buffersize:音频缓冲区大小,一般使用缺省值即可

target_resolution:设置为加载后需要变换到的分辨率,类型为列表或元组,第一个元素为分辨率的高,
                   第二个为宽,如果高或宽有一个为None,则保持现有纵横比调整帧的大小。
                   如果保持原分辨率不变,则不需要设置本参数或设置为None。如果设置了新的分辨率,
                   则在调用ffmpeg 返回视频剪辑的帧之前会按新的分辨率调整帧的大小。
                   这比使用转换为高分辨率流然后再调整分辨率会快很多

resize_algorithm:要改变加载后的视频分辨率,可以通过resize_algorithm指定调整分辨率的算法,
                  缺省值为 “bicubic”,还可以是 “bilinear” 、"fast_bilinear"等。

audio_fps:声音的采样频率

audio_nbytes:采样的位数

verbose:是否在标准输出设备上显示处理信息

fps_source:从视频的元数据metadata哪个数据中获取fps值,默认设置为’tbr’,但可以设置为’fps’,
            这可能有助于导入慢动作视频,否则会弄糟。

2.引入os库对文件操作

例:os.listdir(path)

对path文件夹下进行索引,返回列表值

代码

from moviepy.editor import VideoFileClip
import os

#    Communication class 2
#    zx
#    19020810212

try:
    Time = 0 #时
    minute = 0#分
    second = 0#秒
    all_Time = 0
    all_minute = 0
    all_second = 0
    all_f = 0 #文件数
    #all_second_f = 0 #临时变量
    print("!!!!----本程序为,索引文件夹中的音频播放时间并生成.txt文件----!!!!\n")
    print("!!!!----生成 .txt文件中有音频的根地址和播放时长小时分钟秒----!!!!\n")
    print("!!!!-----------------音频格式为 .mp4.avi.flv-----------------!!!!\n")
   
    
    address = input("请输入音频格式下的地址(可以是文件但是只能最多包含2层文件夹)\n例: ...\文件下的\文件中的\\.mp4  \n")
    f_address = input("\n请输入需要保存到的.txt文件的根目录,例E:\\py\\f.txt\n")
    f = open(f_address,"a")
    
    
    #直接输入视频格式
    if (os.path.isdir(address) == False ) and (address[-3:] in ['mp4','avi','flv']):   
        clip = VideoFileClip(address)
        print( clip.duration ) # seconds
        Time = int(clip.duration/3600)
        minute = int((clip.duration - Time*3600)/60)
        second = int(((clip.duration - Time*3600)-minute*60))
        print(address + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
        f.write(address + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
        f.write('\n')
        all_f += 1
        all_second += clip.duration
    #输入上一层文件    
    elif  (os.path.isdir(address) == True ):#如果是个文件
        dataname = os.listdir(address)  #读取文件夹里的文件
        for i_address in dataname:
            i_address_1 = address + '\\' + i_address
            all_f_f = 0
            all_Time_f = 0
            all_minute_f = 0
            all_second_f = 0
            #文件里里的是视频
            if (os.path.isdir(i_address_1) == False ) and (i_address[-3:] in ['mp4','avi','flv']):#不是文件且后缀为音频
                clip = VideoFileClip(i_address_1)
                print( clip.duration ) # seconds
                Time = int(clip.duration/3600)
                minute = int((clip.duration - Time*3600)/60)
                second = int(((clip.duration - Time*3600)-minute*60))
                print(i_address_1 + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
                f.write(i_address_1 + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
                f.write('\n')
                all_f += 1
                all_second += clip.duration
            #文件夹里是个文件夹
            elif (os.path.isdir(i_address_1) == True ):#是文件
                dataname_1 = os.listdir(i_address_1)  #读取文件夹里的文件
                for ii_address in dataname_1:
                    i_address_2 = i_address_1 + '\\' + ii_address
                    #是视频
                    if (os.path.isdir(i_address_2) == False ) and (ii_address[-3:] in ['mp4','avi','flv']):#不是文件且后缀为音频
                        clip = VideoFileClip(i_address_2)
                        print( clip.duration ) # seconds
                        Time = int(clip.duration/3600)
                        minute = int((clip.duration - Time*3600)/60)
                        second = int(((clip.duration - Time*3600)-minute*60))
                        print(i_address_2 + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
                        f.write(i_address_2 + "   " + str(Time) + ':' + str(minute) + ':'+ str(second))
                        f.write('\n')
                        all_f += 1
                        all_f_f += 1
                        all_second += clip.duration
                        all_second_f += clip.duration
                all_Time_f = int(all_second_f/3600)
                all_minute_f = int((all_second_f - all_Time_f*3600)/60)
                all_second_f = int(((all_second_f - all_Time_f*3600)-all_minute_f*60))
                f.write('\n')
                print(i_address_1  + "\n 总共" + str(all_f_f) +"个文件  共"  + str(all_Time_f)+"小时 " + str(all_minute_f) + "分钟 " + str(all_second_f) + "秒")
                f.write(i_address_1  + "\n 总共" + str(all_f_f) +"个文件  共"  + str(all_Time_f)+"小时 " + str(all_minute_f) + "分钟 " + str(all_second_f) + "秒")
                f.write("\n\n")
    all_Time = int(all_second/3600)
    all_minute = int((all_second - all_Time*3600)/60)
    all_second = int(((all_second - all_Time*3600)-all_minute*60))
    print(" 总共" + str(all_f) +"文件  共"  + str(all_Time)+"小时 " + str(all_minute) + "分钟 " + str(all_second) + "秒")
    f.write(" 总共" + str(all_f) +"文件  共"  + str(all_Time)+"小时 " + str(all_minute) + "分钟 " + str(all_second) + "秒")
    f.close()
except:
    print("Failde Somehow")






pycharm运行结果如下

 .txt文件如下

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值