-
-
Save ionvision/0169f7aefa9ba4d0206bf5db3cd761d8 to your computer and use it in GitHub Desktop.
Write Video from Images using MoviePy and OpenCV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pip3 install -U imageio-ffmpeg # It contains VideoFileClip module and must be installed from shell | |
#from moviepy.editor import VideoFileClip,ImageSequenceClip # Must be added in the beginning with the rest of imported modules | |
# Define Input and Output folder (USER must Edit) | |
video_name = "sample.mp4" | |
video_name_part = video_name.split(".") # sample & mp4 has been split | |
input_video_path = os.path.join("Input_Video", video_name) | |
output_images_path = os.path.join("Output_Video", "Processed_Images") # This is a temporary folder to hold processed images | |
output_video_path = os.path.join("Output_Video", video_name_part[0] + "_output." + video_name_part[1]) | |
# Load video | |
cap = cv2.VideoCapture(input_video_path) | |
# Get General Info | |
fps = cap.get(cv2.CAP_PROP_FPS) # OpenCV2 version 2 used "CV_CAP_PROP_FPS" | |
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) | |
duration = int(frame_count/fps) | |
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # float | |
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # float | |
# Apply some processing to each image and then save them | |
for frame_num in range(frame_count): | |
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num) | |
_,frame=cap.read() | |
#Apply some processing here and then ... | |
image_path = os.path.join(output_images_path, "Frame_" + str(frame_num)+".jpg") | |
cv2.imwrite(image_path, frame) | |
# Order images according to frame number and file type in a list | |
IMAGE_EXT = ['jpeg', 'gif', 'png', 'jpg'] | |
image_list = sorted(os.listdir(output_images_path), key=lambda a: int((a.split(".")[0]).split("_")[1])) # Order accord. to frame num | |
image_list = [os.path.join(output_images_path, image_file) for image_file in image_list] # Add directory path | |
image_list = [image_file for image_file in image_list if os.path.splitext(image_file)[1][1:].lower() in IMAGE_EXT] # Order accord. to file type | |
# Make video | |
clip = ImageSequenceClip(image_list, fps=fps) | |
clip.write_videofile(output_video_path) | |
# (OPTIONAL) Delete folder of Procesed Images | |
try: | |
shutil.rmtree(ouput_images_path) | |
except FileNotFoundError: | |
print ("Folder has been deleted already and Video is ready") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment