使用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()

你可能感兴趣的:(python,音视频,opencv)