JavaRush /Курсы /Python SELF /Добавление текста, субтитров и титров в видео: настройка ...

Добавление текста, субтитров и титров в видео: настройка шрифтов, цвета и позиций

Python SELF
47 уровень , 4 лекция
Открыта

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-файлы, которые затем можно конвертировать в текстовые клипы для добавления на видео.

Установите необходимые библиотеки:

Bash

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")

Объяснение кода

  1. Загрузка субтитров с помощью pysrt.open(): Функция загружает .srt-файл с субтитрами и возвращает объект subtitles, содержащий все строки.

  2. Создание текстовых клипов для каждого субтитра:

    • Текст: Получается с помощью subtitle.text.
    • Время начала и окончания: Конвертируется в секунды, чтобы быть совместимым с MoviePy.
    • Продолжительность: Вычисляется как разница между временем окончания и началом.
  3. Настройка текста: Каждый субтитр создается как текстовый клип TextClip.

  4. Добавление всех субтитров к видео: Используем 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 секунд.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ