در این مقاله خواهیم دید که چگونه می توانیم برشی از یک فایل ویدیویی را با استفاده از کتابخانه MoviePy بدست آوریم. MoviePy یک ماژول پایتون برای ویرایش ویدیو است که میتواند برای عملیاتهای اساسی روی ویدیوها و همچنین GIF استفاده شود.
کلاس اصلی که برای بارگذاری اولیه فایل ویدیویی استفاده می شود، کلاس VideoFileClip است.
from moviepy.editor import *
#ساخت یک نمونه از کلاس و باز کردن فایل ویدیویی مورد نظر
clip = VideoFileClip("input.mp4")
یک نمونه از کلاس VideoFileClip شامل فایل input.mp4 ایجاد می شود و در متغیر clip ذخیره می شود. با اعمال متد های مختلف روی این متغیر، می توانیم فایل ویدیویی را دست کاری کنیم.
از متد های زیر در این مقاله استفاده می کنیم:
متد subclip(start, end) => برای برش بخشی از ویدیو به وسیله مشخص کردن ثانیه آغازین و پایانی
متد write_videofile(output.mp4) => برای ذخیره فایل نهایی در یک فایل جدید
مثال
برش فیلم از ثانیه 10 تا 20
from moviepy.editor import *
#ساخت یک نمونه از کلاس و باز کردن فایل ویدیویی مورد نظر
clip = VideoFileClip("input.mp4")
clip = clip.subclip(10, 20)
clip.write_videofile("output.mp4")
کد زیر یک کد تکمیلی تر است که با استفاده از آن می توانیم:
1- به صورت گسترده از این کد برای تمام فایل های ویدیویی خود استفاده کنیم
2- نقطه شروع و پایان را بر حسب دقیقه و ثانیه وارد کنیم
3- نام گذاری فایل خروجی را براساس نام فایل ورودی و ثانیه های جدا شده انجام دهیم.
مثال:
می خواهیم فایل summer_class.mp4 در پوشه d:/videos را بارگذاری کرده و از زمان 32:20 تا 34:56 را برش دهیم. سپس آن را با نام summer_class 32-20 to 34-56.mp4
در پوشه d:/video_cuts ذخیره کنیم.
from moviepy.editor import *
import os
file_address = "d:/videos/summer_class.mp4"
cut_directory = "d:/videos_cuts/"
basename = os.path.basename(file_address)
filename_without_ext = os.path.splitext(basename)[0]
ext = os.path.splitext(basename)[1]
#زمان شروع
start_min = 32 #دقیقه
start_sec = 20 #ثانیه
#زمان پایان
end_min = 34 #دقیقه
end_sec = 56 #ثانیه
start = (start_min * 60) + start_sec
end = (end_min * 60) + end_sec
# بارگذاری ویدیو
clip = VideoFileClip(file_address)
#برش ویدیو
clip = clip.subclip(start, end)
#ذخیره ویدیو
clip.write_videofile(cut_directory + filename_without_ext + " "+str(start_min) + "-" + str(start_sec) + " to "+str(end_min) + "-"+str(end_sec) + ext )
دیدگاهها