python+opencv获取本地视频信息并写入txt文档中(附python源码)

python+opencv获取视频信息并存放在txt文档中

利用python+opencv获取视频的信息(如:帧率、总帧数、时长、文件大小、宽度、高度),并将获取的信息存放在txt文档中。

上源码:

# -*- coding=utf-8 -*-
import os
import sys
import cv2
from moviepy.editor import VideoFileClip
import argparse

# 定义命令行参数
parser = argparse.ArgumentParser()
parser.description = 'please enter the file name:'
parser.add_argument("-f", "--fname", help="this is file name", type=str)
args = parser.parse_args()


class FileCheck():

    def get_filesize(self, filename): # 获取文件大小
        file_byte = os.path.getsize(filename)
        return self.sizeConvert(file_byte)

    def get_file_times(self, filename): # 获取文件时长
        clip = VideoFileClip(filename)
        file_time = self.timeConvert(clip.duration)
        return file_time

    def sizeConvert(self, size):  # 文件大小单位换算
        K, M, G = 1024, 1024 ** 2, 1024 ** 3
        if size >= G:
            return str(round((size / G), 2)) + ' G Bytes'

        elif size >= M:
            return str(round((size / M), 2)) + ' M Bytes'

        elif size >= K:
            return str(round((size / K), 2)) + ' K Bytes'

        else:
            return str(round((size), 3)) + ' Bytes'

    def timeConvert(self, size):  # 文件时长单位换算
        M, H = 60, 60 ** 2
        if size < M:
            return str(size) + u'秒'
        if size < H:
            return u'%s 分 %s 秒 ' % (int(size / M), int(size % M))
        else:
            hour = int(size / H)
            mine = int(size % H / M)
            second = int(size % H % M)
            tim_srt = u'%s 小时 %s 分 %s 秒 ' % (hour, mine, second)
            return tim_srt

    def get_file(self): # 从命令行获取文件名
        fname = args.fname
        return fname


def decode_fourcc(cc): # fourcc编码
    return "".join([chr((int(cc) >> 8 * i) & 0xFF) for i in range(4)])


fc = FileCheck()
filename = fc.get_file()
cap = cv2.VideoCapture(filename) # 视频流
fps = cap.get(cv2.CAP_PROP_FPS)  # 获取视频帧率
fn = cap.get(cv2.CAP_PROP_FRAME_COUNT)  # 获取视频总帧数
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # 获取视频流宽度
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # 获取视频流高度
ffourcc = cap.get(cv2.CAP_PROP_FOURCC) # 获取视频fourcc编码

ftime = fc.get_file_times(filename) # 获取视频时长
fsize = fc.get_filesize(filename)  # 获取视频文件大小

'''
# 直接输出
print("视频格式(4cc编码):\t" + decode_fourcc(ffourcc))
print("视频帧率:\t"+str(fps)+"帧/秒")
print("视频总帧数\t"+str(fn)+"帧")
print("视频宽度\t"+str(width)+"px")
print("视频高度\t"+str(height)+"px")
print("视频时长:\t"+ftime)
print("视频文件小大:\t"+fsize)
'''
# 存入txt文档
file_write_obj = open(filename+"_info.txt",'w')  # txt文档存放在与视频同目录之下

file_write_obj.write("视频格式:\t" + decode_fourcc(ffourcc)+"(4cc编码)\n")
file_write_obj.write("视频帧率:\t"+str(round(fps,3))+"帧/秒"+"\n")
file_write_obj.write("视频总帧数:\t"+str(fn)+"帧"+"\n")
file_write_obj.write("视频宽度:\t"+str(width)+"px"+"\n")
file_write_obj.write("视频高度:\t"+str(height)+"px"+"\n")
file_write_obj.write("视频时长:\t"+ftime+"\n")
file_write_obj.write("视频文件小大:\t"+fsize+"\n")

源码文件名getVidInfo.py
命令行调用:

python getVidInfo.py -f [filename]

(注:[filename]为视频路径,例如:data/video.mp4)

利用cv2.get()获取其他视频信息可参考我的另一篇博文:
https://blog.csdn.net/weixin_44934424/article/details/108094096

参考链接 https://blog.csdn.net/xiaomahuan/article/details/78783174

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值