CodeGym /Kurslar /Python SELF AZ /Səhnələr arasında hamar keçidlər və kadr dəyişmə effektlə...

Səhnələr arasında hamar keçidlər və kadr dəyişmə effektlərinin yaradılması

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Video keçidlər

Bu gün biz video montajın həqiqətən sehrinə çevrildiyi bir sahəyə toxunacağıq — hamar keçidlərin yaradılması. Bu tango rəqsini öyrənmək kimidir: yalnız addımlar atmaq deyil, həm də onları zəriflik və ritmlə atmaq vacibdir.

Təsəvvür edin ki, siz pişiyinizin dünyanı fəth etməsi (və ya sadəcə şkafa çıxması) haqqında epik bir film çəkirsiniz. Siz istəyirsiniz ki, tamaşaçılar onun divanlara ustalıqla tullanmasından qürurla kitab şkafının zirvəsində poz verməsinə keçidlər zamanı hamar şəkildə hərəkət etsin. Məhz burada keçidlər səhnə dəyişikliklərini daha harmonik və peşəkar etmək üçün arenaya çıxır.

Niyə keçidlər vacibdir?

  • Kadr dəyişməsinin sərtliyini yumşaltmaq üçün.
  • Vacib anlara diqqət çəkmək üçün.
  • Bədii effektlər əlavə etmək üçün.

Keçidlərin yaradılması üçün əsas prinsiplər

MoviePy-də səhnələr arasında keçidlər yaratmaq üçün CompositeVideoClip sinfi və daxili effektlərdən istifadə olunur. Əsas ideya – şəffaflıq, hərəkət və ya yerdəyişməni idarə edən effekt vasitəsilə bir video klipi digərinin üzərinə qoymaqdır.

2. Səssiz keçid effekti (Crossfade)

Səssiz keçid (və ya crossfade) — bu, birinci səhnənin yavaş-yavaş yox olduğu və ikinci səhnənin tədricən göründüyü effektdir. Bu tip keçidi crossfadein()crossfadeout() metodlarından istifadə edərək həyata keçirə bilərsiniz.

İki klip arasında səssiz keçid

Python
from moviepy.editor import VideoFileClip, concatenate_videoclips

# İki video klipin yüklənməsi
clip1 = VideoFileClip("scene1.mp4").subclip(0, 5)
clip2 = VideoFileClip("scene2.mp4").subclip(0, 5)

# Səssiz keçidin tənzimlənməsi
clip1 = clip1.crossfadeout(1)  # 1 saniyəlik klip 1 üçün yavaş-yavaş yox olma
clip2 = clip2.crossfadein(1)   # 1 saniyəlik klip 2 üçün yavaş-yavaş görünmə

# Keçid ilə kliplərin birləşdirilməsi
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("crossfade_transition.mp4")

Bu nümunədə:

  • crossfadeout(1) birinci klipi 1 saniyə ərzində tədricən daha az görünən edir.
  • crossfadein(1) ikinci klipi tədricən görünən edir.
  • concatenate_videoclips iki klipi səssiz keçid ilə birləşdirir.

3. Qaralma ilə keçid (Fade to Black)

Qaralma (yaxud fade to black) — bu effekt ilk klipin mərhələli şəkildə qara ekrana qədər sönməsi və sonra növbəti klipin həmin qaralmanın içindən görünməsi ilə yaranır. Bu keçid növü bir səhnənin sona çatdığını və digərinin başladığını göstərir.

Nümunə: Kliplər arasında qaralma ilə keçid

Python
# İki klipi yükləmək
clip1 = VideoFileClip("scene1.mp4").subclip(0, 5)
clip2 = VideoFileClip("scene2.mp4").subclip(0, 5)

# Qaralma tənzimləməsi
clip1 = clip1.fadeout(1)  # 1-ci klipin mərhələli şəkildə qaralması
clip2 = clip2.fadein(1)   # 2-ci klipin qara ekrandan görünməsi

# Qaralma ilə kliplərin birləşdirilməsi
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_to_black_transition.mp4")

Burada:

  • fadeout(1) birinci klipin mərhələli şəkildə sönməsini yaradır.
  • fadein(1) ikinci klipin qara ekrandan görünməsini təmin edir.

4. Sürüşmə Keçidi (Slide Transition)

Sürüşmə keçidi (yəni slide transition), bir klipin ekranı "tərk etməsinə" və digərinin onun yerini tutmasına imkan verir. MoviePy klipin hərəkətini tənzimləmək üçün set_position() metodundan istifadə etməyə imkan verir.

Misal: Kliplər arasında sürüşmə keçidi

Python
from moviepy.editor import CompositeVideoClip

# Hərəkət edəcək iki klip
clip1 = VideoFileClip("scene1.mp4").subclip(0, 5)
clip2 = VideoFileClip("scene2.mp4").subclip(0, 5)

# Sürüşmə keçidinin qurulması
transition_duration = 1

# Kliplərin hərəkətinin təyin edilməsi
clip1 = clip1.set_position(lambda t: ('center', -clip1.h * t / transition_duration))
clip2 = clip2.set_position(lambda t: ('center', clip2.h * (1 - t / transition_duration)))

# Kompozisiyanın yaradılması
final_clip = CompositeVideoClip([clip1.set_start(0), clip2.set_start(clip1.duration - transition_duration)])
final_clip = final_clip.set_duration(clip1.duration + clip2.duration - transition_duration)

# Sürüşmə keçidi ilə videonun ixrac edilməsi
final_clip.write_videofile("slide_transition.mp4")

Burada:

  • set_position(), bir klipin yuxarıya, digərinin isə aşağıya doğru sürüşməsini təyin edir.

5. Bulanıq keçid (Blur Transition)

Bulanıq keçid kliplər arasında hamar keçid üçün istifadə edilir, burada birinci klip tədricən bulanıqlaşır, ikinci klip isə "bulanıq vəziyyətdən çıxaraq" görünür. MoviePy-də bu təsir üçün blur bulanıqlıq effekti istifadə olunur.

Nümunə: Kliplər arasında bulanıq keçid

Python
from moviepy.video.fx.all import blur

# Birinci klipdə bulanıqlığın tətbiqi
blurred_clip1 = clip1.fx(blur, 2)  # Bulanıqlığın tətbiqi

# Bulanıq keçidin tənzimlənməsi
blurred_clip1 = blurred_clip1.crossfadeout(1)
clip2 = clip2.crossfadein(1)

# Kliplərin birləşdirilməsi
final_clip = concatenate_videoclips([blurred_clip1, clip2], method="compose")
final_clip.write_videofile("blur_transition.mp4")

Burada:

  • blur(video, 2) birinci klipdə bulanıqlıq yaradır.
  • crossfadein()crossfadeout() kliplər arasında hamar keçid əlavə edir.

6. Miqyasın artırılması effekti ilə keçid (Zoom Transition)

Miqyasın artırılması keçidi (və ya zoom transition) kadrın yaxınlaşdırılması və ya uzaqlaşdırılması effektini yaradır. Bu effekt maraqlı keçidlər yaratmaq və ayrı-ayrı səhnələri vurğulamaq üçün faydalıdır.

Miqyasın artırılması effekti ilə keçid

Python
from moviepy.video.fx.all import resize

# İlk klipin miqyasının artırılması
zoomed_clip1 = clip1.resize(lambda t: 1 + 0.2 * t)  # Hər saniyədə 20% miqyasın artırılması

# Hamar keçidin tənzimlənməsi
zoomed_clip1 = zoomed_clip1.crossfadeout(1)
clip2 = clip2.crossfadein(1)

# Miqyasın artırılması ilə kliplərin birləşdirilməsi
final_clip = concatenate_videoclips([zoomed_clip1, clip2], method="compose")
final_clip.write_videofile("zoom_transition.mp4")

Burada:

  • resize(lambda t: 1 + 0.2 * t) hər saniyədə ilk klipin miqyasını 20% artıraraq yaxınlaşdırma effekti yaradır.

7. Rəngə keçir (Fade to Color)

Rəngə keçid — bu effekt bir klip rəngini, məsələn, ağ rəngə dəyişərək digər klipin görünməsini təmin edir. Bu, səhnələrin daha yumşaq dəyişməsinə imkan verir.

Ağa keçid

Python
from moviepy.editor import ColorClip

# Keçid üçün ağ fonun yaradılması
fade_color = ColorClip(size=clip1.size, color=(255, 255, 255), duration=1)

# İlk klipin sönməsi üçün tənzimləmə
clip1 = clip1.crossfadeout(1)

# İkinci klipin görünməsi
clip2 = clip2.crossfadein(1)

# Kliplərin ağ fon vasitəsi ilə birləşdirilməsi
final_clip = concatenate_videoclips([clip1, fade_color, clip2], method="compose")
final_clip.write_videofile("fade_to_white_transition.mp4")

Burada:

  • ColorClip(size=clip1.size, color=(255, 255, 255), duration=1) keçid üçün vasitəçi kimi xidmət edən, birrəngli klip yaradır.
  • Əvvəlcə clip1 ağ rəngə keçir, daha sonra ikinci klip görünür.

8. Geometrik maska istifadə edərək keçid (Shape Transition)

Geometrik maska istifadə edərək keçid — bu effekt birinci klipin dairə, kvadrat və ya başqa bir geometrik forma şəklində yoxa çıxıb, ikinci klipin eyni formadan göründüyü bir keçiddir. Bu effekt maraqlı vizual vurğu əlavə edir.

MoviePy belə maskaları birbaşa dəstəkləmir, amma onları Pillow (PIL) kitabxanasından istifadə edərək maska animasiyası yaratmaqla tədricən dəyişən forma tətbiq edərək yarada bilərsiniz.

Dairəvi maska keçidi

Python
from moviepy.editor import VideoFileClip, CompositeVideoClip
from PIL import Image, ImageDraw
import numpy as np

def create_circle_mask(size, radius):
    # Tünd və ağ dairə maskası yaratmaq
    mask = Image.new("L", size, 0)
    draw = ImageDraw.Draw(mask)
    draw.ellipse((size[0]//2 - radius, size[1]//2 - radius,
                  size[0]//2 + radius, size[1]//2 + radius), fill=255)
    return np.array(mask)

# Klipləri yükləyirik
clip1 = VideoFileClip("scene1.mp4").subclip(0, 5)
clip2 = VideoFileClip("scene2.mp4").subclip(0, 5)

# Dairəvi maska ilə keçidi tənzimləyirik
mask_clips = []
for r in range(0, max(clip1.size)//2, 10):
    mask = create_circle_mask(clip1.size, r)
    mask_clip = CompositeVideoClip([clip1.set_mask(mask)], size=clip1.size).set_duration(0.05)
    mask_clips.append(mask_clip)

# Keçidli yekun klipi yaradırıq
transition_clip = concatenate_videoclips(mask_clips + [clip2])
transition_clip.write_videofile("circular_mask_transition.mp4")

Burada:

  • create_circle_mask() verilən radiusla dairə şəklində tünd və ağ maska yaradır.
  • Biz radiusu çərçivələr arasında artırırıq ki, dairə içində klip yoxa çıxsın.

9. Hərəkət bulanıqlığı ilə keçid (Motion Blur)

Hərəkət bulanıqlığı ilə keçid klipə hərəkət illüziyası vermək üçün istifadə olunur. Bu keçid horizontal və ya vertikal yerdəyişmənin bulanıqlıq effekti ilə birləşdirilməsi ilə yaradılır.

Hərəkət bulanıqlığı ilə keçid

Python
from moviepy.video.fx.all import blur

# Hərəkət bulanıqlığının yaradılması
blurred_clip1 = clip1.fx(blur, 1).set_position(lambda t: ('center', int(500 - 100 * t)))
blurred_clip2 = clip2.fx(blur, 1).set_position(lambda t: ('center', int(-500 + 100 * t)))

# Hərəkət bulanıqlığı effekti ilə kliplərin birləşdirilməsi
transition_clip = CompositeVideoClip([blurred_clip1.set_start(0), blurred_clip2.set_start(blurred_clip1.duration - 1)])
transition_clip.write_videofile("motion_blur_transition.mp4")

Bu nümunədə:

  • Klip yuxarı doğru hərəkət edir və bulanıq olunur, hərəkət illüziyası yaradır.
  • blur(video, 1) kadrları bulanıq edir, bu da kliplər arasında kəskin keçidi gizlətməyə kömək edir.

10. Fırlanma ilə keçid (Spin Transition)

Fırlanma — dinamik bir keçiddir ki, burada ilk klip fırlanmağa başlayaraq tədricən yox olur və ikinci klip fırlanaraq görünür.

Nümunə: Fırlanma ilə keçid

Python
from moviepy.video.fx.all import rotate

# İlk və ikinci klipin fırlanması
rotated_clip1 = clip1.rotate(lambda t: 30 * t)
rotated_clip2 = clip2.rotate(lambda t: -30 * t)

# Keçidin tənzimlənməsi
rotated_clip1 = rotated_clip1.crossfadeout(1)
rotated_clip2 = rotated_clip2.crossfadein(1)

# Fırlanma keçidi ilə birləşdirmə
final_clip = concatenate_videoclips([rotated_clip1, rotated_clip2], method="compose")
final_clip.write_videofile("spin_transition.mp4")

Burada:

  • rotate(lambda t: 30 * t) klipə tədricən fırlanma əlavə edir. İlk klip bir istiqamətdə fırlanır, ikinci isə əks istiqamətdə fırlanır.

11. Pikselli keçid effekti (Pixelate Transition)

Pikselli keçid effekti - bu, görüntünün tədricən piksellərə parçalanması və sonra hamar şəkildə normal vəziyyətə qayıtması təsiridir. Bu keçid rəqəmsal təhrif effekti yaradır.

Nümunə: Pikselli keçid effekti

Python
from moviepy.video.fx.all import resize

# İlk klipin pikselləşdirilməsi
pixelated_clip1 = clip1.resize(0.1).resize(10)

# Hamar solma
pixelated_clip1 = pixelated_clip1.crossfadeout(1)
clip2 = clip2.crossfadein(1)

# Pikselli effektlə kliplərin birləşdirilməsi
final_clip = concatenate_videoclips([pixelated_clip1, clip2], method="compose")
final_clip.write_videofile("pixelate_transition.mp4")

Burada:

  • resize(0.1).resize(10) görüntünü kiçildir və sonra böyüdür, pikselləşdirmə effekti yaradır.

12. Öz səhnənizin dizaynı

Praktika vaxtı! Bir neçə öz video fayllarınızı əlavə edin və müxtəlif keçid kombinasiyaları ilə eksperiment aparın. Məsələn, keçid zamanı atmosferin gücləndirilməsi üçün musiqi və ya səs effektlərindən istifadə etməyə nə deyirsiniz? Məsələn, keçid anında kiçik bir "whoosh" səsi əlavə edərək əlavə effekt yarada bilərsiniz.

Unikal keçidlərin yaradılması

Unikal keçidlərin yaradılması öz reseptinizə görə yemək bişirmək kimidir. Siz müxtəlif texnikaları və effektləri birləşdirərək tamamilə yeni və unikal bir şey yarada bilərsiniz. slide_in, slide_out funksiyaları və ya hətta daha mürəkkəb effektlər, məsələn mask, ilə unikal vizual dəyişikliklər yaratmağı sınaqdan keçirin.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION