@@ -0,0 +1,50 @@
#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" )