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 секунд.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ