Cutting out a portion of video - python

PythonVideoMoviepy

Python Problem Overview


I have videos of length approximately 25 min each and I wish to cut a few seconds from the start using python.

Searching about it, I stumbled upon the moviepy package for python. The problem is, it takes up a lot of time even for a single video. Following is the code snippet I use to cut 7 seconds from the start of a single video. The write process consumes a lot of time. Is there a better way to cut the videos using python?

from moviepy.editor import *
clip = VideoFileClip("video1.mp4").cutout(0, 7)
clip.write_videofile("test.mp4")

Please let me know if I have missed out any details.

Any help is appreciated. Thanks!

Python Solutions


Solution 1 - Python

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

Solution 2 - Python

If you are new to moviepy you should follow these steps.

Installation :

pip install --trusted-host pypi.python.org moviepy
pip install imageio-ffmpeg

Installation (in your virtualenv) version for old systems :

pip install --trusted-host pypi.python.org moviepy
python
import imageio
imageio.plugins.ffmpeg.download()

After these commands, you have the minimal software requirements.

Usage

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")

Solution 3 - Python

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.

Solution 4 - Python

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")

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPranav AroraView Question on Stackoverflow
Solution 1 - PythonZulkoView Answer on Stackoverflow
Solution 2 - PythonSamuel DauzonView Answer on Stackoverflow
Solution 3 - PythonkibitzforuView Answer on Stackoverflow
Solution 4 - PythonMRMView Answer on Stackoverflow