参考原文:Python + OpenCV 将多帧图片生成视频流 - 2020。04.10
作者:丁洪凯
1. OpenCV - VideoWriter() 函数
采用 OpenCV VideoWriter() 函数
<VideoWriter object> = VideoWriter(
const String &filename,
int fourcc,
double fps,
Size frameSize,
bool isColor=true)
参数:
- filename:需要生成的视频的路径及文件名;
- fourcc:用于压缩框架的解码器的4位编码(four code of codec),在此查询可用的4位码(http://www.fourcc.org/codecs.php)
- fps:视频帧率
- frameSize:视频分辨率
- isColor:如果该位值为Ture,解码器会进行颜色框架的解码,否则会使用灰度进行颜色架构(该功能仅支持在Windows系统中使用)
2. 多帧图像生成视频流
#!/usr/bin/python3
#!--*-- coding: utf-8 --*--
import os
import cv2
def main():
imgs_path = "/path/to/images/"
img_names = os.listdir(imgs_path)
fps = 30 # 视频帧率
size = (640, 480) # 需要转为视频的图片的尺寸
video = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
for idx in range(len(image_names)):
img_file = os.path.join(imgs_path, img_names[idx])
print(img_file)
img = cv2.imread(img_file)
video.write(img)
video.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
3. ffmpeg 视频流转 GIF 动图
ffmpeg -ss 2 -t 10 -i output.avi -s 320x240 -r 15 output.gif
- -ss 2 表示从第 2 秒开始;
- -t 10 表示往后截取 10 秒;
- -i 表示输入视频;
- -s 表示分辨率;
- -r 表示视频帧率