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

猜你喜欢

转载自blog.csdn.net/weixin_44934424/article/details/108099605