python cv2 模块图片生成视频
事件起因
在工位上写bug的时候觉得窗外风景不错,iPhone自带的延时摄影会根据时长调整压缩比例,然后想下载一个app拍摄固定比例的延时视频。
slow shutter
这app只会拍照片而不会处理成延时视频,于是iPhone收获了1000张3秒间隔的连续的照片。
手机app也没有能处理这么多照片的,也懒得下adobe,搜了下python可以用,就试试
原理:将照片逐帧连续写入视频对象中,iphone照片导出来是连续的号码,直接遍历即可
import cv2
import os
img_root = 'F:/TempIphone/' #照片文件路径
fps = 60 #FPS
size=(1080,1920) #图片、视频尺寸
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
videoWriter = cv2.VideoWriter('F:/pygenvideo/dist/demofps60.mp4',fourcc,fps,size, True)
for img_file in os.listdir(img_root):
frame = cv2.imread(img_root + img_file)
videoWriter.write(frame)
print(img_root + img_file + ' done!')
videoWriter.release()
这里调试了一会儿,以下是遇到的坑
1、size是输出视频的size,这里只要图片文件大小一致就行,fps就是每秒多少帧自己定。
2、搜到的文章说fourcc编码格式只支持avi,这里试了mp4可行,找到对应的编码格式和文件就没问题。
例:
cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec
cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec --> mp4v
cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
cv2.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
cv2.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec --> avi
cv2.VideoWriter_fourcc(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
cv2.VideoWriter_fourcc(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
3、videoWriter对象可以使用 imshow(“example”,frame(帧对象)) 来验证是否读取到了图片文件,frame 帧对象也可以print frame.shape 输出图像大小。
4、imread这里使用的是绝对路径,最开始因为使用了相对路径,imshow倒是能show出来,就是写不进视频文件里导致输出文件只有十几kb,折腾了好一会儿。
5、os.listdir参数一定得是文件夹
最后成功输出了75m的视频,且可以自己调整帧率,很方便,然后再弄回iPhone发给女票显摆。
以上,萌新记录
参考链接:
1: https://blog.csdn.net/TionSu/article/details/81356006
2: https://blog.csdn.net/weixin_42984932/article/details/108078295
3: https://blog.csdn.net/weixin_36670529/article/details/100977537
4: https://www.e-learn.cn/topic/3267838