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