freerdp/server/proxy/session-capture/generate_video_from_frames.py

48 lines
1.3 KiB
Python

import os
import argparse
import time
import cv2
from os.path import join, getmtime
def get_image_size(path):
img = cv2.imread(path)
height, width, _ = img.shape
return (width, height)
def generate_video(output, frames, size, fps):
out = cv2.VideoWriter(
args.output, cv2.VideoWriter_fourcc(*'DIVX'), args.fps, size)
for frame in frames:
img = cv2.imread(frame)
out.write(img)
out.release()
def main(args):
# Load input frames, sorted by creation time.
files = [join(args.input, f) for f in os.listdir(
args.input) if os.path.isfile(join(args.input, f))]
files.sort(key=lambda x: getmtime(x))
print('Generating video...')
print(f'Frame count: {len(files)}')
start = time.time()
generate_video(args.output, files, get_image_size(files[0]), args.fps)
print(
f'Output file {args.output} generated in {time.time() - start} seconds.')
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-i", "--input", help="path to a directory containing all frames")
parser.add_argument(
"-o", "--output", help="avi output file path", default="video.avi")
parser.add_argument("-f", "--fps", type=int, help="frames per second", default=8)
args = parser.parse_args()
main(args)