1. MoviePy mətn dünyasına giriş
Beləliklə, videoya mətn əlavə etmə sehrli dünyasına baş vurmağa hazırıq. Təsəvvür edin ki, siz bir rejissorsunuz və qarşınızda yalnız obrazları danışmağa məcbur etmək yox, həm də ekranda görünən sözləri idarə etmək vəzifəsi durur. Bəli, bəli, bu subtitrlərin və titrlərin magiyasıdır!
Başlamazdan əvvəl bir sadə şeyi başa düşmək vacibdir: MoviePy — bu sadəcə videolarla işləmək üçün növbəti kitabxana deyil. Bu sizin şəxsi video-dizaynerinizdir, hansı ki, proyektinizə bir az cazibə və məlumatlılıq əlavə etməyə kömək edə bilər. Artıq videonun redaktə olunmasının əsaslarını öyrənmisiniz: kəsmək, yapışdırmaq, bir az effektlər — növbəti səviyyəyə keçidin vaxtıdır.
Nəyə görə mətn əlavə etməliyik?
Videodakı mətn əvəzolunmaz rol oynayır — bu həm məlumat xarakterli mesajlardır, həm də üslublu titrlər və əlbəttə ki, sizin işlərinizi gecə yarısı qonşular yatarkən izləyənlər üçün xilaskar subtitrlərdir. MoviePy bunu rahat və üslublu etmək üçün imkan verir.
2. Mətnlə iş
Gəlin sadə mətn elementlərindən başlayaq. Bunun üçün MoviePy sizə mətnləri kliplərinizə əlavə etməyə imkan verən TextClip
adlı əla bir funksiyanı təqdim edir.
Mətn klipinin yaradılması
Mətn klipinin əsas tənzimlənməsi təxminən belə görünür:
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Video faylını açırıq
video = VideoFileClip("sample_video.mp4")
# Mətn klipi yaradırıq
txt_clip = TextClip("Salam, dünya!", fontsize=70, color='white')
# Mətn klipinin müddətini təyin edirik
txt_clip = txt_clip.set_duration(video.duration)
# Mətnin mövqesini təyin edirik
txt_clip = txt_clip.set_position('bottom')
# Videonu mətnlə birləşdiririk
video_with_text = CompositeVideoClip([video, txt_clip])
# Nəticəni saxlayırıq
video_with_text.write_videofile("output_video_with_text.mp4", fps=24)
Şrift və rəng tənzimləmələri
Mətnin rəngini, şriftini və ölçüsünü asanlıqla tənzimləyə bilərsiniz. Yuxarıdakı nümunədə mətnin rəngi ağdır, lakin siz məsələn, başqa bir rəngi seçə bilərsiniz:
txt_clip = TextClip("Salam, dünya!", fontsize=70, font='Amiri-bold', color='yellow')
Eyni zamanda, şrifti dəyişə bilərsiniz, bunun üçün lazım olan şriftin sisteminizdə quraşdırılmış olduğundan əmin olun.
3. Mətni ekran üzərində mövqeləndirmək
Mətni mövqeləndirmək üçün set_position()
parametrindən istifadə etmək olar. Bu parametr həm mətn dəyərlərini (məsələn, 'center'
, 'bottom'
) həm də koordinatları qəbul edir.
Mətnin müxtəlif mövqelərdə yerləşdirilməsi
# Mətn yuxarı hissədə yerləşir
text_top = TextClip("Yuxarı mətn", fontsize=30, color='blue').set_position(('center', 'top')).set_duration(5)
# Mətn aşağı hissədə yerləşir
text_bottom = TextClip("Aşağı mətn", fontsize=30, color='green').set_position(('center', 'bottom')).set_duration(5)
# Mətn koordinatlar üzrə yerləşdirilib (x=100, y=100)
text_coords = TextClip("Koordinatlara görə mətn", fontsize=30, color='red').set_position((100, 100)).set_duration(5)
# Bütün mətnlərin video üzərinə yerləşdirilməsi
final_video = CompositeVideoClip([video, text_top, text_bottom, text_coords])
final_video.write_videofile("video_with_positioned_text.mp4")
Burada:
('center', 'top')
: Mətni mərkəzdə yuxarıda yerləşdirir.('center', 'bottom')
: Mətni mərkəzdə aşağıda yerləşdirir.(100, 100)
: Mətni konkret koordinatlar üzrə yerinə yetirir.
Mətni dinamik yeniləmə
Təkcə mətn əlavə etməklə kifayətlənməyək, onu daha canlı edək — məhz bu, videonu həqiqətən cəlbedici edir. Gəlin mətnə animasiya verək.
def move_text(t):
return 10, 100 * t # Mətnin zamanla aşağıya hərəkəti
txt_clip = txt_clip.set_pos(move_text).set_duration(3)
4. Subtitrlərlə iş
Subtitrlər müəyyən video anları ilə sinxronizasiya olunmuş mətndir. Biz onları fayllardan yükləyə və ya əl ilə yarada bilərik.
Subtitrlərin əl ilə əlavə olunması
Sadə bir nümunə ilə başlayaq, burada videoya subtitr əlavə edirik. Bunun üçün mətn klipi yaratmaq və onun ortaya çıxma vaxtını təyin etmək lazımdır:
# Subtitrləri yaradırıq
subtitles = [
{"text": "Salam, dünya!", "start": 0, "end": 2},
{"text": "Bu bir subtitrdır!", "start": 2.5, "end": 5}
]
# Videonu subtitrlərlə birləşdiririk
sub_clips = [TextClip(sub['text'], fontsize=50, color='white')
.set_position(('center', 'bottom'))
.set_start(sub['start'])
.set_duration(sub['end'] - sub['start'])
for sub in subtitles]
video_with_subtitles = CompositeVideoClip([video] + sub_clips)
video_with_subtitles.write_videofile("output_video_with_subtitles.mp4", fps=24)
Subtitrlərin fayldan yüklənməsi
Əgər sizin SRT formatında subtitr faylınız varsa, onları daha asan yükləyə bilərsiniz. MoviePy bu cür faylları yükləməyi dəstəkləyir, bu da prosesi sadələşdirir.
Subtitrlər adətən SRT və ya VTT formatlarında yaradılır, burada subtitr mətnləri və hər bir mətn parçasının nə zaman görünəcəyini və yox olacağını göstərən zaman işarələri olur. Məsələn, .srt
faylı belə görünə bilər:
1
00:00:01,000 --> 00:00:04,000
Salam, bu bir subtitr nümunəsidir.
2
00:00:05,000 --> 00:00:08,000
Bu subtitr bir az sonra görünür.
Hər bir bölmə aşağıdakı hissələrdən ibarətdir:
- Subtitr sətrinin nömrəsi.
saat:dəqiqə:saniyə,milisaniyə
formatında zaman aralığı.- Subtitrin mətni.
Lazım olan kitabxanaların quraşdırılması
MoviePy .srt
fayllarını birbaşa yükləməyi dəstəkləmir, amma bunu pysrt
kitabxanasından istifadə edərək etmək mümkündür. Bu kitabxana .srt
fayllarını yükləməyə və parse etməyə kömək edir və onlardan mətn klipləri yaratmaq üçün istifadə olunur.
Lazım olan kitabxanaları quraşdırın:
pip install moviepy pysrt
PySRT istifadə edərək subtitrlərin fayldan yüklənməsi
Əvvəlcə pysrt
istifadə edərək .srt
faylından subtitrləri yükləyirik və onları MoviePy ilə istifadə etmək üçün mətn kliplərinə çeviririk.
Subtitrlərin fayldan yüklənməsi və mətn kliplərinə çevrilməsi
import pysrt
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Videonun yüklənməsi
video = VideoFileClip("sample_video.mp4")
# Subtitrlərin fayldan yüklənməsi
subtitles = pysrt.open("subtitles.srt", encoding='utf-8')
# Hər bir subtitr üçün mətn kliplərinin siyahısı
subtitle_clips = []
# Subtitrlərin mətn kliplərinə çevrilməsi
for subtitle in subtitles:
# Subtitr mətnləri
text = subtitle.text
# Subtitrin başlanğıc və bitmə vaxtları saniyə ilə
start_time = subtitle.start.seconds + subtitle.start.milliseconds / 1000.0
end_time = subtitle.end.seconds + subtitle.end.milliseconds / 1000.0
duration = end_time - start_time
# Subtitr üçün mətn klipinin yaradılması
text_clip = TextClip(text, fontsize=24, color='white', font="Arial")
text_clip = text_clip.set_position(('center', 'bottom')).set_start(start_time).set_duration(duration)
# Mətn klipinin siyahıya əlavə olunması
subtitle_clips.append(text_clip)
# Bütün subtitrlərin videoya əlavə olunması
final_video = CompositeVideoClip([video] + subtitle_clips)
final_video.write_videofile("video_with_subtitles.mp4")
Kodun izahı
-
pysrt.open()
ilə subtitrlərin yüklənməsi: Funksiya.srt
subtitr faylını yükləyir və bütün sətirləri özündə saxlayansubtitles
obyektini qaytarır. -
Hər bir subtitr üçün mətn kliplərinin yaradılması:
- Mətn:
subtitle.text
vasitəsilə alınır. - Başlanğıc və bitmə vaxtları: MoviePy ilə uyğun olması üçün saniyələrə çevrilir.
- Müddət: Başlanğıcla bitmə vaxtları arasındakı fərq kimi hesablanır.
- Mətn:
-
Mətnin tənzimlənməsi: Hər bir subtitr
TextClip
kimi mətn klipi olaraq yaradılır. -
Bütün subtitrlərin videoya əlavə olunması:
CompositeVideoClip
vasitəsilə bütün mətn klipləri əsas video klipə yerləşdirilir.
5. Titrlərin əlavə edilməsi
Başlanğıc və son titrlərin əlavə edilməsi
Titrlər adətən videonun əvvəlində və ya sonunda yerləşir və layihə, müəlliflər və digər məlumatlar haqqında məlumat ehtiva edir. Titrləri qara fonda yerləşdirilmiş mətn vasitəsilə hazırlamaq olar.
Başlanğıc və son titrlərin yaradılması
# Başlanğıc titrlərin yaradılması
intro_text = TextClip("Başlanğıc titrlər", fontsize=40, color='white', font="Arial")
intro_text = intro_text.set_position('center').set_duration(3).on_color(size=(video.w, video.h), color=(0, 0, 0), col_opacity=1)
# Əsas video klip
main_video = video.subclip(0, 10) # Əsas video 0-dan 10-cu saniyəyədək
# Son titrlərin yaradılması
outro_text = TextClip("Son titrlər", fontsize=40, color='white', font="Arial")
outro_text = outro_text.set_position('center').set_duration(3).on_color(size=(video.w, video.h), color=(0, 0, 0), col_opacity=1)
# Titrlərlə əsas videonun birləşdirilməsi
final_video = concatenate_videoclips([intro_text, main_video, outro_text])
final_video.write_videofile("video_with_credits.mp4")
Burada:
on_color()
mətn klipi üçün müəyyən rəngdə fon yaradır (bu halda qara).concatenate_videoclips()
titrlərlə əsas videonu bir faylda birləşdirir.
Mətnin göstərilmə vaxtının tənzimlənməsi
MoviePy-də mətnin göstərilmə vaxtını set_duration()
və set_start()
metodları ilə təyin etmək olar. Bu, mətnin ekranda nə vaxt və nə qədər müddət ərzində görünəcəyini dəqiq idarə etməyə imkan verir.
Mətnin müəyyən vaxt ərzində göstərilməsi
# 2-ci saniyədə görünən və 3 saniyə göstərilən mətn klipi
delayed_text = TextClip("Gecikmiş mətn", fontsize=30, color='blue')
delayed_text = delayed_text.set_position('center').set_start(2).set_duration(3)
# Mətni videoya əlavə etmək
final_video = CompositeVideoClip([video, delayed_text])
final_video.write_videofile("video_with_timed_text.mp4")
Burada:
set_start(2)
mətnin görünməsini 2-ci saniyəyədək gecikdirir.set_duration(3)
mətnin 3 saniyədən sonra yox olmasını müəyyənləşdirir.
GO TO FULL VERSION