import cv2


#读取切分文件
def readQiFenWenJian(filename):
    with open(filename, "r", encoding='UTF-8')as f:
        res_list = f.readlines()
        print("读取到的切分文件")

        print(res_list)
        print(len(res_list))
    zuizhong_res_list = []
    for i in range(2,len(res_list)):
        if res_list[i] != '\n':
            zuizhong_res_list.append(res_list[i])

    print(zuizhong_res_list)
    print(len(zuizhong_res_list))
    return zuizhong_res_list



# 读取一个视频文件,从帧列表中,开始算后续帧,第一个帧为0
def handleOneVideo(video_file,zhen_list):
    for i in range(0, len(zhen_list)):
        yihang_shifenmiao = []
        yihangshuju = zhen_list[i]
        print("一行数据:")
        print(yihangshuju)
        yihang_list = yihangshuju.split(" ")
        print("yihang列表:")
        print(yihang_list)
        for one in yihang_list:
            if ":" in one:
                yihang_shifenmiao.append(one)

        print("yihang时分秒帧-列表:")
        print(yihang_shifenmiao)
        start_shifenmiao = yihang_shifenmiao[0]
        start_shifenmiao_list = start_shifenmiao.split(":")
        print("start_shifenmiao_list:")
        print(start_shifenmiao_list)

        end_shifenmiao = yihang_shifenmiao[1]
        end_shifenmiao_list = end_shifenmiao.split(":")
        print("end_shifenmiao_list:")
        print(end_shifenmiao_list)


        START_HOUR = int(start_shifenmiao_list[0])  # 开始小时
        START_MIN = int(start_shifenmiao_list[1])  # 开始分钟
        START_SECOND = int(start_shifenmiao_list[2])  # 开始秒数
        START_TIME = START_HOUR * 3600 + START_MIN * 60 + START_SECOND  # 设置开始时间(单位秒)
        END_HOUR = int(end_shifenmiao_list[0])  # 结束小时
        END_MIN = int(end_shifenmiao_list[1])  # 结束分钟
        END_SECOND = int(end_shifenmiao_list[2])   # 结束秒
        END_TIME = END_HOUR * 3600 + END_MIN * 60 + END_SECOND  # 设置结束时间(单位秒)

        video = video_file
        cap = cv2.VideoCapture(video)  # 读取视频
        FPS = cap.get(cv2.CAP_PROP_FPS)
        print("帧率:")
        print(FPS)

        size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        print("大小:")
        print(size)

        TOTAL_FRAME = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 获取视频总帧数
        print("总帧数:")
        print(TOTAL_FRAME)
        frameToStart = START_TIME * FPS+int(start_shifenmiao_list[3])  # 开始帧 = 开始时间*帧率 + 多余帧   根据达芬奇切割点自动算出开始帧
        print("开始帧:")
        print(frameToStart)
        frametoStop = END_TIME * FPS + int(end_shifenmiao_list[2])  # 结束帧 = 结束时间*帧率 + 多余帧 根据达芬奇切割点自动算出开始帧
        print("结束帧:")
        print(frametoStop)

        cishu = i
        # 分批写入视频文件
        videoWriter = cv2.VideoWriter(
            r'%s_%s.mp4' % (video, cishu), cv2.VideoWriter_fourcc(*'mp4v'), FPS, size)

        cap.set(cv2.CAP_PROP_POS_FRAMES, frameToStart)  # 设置读取的位置,从第几帧开始读取视频

        COUNT = frameToStart
        while True:
            success, frame = cap.read()
            if success:
                COUNT += 1
                if COUNT <= frametoStop and COUNT > frameToStart:  # 选取起始帧
                    print('correct= ', COUNT)
                    videoWriter.write(frame)
            # print('mistake= ', COUNT)
            if COUNT > frametoStop:
                break
        print('end')




if __name__ == '__main__':
    qiefenwenjian = r"C:\4k\苏幕遮-小点.edl"
    video_file =r"C:\4k\ceshi\daichuli\苏幕遮.mp4"
    zhen_list = readQiFenWenJian(filename=qiefenwenjian)
    handleOneVideo(video_file, zhen_list)

 

posted on 2024-03-29 00:24  大话人生  阅读(41)  评论(0编辑  收藏  举报