Python图片转视频和视频转图片

1. 视频转图片

import cv2
import math

cap = cv2.VideoCapture('video/MOV_0005.MOV')   #加载视频文件
cap_num = cap.get(7)         # 获取视频总帧数
cap_width = math.ceil(cap.get(3))   #获取视频帧宽度(横)
cap_height = math.ceil(cap.get(4))  #获取视频帧高度(竖)
cap_fps = math.ceil(cap.get(5))     #获取视频帧率

#得到视频总帧数的位数,比如198帧(三位数),得到3;1989帧(4位数),得到4
cap_count = 0
while cap_num:
     cap_count = cap_count+1
     cap_num = math.floor(cap_num/10)

fix = '%0'+str(cap_count)+'d' #得到图片保存的前缀,比如001.png,0001.png
cap_cnt = 1

flag, frame = cap.read()   #读取图片
while flag:
           
     path =  'video/img_sequ/'+str(fix%cap_cnt)+'.png'  #图片保存目录
     cv2.imwrite(path,frame)
     cap_cnt = cap_cnt+1
     flag, frame = cap.read()

cap.release()

 Python图片转视频和视频转图片_第1张图片

2. 图片转视频

import cv2
#保存为avi视频格式,超占内存,每张图片4M,1000张,完完整整的3.5G
fourcc = cv2.VideoWriter_fourcc('I','4','2','0')  #视频的格式

#cap_fps是帧率,可以根据随意设置;size要和图片的size一样,但是通过img.shape得到图像的
(height,width,channel),但是此处的size要传的是(width,height),这里一定要注意注意,
不然结果会打不开,提示“无法解码多工传送的流”等.比如通过img.shape得到常用的图片尺寸(1080,1920,3),则size设为(1920,1080)
cap_fps = 30
size = (1920, 1080)   #根据自己图片尺寸更改
video = cv2.VideoWriter('results/result.avi',fourcc, cap_fps, size)

#video.write默认保存彩色图,如果是灰度图,则
img_E = cv2.imread('test/0001.png')
img_E = cv2.merge((img_E,img_E,img_E))   #拓展为三通道
video.write(img_E)   

#默video.write默认保存彩色图,如果是彩色图,则直接保存
img_E = cv2.imread('test/0001.png')
video.write(img_E)
video.release()





#保存为mp4视频格式,省内存,每张图片4M,1000张,完完整整的才17M大小
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')  #视频的格式
cap_fps = 30
size = (cap_width, cap_height)
video = cv2.VideoWriter('results/result.mp4',fourcc, cap_fps, size)

#video.write默认保存彩色图,如果是灰度图,则
img_E = cv2.imread('test/0001.png')
img_E = cv2.merge((img_E,img_E,img_E))   #拓展为三通道
video.write(img_E)   

#默video.write默认保存彩色图,如果是彩色图,则直接保存
img_E = cv2.imread('test/0001.png')
video.write(img_E)
video.release()




附录---备用

#如果要转换图像通道
img = img[...,[2,1,0]]



#将现成的大内存avi转换为小内存的mp4文件
from subprocess import call
command = 'ffmpeg -i results/result.avi results/result.mp4'
call(command.split())

 

你可能感兴趣的:(Python图片转视频和视频转图片)