将.avi视频逐帧保存并转存为.mp4_使用python+opencv

电脑上.avi格式的视频在发送到手机微信上时打不开,寻找一种将.avi转化为.mp4的方法

这里,分成了两个步骤
1、将.avi视频逐帧转换为图片,即代码中的函数:avi2img()
2、将上一步生成的图片拼接成视频,即代码中的函数:img2mp4()

代码如下(注释在代码中):

#导入需要的库
import cv2
import os

#avi视频位置\保存的图片位置\输出视频的名称,按照自己的路径修改
avi_path = r'E:\2_3.avi'
img_path = r'E:\video'
out_name = 'out.mp4'

#定义avi转img函数
def avi2img(avi_path,img_path):
    cap=cv2.VideoCapture(avi_path) #读入一个视频,打开cap
    fps=cap.get(cv2.CAP_PROP_FPS) #获取视频的帧频
    isOpened=cap.isOpened #判断是否打开
    width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度
    height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度
    n = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #获取总帧数
    i=0
    #进入循环
    while(isOpened):
        #循环达到帧总数时退出
        if i==n:
            break
        #否则继续
        else:
            i+=1
        (flag,frame)=cap.read() #读取每一帧,一张图像flag 表明是否读取成果frame内容
        fileName = img_path+'\image'+str(i).zfill(4)+'.jpg' #要保存图片的名称
        #flag表示是否成功读图
        if flag==True:
            # cv2.IMWRITE_JPEG_QUALITY控制质量
            cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100]) #写入图片

#定义图片转视频函数
def img2mp4(img_path,out_name):
    img = cv2.imread(img_path+'\image0001.jpg')  #读取第一张图片
    fps = 25
    imgInfo = img.shape
    size = (imgInfo[1],imgInfo[0])  #获取图片宽高度信息
    fourcc = cv2.VideoWriter_fourcc(*"XVID") #视频写入编码器
    videoWrite = cv2.VideoWriter(out_name,fourcc,fps,size)
    # 根据图片的大小,创建写入对象(文件名,支持的编码器,帧频,视频大小(图片大小))

    files = os.listdir(img_path) #获取文件夹下图片
    out_num = len(files) #图片个数
    for i,name in enumerate(files):
        fileName = img_path + '\\' + name #读取所有图片的路径
        img = cv2.imread(fileName)  #写入图片
        videoWrite.write(img) #将图片写入所创建的视频对象
    videoWrite.release() #释放内存,非常重要!!!

avi2img(avi_path,img_path) #使用函数
img2mp4(img_path,out_name) #使用函数
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值