Video processing with Moviepy
MoviePy is a library optimized for video processing using python. With one line of code, you can quickly and intuitively compose video and audio, create animations, and create GIF files.
In what cases should I use it?
When processing for multiple videos
When combining multiple videos in a complex way
When you want to add a video effect (without another video editor)
When you want to make a GIF using multiple images
In what cases should it not be used?
When used for frame-by-frame video analysis -> there are good libraries like OpenCV
When you simply want to split a video file into images -> There is a good library such as OpenCV
MoviePy Features
Simple and intuitive
Flexible
Protable
Compatibility with numpy
On the downside, it is not suitable for working with stream video. Also, it is not suitable for a large number of videos (more than 100).
MoviPy reads and writes video and audio using ffmpeg. The read information can be edited using libraries such as numpy and scipy.
main function
The basic unit is called clips, and it is largely composed of AudioClips, VideoClips, AudioFileClip, and VideoFileClip classes.
However, AudioFileclip and VideoFileClip are mainly used.
VideoClips
VideoClip is the default Class. However, some of the more user-friendly classes are VideoFileClip and ImageClip.
ImageClip
This class displays a given image on the screen for a set period of time. Or, it makes it possible to combine the given images with the VideoFileClip class.
# Insert one image, and set how many seconds to display the image through set_duration.
# A video displaying one image for a specified time is created.
vid= ImageClip(vid_frame).set_duration(1)
This is useful when combining multiple images to create a video.
VideoFileClip
It is a more user-friendly class than the VideoClips class, and most of the example code uses the VideoFileClip class.
AudioFileclip
This is a class that extracts audio from an audio file or video file.
from movipy.editor import *
videoclip = VideoFileClip("myvideo.mp4")
audioclip = videoclip.audio
video frame extraction
Using the built-in movipy function, you can extract a frame of a specific second as a numpy array.
# Extract the frame of a specific time period using the get frame function
img = vid_clip.get_frame(10)
Concatenating clips
After reading multiple video clips, use the concatenate_videoclips function to combine the 3 videos.
from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("myvideo.mp4")
# Using subclip, only the frames within the set time and seconds are loaded.
clip2 = VideoFileClip("myvideo2.mp4").subclip(50,60)
clip3 = VideoFileClip("myvideo3.mp4")
# Concatenate the video using the concat function.
final_clip = concatenate_videoclips([clip1,clip2,clip3])
final_clip.write_videofile("my_concatenation.mp4")
Compositing different video and audio
If you want to add other audio to the video, you can synthesize it using the code below.
from moviepy.editor import *
videoclip = VideoFileClip("myvideo.mp4").subclip(1, 10)
audioclip = AudioFileClip("audioname.mp3").subclip(1, 10)
videoclip.audio = audioclip
videoclip.write_videofile("new video.mp4")
Memory management
If you are processing multiple videos, you may run out of RAM memory space. Here is the code to free the memory in this case.
# Close the video using the close function.
video_clip.close()
This code prevents overflow when merging multiple video clips.
parent_clip = VideoFileClip("./parent_video.mp4")
clip_list = []
for part in time_parts:
time_start = part[0]
time_end = part[1]
clip_list.append(
parent_clip.subclip(time_start, time_end)
)
concat_clip = concatenate_videoclips(clip_list)
Comments
Post a Comment