参考原文: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 表示视频帧率
Last modification:October 20th, 2020 at 05:57 pm