1. Вступ до текстового світу MoviePy
Ну що, готові поринути у чарівний світ редагування відео з додаванням тексту? Уявіть, що ви — режисер, і перед вами стоїть завдання не просто змусити персонажів говорити, але й керувати словами, які з’являються на екрані. Так, це магія субтитрів і титрів!
Перш ніж почати, важливо зрозуміти одну просту річ: MoviePy — це не просто ще одна бібліотека для роботи з відео. Це ваш особистий відео-дизайнер, який може допомогти додати трішки гламура і інформативності вашому проєкту. Ви вже навчилися основам редагування відео: різання, склеювання, трішки спецефектів — час для наступного рівня.
Навіщо додавати текст?
Текст у відео відіграє ключову роль — це і інформаційні повідомлення, і стилізовані титри, і, звісно, рятівні субтитри для тих, хто переглядає ваші роботи пізно вночі, коли сусіди сплять. MoviePy дозволяє робити це зручно і стильно.
2. Робота з текстом
Давайте почнемо із простих текстових елементів. Для цього MoviePy надає чудову функцію TextClip, яка дозволяє додавати текст до ваших кліпів.
Створення текстового кліпу
Базове налаштування текстового кліпу виглядає приблизно так:
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Відкриваємо відеофайл
video = VideoFileClip("sample_video.mp4")
# Створюємо текстовий кліп
txt_clip = TextClip("Привіт, світе!", fontsize=70, color='white')
# Встановлюємо тривалість текстового кліпу
txt_clip = txt_clip.set_duration(video.duration)
# Вказуємо позицію тексту
txt_clip = txt_clip.set_position('bottom')
# Компонування відео з текстом
video_with_text = CompositeVideoClip([video, txt_clip])
# Зберігаємо результат
video_with_text.write_videofile("output_video_with_text.mp4", fps=24)
Налаштування шрифтів і кольору
Ви можете легко налаштувати колір, шрифт і розмір тексту. В прикладі вище колір тексту білий, але ви можете вибрати будь-який інший, наприклад:
txt_clip = TextClip("Привіт, світе!", fontsize=70, font='Amiri-bold', color='yellow')
Аналогічно можна змінити шрифт, попередньо переконавшись, що потрібний шрифт встановлений у вашій системі.
3. Позиціонування тексту на екрані
Позиціонування тексту можна налаштовувати за допомогою параметра set_position(), який приймає як текстові значення (наприклад, 'center', 'bottom'), так і координати.
Розташування тексту в різних позиціях
# Текст, розташований у верхній частині
text_top = TextClip("Верхній текст", fontsize=30, color='blue').set_position(('center', 'top')).set_duration(5)
# Текст, розташований у нижній частині
text_bottom = TextClip("Нижній текст", fontsize=30, color='green').set_position(('center', 'bottom')).set_duration(5)
# Текст, розміщений за координатами (x=100, y=100)
text_coords = TextClip("Текст за координатами", fontsize=30, color='red').set_position((100, 100)).set_duration(5)
# Накладення всіх текстів на відео
final_video = CompositeVideoClip([video, text_top, text_bottom, text_coords])
final_video.write_videofile("video_with_positioned_text.mp4")
Тут:
('center', 'top'): Розташовує текст по центру зверху.('center', 'bottom'): Розташовує текст по центру внизу.(100, 100): Встановлює позицію тексту за конкретними координатами.
Динамічне оновлення тексту
Не просто додавати текст, але й оживляти його — ось що робить відео по-справжньому захоплюючим. Спробуймо зробити текст анімованим.
def move_text(t):
return 10, 100 * t # Рухаємо текст вниз із часом
txt_clip = txt_clip.set_pos(move_text).set_duration(3)
4. Робота з субтитрами
Субтитри представляють собою текст, який синхронізується з певними моментами відео. Ми можемо завантажувати їх із файлів або створювати вручну.
Додавання субтитрів вручну
Почнемо з простого прикладу, де ми додаємо субтитри до відео. Для цього потрібно створити текстовий кліп і встановити час його появи:
# Створюємо субтитри
subtitles = [
{"text": "Привіт, світ!", "start": 0, "end": 2},
{"text": "Це субтитр!", "start": 2.5, "end": 5}
]
# Комбінуємо відео з субтитрами
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)
Завантаження субтитрів з файлу
Якщо у вас є файл субтитрів у форматі SRT, ви можете завантажити його набагато простіше. MoviePy підтримує завантаження таких файлів, що значно спрощує процес.
Субтитри зазвичай створюються у форматах SRT або VTT, які містять текст субтитрів та часові мітки, що вказують, коли кожен фрагмент тексту повинен з'являтися і зникати. Наприклад, ось як може виглядати файл .srt:
1
00:00:01,000 --> 00:00:04,000
Привіт, це приклад субтитру.
2
00:00:05,000 --> 00:00:08,000
Цей субтитр з'являється трохи пізніше.
Кожна секція складається з:
- Номера рядка субтитра.
- Часового інтервалу у форматі
година:хвилина:секунда,мілісекунда. - Тексту субтитра.
Установка необхідних бібліотек
MoviePy не підтримує завантаження .srt-файлів напряму, але це можна зробити за допомогою бібліотеки pysrt. Вона допомагає завантажувати та парсити .srt-файли, які потім можна конвертувати у текстові кліпи для додавання на відео.
Встановіть необхідні бібліотеки:
pip install moviepy pysrt
Завантаження субтитрів із файлу за допомогою PySRT
Спочатку завантажимо субтитри з файлу .srt, використовуючи pysrt, і перетворимо їх у текстові кліпи для використання у MoviePy.
Завантаження субтитрів із файлу та перетворення їх у текстові кліпи
import pysrt
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Завантаження відео
video = VideoFileClip("sample_video.mp4")
# Завантаження субтитрів із файлу
subtitles = pysrt.open("subtitles.srt", encoding='utf-8')
# Список текстових кліпів для кожного субтитру
subtitle_clips = []
# Перетворення субтитрів у текстові кліпи
for subtitle in subtitles:
# Текст субтитру
text = subtitle.text
# Час початку і закінчення субтитру у секундах
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
# Створення текстового кліпу для субтитру
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)
# Додавання текстового кліпу до списку
subtitle_clips.append(text_clip)
# Накладення всіх субтитрів на відео
final_video = CompositeVideoClip([video] + subtitle_clips)
final_video.write_videofile("video_with_subtitles.mp4")
Пояснення коду
Завантаження субтитрів за допомогою
pysrt.open(): Функція завантажує.srt-файл із субтитрами та повертає об'єктsubtitles, який містить усі рядки.Створення текстових кліпів для кожного субтитру:
- Текст: Отримується за допомогою
subtitle.text. - Час початку і закінчення: Перетворюється у секунди, щоб бути сумісним з MoviePy.
- Тривалість: Обчислюється як різниця між часом закінчення та початку.
- Текст: Отримується за допомогою
Налаштування тексту: Кожен субтитр створюється як текстовий кліп
TextClip.Додавання всіх субтитрів до відео: Використовуємо
CompositeVideoClipдля накладення всіх текстових кліпів на основний відеокліп.
5. Додавання титрів
Додавання початкових і кінцевих титрів
Титри зазвичай розміщуються на початку або в кінці відео і містять інформацію про проєкт, авторів та інші дані. Титри можна зробити за допомогою тексту, накладеного на чорний фон.
Створення початкових і кінцевих титрів
# Створення початкових титрів
intro_text = TextClip("Початкові титри", 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)
# Основний відеокліп
main_video = video.subclip(0, 10) # Основне відео з 0 по 10 секунду
# Створення кінцевих титрів
outro_text = TextClip("Кінцеві титри", 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)
# Об'єднання титрів і основного відео
final_video = concatenate_videoclips([intro_text, main_video, outro_text])
final_video.write_videofile("video_with_credits.mp4")
Тут:
on_color()створює фон певного кольору (у цьому випадку чорного) для текстового кліпу.concatenate_videoclips()об'єднує титри і основне відео в один файл.
Налаштування часу відображення тексту
Час відображення тексту в MoviePy можна задати за допомогою методів set_duration() та set_start(). Це дозволяє точно керувати тим, коли і як довго текст буде видно на екрані.
Відображення тексту протягом певного часу
# Текстовий кліп, що з'являється на 2-й секунді і відображається 3 секунди
delayed_text = TextClip("Пізній текст", fontsize=30, color='blue')
delayed_text = delayed_text.set_position('center').set_start(2).set_duration(3)
# Додавання тексту на відео
final_video = CompositeVideoClip([video, delayed_text])
final_video.write_videofile("video_with_timed_text.mp4")
Тут:
set_start(2)затримує появу тексту до 2-ї секунди.set_duration(3)змушує текст зникнути після 3 секунд.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ