使用Python代码实现视频(如.MP4)与图片(如.jpg)文件格式的相互转换

1.使用Python代码将视频文件(.MP4格式)转换为图片(.jpg格式)

对视频进行抽帧操作,将视频逐帧转换为图片(.jpg格式的图片的文件)
此处采取的方法是:对视频.MP4文件每隔10帧截取一张.jpg格式的图片
需要使用的Python方法cv2在opencv-python库中,下载安装方式;

pip install opencv-python

实现上述功能的Python代码如下:

import cv2
# TODO 将原视频转换为图片
def VideotoPicture():
    # 视频地址  创建一个VideoCapture对象,指定读取的视频文件
    cap = cv2.VideoCapture(r'C:\Users\12292\Desktop\1.mp4')
    # 通过摄像头的方式
    # cap = cv2.VideoCapture(1)

    fps = cap.get(cv2.CAP_PROP_FPS)  # 获取帧率 每一秒的视频帧数
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取高度

    # 判断视频是否读取成功  成功返回True  失败返回False
    sucess = cap.isOpened()

    frame_count = 0
    # 视频得到的图片名字img_name
    img_name = 0
    while sucess:
        frame_count += 1
        # 读取视频每一帧图像
        sucess, frame = cap.read()
        # TODO 每隔10帧存储一张图片
        if (frame_count % 10 == 0):
            img_name += 1
            # 图片存储地址以及存储格式.jpg  frame就是视频转换得到的图片  视频得到的图片名字img_name从1开始
            # 即最终视频转换得到的图片名字依次为1.jpg,2.jpg,3.jpg.................
            cv2.imwrite(r'C:\Users\12292\Desktop\1\%d.jpg' % img_name, frame)

    print("帧率(每秒视频的帧数):", fps)
    # 释放视频资源
    cap.release


if __name__ == '__main__':
    VideotoPicture()  # 视频转图像
2.使用Python代码将图片(.jpg,.png等格式)转换为视频文件(例如.MP4格式)

基本步骤如下:
  a. 使用glob获取路径下的所有图片;
  b. cv2.imread()读取所有图片;
  c. 将读取的图片存储在新的列表中,img_array;
  d. 使用cv2.VideoWriter()创建VideoWriter对象,注意参数的设置;
  e. 使用cv2.VideoWriter().write()保存 img_array 中的每一帧图像到视频文件;
  f. 释放 VideoWriter对象;

对众多图片进行拼接合成操作,将多张图片拼接成一个视频文件(例如.MP4格式)

实现上述功能的Python代码如下:

import cv2
import numpy as np
import glob
import os

# 其它格式的图片也可以 此处使用的是.jpg格式的图片
img_array = []
# 指出用于生成视频的图片所在的存储路径  glob获取路径下的所有图片
for filename in glob.glob('C:/Users/12292/Desktop/1/*.jpg'):
    # 读取所有图片
    img = cv2.imread(filename)
    height, width, layers = img.shape
    # 获取图片大小尺寸
    size = (width, height)
    # 将读取的图片存储在新的列表中,img_array
    img_array.append(img)

# avi:视频类型,或者导出.mp4类型的视频文件也可以
# cv2.VideoWriter_fourcc(*'mp4v'):编码格式
# 5:视频帧率
# size:视频中图片大小
# 视频输出地址与命名:C:/Users/12292/Desktop/2/2.mp4
# 使用cv2.VideoWriter()创建VideoWriter对象
out = cv2.VideoWriter('C:/Users/12292/Desktop/2/2.mp4',
                      # cv2.VideoWriter_fourcc(*'DIVX'),
                      cv2.VideoWriter_fourcc(*'mp4v'),
                      5, size)

for i in range(len(img_array)):
    # 使用cv2.VideoWriter().write()保存 img_array 中的每一帧图像到视频文件;
    out.write(img_array[i])
# 释放 VideoWriter对象
out.release()
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值