I am writing a python/django application and it needs to do image manipulation and then combine the images into a video (each image is a frame). Image manipulation is easy.
First install ffmpeg using the following command: sudo apt install ffmpeg
import os
os.system("ffmpeg -f image2 -r 1/5 -i ./images/swissGenevaLake%01d.jpg -vcodec mpeg4 -y ./videos/swissGenevaLake.mp4")
Details:
The aforementioned code creates a video from three images file, stored in the images folder. Each image plays for 5 seconds in the video (because of the argument: -r 1/5). The three files names are: "swissGenevaLake1.jpg", "swissGenevaLake2.jpg" and "swissGenevaLake3.jpg" in images folder.
Hope this helps.
If u have a folder of images to be framed as video. You can tune the parameters and arrange the frames in sorted manner.
import cv2
import os
from tqdm import tqdm
import glob
#TODO
image_folder = '<Enter your target frames folder here>/*'
video_name = 'Dir to store the video'#save as .avi
#is changeable but maintain same h&w over all frames
width=640
height=400
#this fourcc best compatible for avi
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
video=cv2.VideoWriter(video_name,fourcc, 2.0, (width,height))
for i in tqdm((sorted(glob.glob(image_folder),key=os.path.getmtime))):
x=cv2.imread(i)
video.write(x)
cv2.destroyAllWindows()
video.release()
Use OpenCV and python binding. There is cv.WriteFrame
function. Similar question and answer
You could use Popen just to run the ffmpeg in a subprocess.