1. Wprowadzenie do tekstowego świata MoviePy
Gotowi na zanurzenie się w magicznym świecie edycji wideo z dodawaniem tekstu? Wyobraź sobie, że jesteś reżyserem, i Twoim zadaniem jest nie tylko sprawić, żeby postacie mówiły, ale i zarządzać słowami pojawiającymi się na ekranie. Tak, mowa o magii napisów i tytułów!
Zanim zaczniemy, ważne jest zrozumienie jednej prostej rzeczy: MoviePy to nie tylko kolejna biblioteka do pracy z wideo. To Twój osobisty projektant wideo, który może dodać projektowi odrobinę blasku i informacji. Jeśli już znasz podstawy edycji wideo: cięcie, sklejanie, odrobina efektów specjalnych - czas na kolejny poziom.
Po co dodawać tekst?
Tekst w wideo odgrywa kluczową rolę — to informacje, stylizowane tytuły, a także niezastąpione napisy dla tych, którzy oglądają materiał późną nocą, kiedy sąsiedzi śpią. MoviePy umożliwia robienie tego w wygodny i stylowy sposób.
2. Praca z tekstem
Zacznijmy od prostych elementów tekstowych. Do tego MoviePy oferuje świetną funkcję TextClip
, która pozwala na dodawanie tekstu do Twoich klipów.
Tworzenie klipu tekstowego
Podstawowa konfiguracja klipu tekstowego wygląda tak:
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Otwieramy plik wideo
video = VideoFileClip("sample_video.mp4")
# Tworzymy klip tekstowy
txt_clip = TextClip("Cześć, świecie!", fontsize=70, color='white')
# Ustawiamy czas trwania klipu tekstowego
txt_clip = txt_clip.set_duration(video.duration)
# Ustawiamy pozycję tekstu
txt_clip = txt_clip.set_position('bottom')
# Komponujemy wideo z tekstem
video_with_text = CompositeVideoClip([video, txt_clip])
# Zapisujemy wynik
video_with_text.write_videofile("output_video_with_text.mp4", fps=24)
Ustawienie czcionek i kolorów
Możesz łatwo dostosować kolor, czcionkę i rozmiar tekstu. W powyższym przykładzie kolor tekstu jest biały, ale możesz wybrać dowolny inny, na przykład:
txt_clip = TextClip("Cześć, świecie!", fontsize=70, font='Amiri-bold', color='yellow')
Podobnie możesz zmienić czcionkę, upewniając się wcześniej, że potrzebna czcionka jest zainstalowana w Twoim systemie.
3. Pozycjonowanie tekstu na ekranie
Pozycjonowanie tekstu można regulować za pomocą parametru set_position()
, który akceptuje zarówno wartości tekstowe (na przykład 'center'
, 'bottom'
), jak i współrzędne.
Umieszczanie tekstu w różnych pozycjach
# Tekst umieszczony na górze
text_top = TextClip("Tekst na górze", fontsize=30, color='blue').set_position(('center', 'top')).set_duration(5)
# Tekst umieszczony na dole
text_bottom = TextClip("Tekst na dole", fontsize=30, color='green').set_position(('center', 'bottom')).set_duration(5)
# Tekst umieszczony na współrzędnych (x=100, y=100)
text_coords = TextClip("Tekst na współrzędnych", fontsize=30, color='red').set_position((100, 100)).set_duration(5)
# Nakładanie wszystkich tekstów na wideo
final_video = CompositeVideoClip([video, text_top, text_bottom, text_coords])
final_video.write_videofile("video_with_positioned_text.mp4")
Tutaj:
('center', 'top')
: Umieszcza tekst na środku u góry.('center', 'bottom')
: Umieszcza tekst na środku u dołu.(100, 100)
: Ustawia pozycję tekstu na określonych współrzędnych.
Dynamiczna aktualizacja tekstu
Nie tylko dodanie tekstu, ale i jego ożywienie — to właśnie sprawia, że wideo staje się naprawdę fascynujące. Spróbujmy animować tekst.
def move_text(t):
return 10, 100 * t # Przesuwamy tekst w dół w czasie
txt_clip = txt_clip.set_pos(move_text).set_duration(3)
4. Praca z napisami
Napisy to tekst zsynchronizowany z określonymi momentami wideo. Możemy je ładować z plików lub tworzyć ręcznie.
Ręczne dodawanie napisów
Zacznijmy od prostego przykładu, gdzie dodajemy napisy do wideo. W tym celu musimy utworzyć klip tekstowy i ustawić czas jego pojawienia się:
# Tworzymy napisy
subtitles = [
{"text": "Cześć, świecie!", "start": 0, "end": 2},
{"text": "To jest napis!", "start": 2.5, "end": 5}
]
# Komponujemy wideo z napisami
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)
GO TO FULL VERSION