• python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频


    1、将视频保存为图片

    1.1 完整代码

    # -*- coding: utf-8 -*-
    import cv2
    import os
    cap = cv2.VideoCapture('TestFiles/2.mp4')
    index = 0
    prop = cv2.CAP_PROP_FRAME_COUNT
    total = int(cap.get(prop)) # 获取视频总帧数
    while(cap.isOpened()):
        # ret返回布尔值
        ret, frame = cap.read()
        if ret:
            img_name = f'{index}.jpg'
            save_path = os.path.join('test1', img_name)
            cv2.imwrite(save_path, frame)
            index += 1
            print(f'已保存第{index}帧图片,视频总帧数{total}')
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    # 释放资源
    cap.release()
    # 关闭窗口
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    1.2 运行结果

    运行过程,打印信息如下:
    在这里插入图片描述
    图片存储样式如下:
    在这里插入图片描述

    2. 批量将图片保存为视频

    注:所有图片的大小需要保持一致,如果图片大小不相同,需要resize成相同大小。
    此处将上面示例的图片再存储为视频,图片如下:
    在这里插入图片描述

    2.1 完整代码

    # # 将多张大小一样的照片制作成视频,注意要大小相同
    import os
    import cv2
    
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')  # 视频编解码器mp4格式
    #fourcc = cv2.VideoWriter_fourcc(*'XVID') # avi格式
    width = 388  #图片宽,根据实际情况修改
    height = 218 #图片长,根据实际情况修改
    video_name = 'test1.mp4'  #保存的视频名称
    fps = 30 # 每秒保存帧数
    out = cv2.VideoWriter(video_name, fourcc, fps, (width, height))  # 写入视频
    
    img_dir = 'test1' # 图片所在的文件夹路径
    img_list = []
    # 需保证所有图片的大小一致
    for name in os.listdir(img_dir):
       img_list.append(name)
    
    # 将图片按照文件名的数字大小排序,不然可能会出现图片保存视频,画面混乱的情况
    img_list.sort(key=lambda x:int(x.split('.')[0]))
    index = 1
    for each in img_list:
       img_path = os.path.join(img_dir, each)  # 图片路径
       img = cv2.imread(img_path)
       print(f'已存储至第{index}张图片,图片名称{each}')
       index += 1
       out.write(img)
    # 释放资源
    out.release()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    注意,遍历时图片的顺序一定要正确,不然存储的视频可能会出现画面混乱的情况。遍历前最好按照名称对图片进行一下排序。

    2.2 运行结果

    过程中的打印信息如下:
    在这里插入图片描述

    如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏!

    欢迎关注下方G-Z-H:阿旭算法与机器学习,共同学习交流~

  • 相关阅读:
    RK3399平台开发系列讲解(中断篇)中断控制器驱动初始化
    端口号,UDP,TCP
    数据结构 贪心算法 动态规划 学习笔记
    Springboot毕设项目供应链平台网站1f0ei(java+VUE+Mybatis+Maven+Mysql)
    自然语言处理 微调ChatGLM-6B大模型
    SpringCloud小项目——订单积分商城 & 使用Nacos、Open Feign、Gateway、Sentinel技术栈
    牛客-946B-筱玛爱阅读
    Spring、MyBatis框架和Redis数据库介绍 第3关:Redis数据库简介
    [unity]三角形顶点顺序
    深入理解计算机网络-2计算机网络概述
  • 原文地址:https://blog.csdn.net/qq_42589613/article/details/133941365