So, you can use ffmpeg to do this. This is how to make a video to have a 10 speed frame rate, woithout losing sync with the audio:
ffmpeg -i input.mp4 -filter:v fps=fps=10 output.mp4
It makes an mp4 to be very light.
A script to automate stuff
import os from glob import glob print("go") mp4 = [(n, f) for n, f in enumerate(glob("*.mp4"))] print(mp4) command = os.system("ffmpeg -i {} -filter:v fps=fps=10 {}.mp4".format(mp4[int(input("input:"))][1], input("output: ")))
Graphic user interface for video frame compressor
import os from glob import glob from moviepy.editor import VideoFileClip # print("go") # mp4 = [(n, f) for n, f in enumerate(glob("*.mp4"))] # print(mp4) # command = os.system("ffmpeg -i {} -filter:v fps=fps=10 {}.mp4".format(mp4[int(input("input:"))][1], input("output: "))) import tkinter as tk from glob import glob def launch(movie): command = os.system("ffmpeg -i {} -filter:v fps=fps=10 output.mp4".format(movie)) info(movie) def info(movie): clip = VideoFileClip(movie) print(round(clip.duration / 60, 2)) def startfile(): os.startfile(ls.get(ls.curselection())) info(ls.get(ls.curselection())) # launch("00.mp4") root = tk.Tk() root.geometry("400x300") root.title("Double click to start") x = tk.StringVar(value=[m for m in glob("*.mp4")]) ls = tk.Listbox(root, listvariable=x) ls.pack(fill="both", expand=1) ls.bind("<Double-Button>", lambda x: launch(ls.get(ls.curselection()[0]))) button = tk.Button(root, text="Play movie", command=startfile) button.pack() root.mainloop() # start = input("number movie input: ") # start = mp4[int(start)] # output = input("NAME movie output: ") + ".mp4" # os.system(command.format(start, output))
Coming soon new version
I will make a newer version with also a way to change the frame rate and the name of the output file in the GUI. If you want me to do it faster, subscribe to my youtube channel.
This will be the new GUI.
Twitter: @pythonprogrammi - python_pygame