1. Bu nəyə görə lazımdır?
Kadr çıxarmaq üçün virtual alətimizi işə salmazdan əvvəl, gəlin onun niyə vacib olduğunu müzakirə edək. Ayrı-ayrı kadrların çıxarılması və işlənməsi effektlərin yaradılması, zamanla dəyişikliklərin analizi üçün, həmçinin maşın öyrənməsi üçün şəkillərin hazırlanması üçün faydalı ola bilər. Bu həm də kadrları slayd-şoular və ya animasiyalar yaratmaq üçün istifadə etməyin əla üsuludur.
Kadrlarla işin əsas mərhələləri
- Videodan kadrların çıxarılması.
- Çıxarılan kadrların işlənməsi.
- İşlənmiş kadrların yadda saxlanması.
İndi nəyi əldə etmək istədiyimizi bilirik, keçək praktikaya.
2 Videodan Kadrların Çıxarılması
Ən əsasdan başlayaq — kadrların çıxarılması. MoviePy ilə videonun ayrı-ayrı kadrlarına asanlıqla daxil olmaq mümkündür, VideoFileClip
sinfinin metodlarından istifadə edərək. Hər bir kadr massiv formasında təqdim olunur (piksellərin çoxölçülü massivi), hansını ki MoviePy və ya digər kitabxanalar, məsələn, NumPy və ya Pillow istifadə edərək işləyə bilərsiniz.
Videonun açılması və ayrı-ayrı kadrların çıxarılması
from moviepy.editor import VideoFileClip
# Video faylını aç
video_clip = VideoFileClip("sample_video.mp4")
# 5-ci saniyədəki kadrı çıxar
frame = video_clip.get_frame(5)
# Kadr haqqında məlumatı çap et
print("Kadr məlumat növü:", type(frame))
print("Kadr ölçüləri:", frame.shape)
Bu nümunədə:
VideoFileClip("sample_video.mp4")
video faylını açır vəvideo_clip
obyektini yaradır.video_clip.get_frame(5)
5-ci saniyədəki kadrı çıxarır.frame.shape
kadrın ölçülərini göstərir (hündürlük, en və rəng kanallarının sayı).
3. Kadrların şəkil kimi saxlanması
Kadrı çıxardıqdan sonra, onu şəkil kimi saxlamaq olar. Bunun üçün şəkillərlə işləmək üçün Pillow (PIL) kitabxanasından istifadə etmək olar.
Pillow quraşdırılması
Əgər Pillow quraşdırılmayıbsa, onu pip
istifadə edərək quraşdıra bilərsiniz:
pip install pillow
Kadrı şəkil kimi saxlamaq
from PIL import Image
from moviepy.editor import VideoFileClip
# Videonu açmaq və 5-ci saniyədə kadrı çıxarmaq
video_clip = VideoFileClip("sample_video.mp4")
frame = video_clip.get_frame(5)
# Kadrı şəkilə çevirmək və saxlamaq
image = Image.fromarray(frame)
image.save("frame_at_5_seconds.png")
Burada:
Image.fromarray(frame)
piksellərdən ibarət massivi şəkil obyektinə çevirir.image.save("frame_at_5_seconds.png")
kadrı PNG-faylı kimi saxlayır.
4. Videodan kadrlar seriyasının çıxarılması
Əgər videodan müəyyən bir qaydaya əsaslanaraq bir neçə kadr çıxarmaq lazımdırsa (məsələn, hər kadrı, hər saniyəni və ya verilmiş intervalda), lazım olan kadrları çıxarmaq üçün dövrədən istifadə etmək olar. Bu, analiz etmək və ya videodan thumbnail-lər yaratmaq lazım olduqda faydalıdır.
Nümunə: Hər saniyədə kadrların çıxarılması və saxlanması
from PIL import Image
from moviepy.editor import VideoFileClip
# Video faylını açırıq
video_clip = VideoFileClip("sample_video.mp4")
# Videonun müddəti saniyələrlə
duration = int(video_clip.duration)
# Hər saniyədə kadrların çıxarılması və saxlanması
for i in range(duration):
frame = video_clip.get_frame(i)
image = Image.fromarray(frame)
image.save(f"frame_{i}_second.png")
Burada:
for i in range(duration)
videonun sonuna qədər hər saniyəni iterasiya edir.- Hər saniyədə kadr çıxarılır, şəkilə çevrilir və unikal adla saxlanılır (məsələn,
frame_1_second.png
,frame_2_second.png
).
5. Kadrlərin ölçülərini dəyişmək və saxlamazdan əvvəl
MoviePy kadrlərin ölçülərini dəyişməyə imkan verir. Bu, miniatürlər və ya kiçik ölçülü kadr şəkilləri yaratmaq lazım olduqda faydalıdır.
Kadr ölçüsünü dəyişmək və saxlanılması
from PIL import Image
from moviepy.editor import VideoFileClip
# Video faylını açma
video_clip = VideoFileClip("sample_video.mp4")
# 10-cu saniyədəki kadrı çıxarma
frame = video_clip.get_frame(10)
# Kadri şəkilə çevirir
image = Image.fromarray(frame)
# Kadrlərin ölçüsünü 200x200 piksellərə dəyişir
image_resized = image.resize((200, 200))
# Dəyişdirilmiş şəkli saxlayır
image_resized.save("resized_frame_at_10_seconds.png")
6. Müəyyən tezliklə kadrların çıxarılması
Əgər sənə müəyyən tezliklə (məsələn, hər 10-cu kadr, hərəkəti təhlil etmək üçün) kadrları çıxarmaq lazımdırsa, fps
parametrindən istifadə edə bilərsən.
Nümunə: Hər 10-cu kadrın çıxarılması
from PIL import Image
from moviepy.editor import VideoFileClip
# Video faylını açmaq
video_clip = VideoFileClip("sample_video.mp4")
# Kadr seçmə tezliyini tənzimləmək (məsələn, hər 10-cu kadr)
frame_interval = 10
# Hər 10-cu kadrı çıxarmaq və saxlamaq
for i, frame in enumerate(video_clip.iter_frames()):
if i % frame_interval == 0:
image = Image.fromarray(frame)
image.save(f"frame_{i}.png")
Burada:
video_clip.iter_frames()
videodakı bütün kadrları tək-tək keçməyə imkan verir.if i % frame_interval == 0
yalnız hər 10-cu kadrı çıxarır.
7. Kadrların İşlənməsi
Kadr çıxarmaq — bu işin yalnız yarısıdır, ola bilər ki, görüntüyə bir az sehr əlavə etmək istəyəsiniz. Bunun üçün Pillow kitabxanasından istifadə edəcəyik.
# Şəkli ağ-qara çevirmək
image_bw = image.convert("L")
image_bw.save("mid_frame_bw.png")
Burada biz çıxarılmış kadrı götürüb, onu ağ-qara şəkilə çevirdik. Sadə, lakin çox təsirli dəyişikliklər kadrlarınızın daha ifadəli görünməsini təmin edə bilər.
8. Problemlər və həllər
Video kadrların işlənməsində bəzi çətinliklər ola bilər. Fayllara gedən sistem yolunun düzgün olduğuna əmin olun, yoxsa kodunuz tez bir zamanda "iynəni kod tayasında axtarmağa" dönə bilər. Həmçinin bütün lazımi kitabxanaların və paketlərin mövcudluğunu yoxlayın, xüsusilə Python-u yenilədikdən və ya sisteminizi təkrar başladıqdan sonra. Bəzən unudulmuş asılılıqlar birdən "səhv partiləri" yarada bilər.
Kadrların çıxarılması və işlənməsi prosesi müxtəlif sahələrdə çox faydalı ola bilər. Məsələn, tədris materiallarının hazırlanmasında, treninqlər üçün idman videolarının analizində, ya da yaradıcı yanaşma ilə montaj və video işlənməsində.
Bu texnikaları öyrəndikdən sonra istənilən videonu asanlıqla ayrı-ayrı kadrlara bölüb istədiyinizi edə biləcəksiniz! Darıxmaqdan və monotonluqdan uzaq olun — yeni instrumentləriniz sizin üçün imkanlarla dolu bir dünya açır. Və unutmayın, MoviePy ilə nəsə həqiqətən möcüzəvi bir şey yaratmaq üçün super güclərə ehtiyac yoxdur.
GO TO FULL VERSION