Reputation: 1013
I want to remove the first few seconds from a video that's about 25 minutes long. I found the moviepy
package, and tried writing this code:
from moviepy.editor import *
clip = VideoFileClip("video1.mp4").cutout(0, 7)
clip.write_videofile("test.mp4")
However, it's very slow even for a single video. Is there a faster way to do this in Python?
Upvotes: 71
Views: 115333
Reputation: 1179
The ffmpeg_extract_subclip
did not produce correct results for me for some videos. The following code from this link worked though.
# Import everything needed to edit video clips
from moviepy.editor import *
# loading video gfg
clip = VideoFileClip("geeks.mp4")
# getting only first 5 seconds
clip = clip.subclip(0, 5)
# showing clip
clip.ipython_display(width = 360)
Then you can save the clip as follows:
clip.write_videofile("clip.mp4")
Upvotes: 7
Reputation: 11324
If you are new to moviepy you should follow these steps.
pip install --trusted-host pypi.python.org moviepy
pip install imageio-ffmpeg
pip install --trusted-host pypi.python.org moviepy
python
import imageio
imageio.plugins.ffmpeg.download()
After these commands, you have the minimal software requirements.
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
# ffmpeg_extract_subclip("full.mp4", start_seconds, end_seconds, targetname="cut.mp4")
ffmpeg_extract_subclip("full.mp4", 60, 300, targetname="cut.mp4")
Upvotes: 20
Reputation: 3780
Try this and tell us if it is faster (if it can, it will extract the video directly using ffmpeg, without decoding and reencoding):
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("video1.mp4", start_time, end_time, targetname="test.mp4")
If that doesn't help, have a look at the code
Upvotes: 138
Reputation: 401
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("video1.mp4", t1, t2, targetname="test.mp4")
t1 and t2 in this code represent the start time and end time for trimming. Video before t1 and after t2 will be omitted.
Upvotes: 7