电脑上.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) #使用函数