自动获取视频属性

前两天要统计一些数据,其中就需要统计每个视频的时长,无意间发现有一个教程044 Python小项目-视频时长获取器(PyQt5),其中核心代码如下:

Python
import cv2


def get_file_times(filename):
    """获取视频时长"""
    file_time = 0
    cap = cv2.VideoCapture(filename)
    if cap.isOpened():
        rate = cap.get(5)
        frame_num = cap.get(7)
        duration = frame_num/rate
        cap.release()
        return duration
    else:
        return file_time


def timeConvert(size):
    """时间单位换算"""
    M, H = 60, 60**2
    if size < M:
        return str(size)+'秒'
    if size < H:
        return '%s分钟%s秒' % (int(size/M), int(size % M))
    else:
        hour = int(size/H)
        mine = int(size % H/M)
        second = int(size % H % M)
        time_str = "%s小时%s分钟%s秒" % (hour, mine, second)
        return time_str

如果需要深入获取视频属性,比如分辨率等,能不能通过opencv获取到呢?

以下是一段通过opencv获取到的视频属性

Python
import cv2
cap = cv2.VideoCapture(video_name) # 这里需要填写视频的路径
# 帧率
fps = int(round(cap.get(cv2.CAP_PROP_FPS)))
# 分辨率-宽度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 分辨率-高度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 总帧数
frame_counter = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

cap.release()
cv2.destroyAllWindows()
# 时长,单位s
duration = frame_counter / fps

0101更新

最近阅读别人的源码的时候,无意间发现pymediainfo也能获取视频的属性,而且相对于opencv,包也相对比较小,后续可以进一步研究看看