Видео (Movie)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Ren'Py предусматривает возможность использования встроенной версии Libav для воспроизведения фильмов с помощью видеокодеков:

  • VP9
  • VP8
  • Theora
  • MPEG 4 часть 2 (включая Xvid и DivX)
  • MPEG 2
  • MPEG 1

и следующих аудиокодеков:

  • OPUS
  • Vorbis
  • MP3
  • MP2
  • PCM

внутри нижеследующих контейнеров:

  • WebM
  • Matroska
  • Ogg
  • Avi
  • Различные виды потока MPEG.

Обратите внимание, что использование некоторых из вышеуказанных форматов может потребовать приобрести патентные лицензии. Если есть сомнения, особенно для коммерческих игр, мы рекомендуем использовать VP9, VP8 или Theora, Opus или Vorbis и WebM, Matroska или Ogg.


Фильмы могут отображаться в полноэкранном режиме или в качестве отображаемого объекта. Полноэкранные фильмы более эффективны.

Полноэкранные фильмы (Fullscreen Movies)[править | править код]

Самый простой и эффективный способ отображения фильма в полноэкранном режиме заключается в использовании функции renpypy.movie_cutscene. Она отображает фильм в полноэкранном режиме до тех пор, пока он не закончится либо игрок не щелкнет кнопкой мыши, чтобы прекратить воспроизведение.

$ renpy.movie_cutscene("На_старт.webm")

На мобильных платформах, таких как Андроид и iOS, аппаратное декодирование видео используется, когда config.hw_video по умолчанию принимает значение True. Как правило, это гораздо быстрее, но список поддерживаемых форматов видео зависит от платформы.

Movie, как отображаемые объекты и спрайты (Movie Displayables and Movie Sprites)[править | править код]

Объект Movie, отображаемый на экране, можно использовать для отображения фильма в любом месте, где Ren'Py может его показать. Например, фильм может выводиться как фон экрана меню или в качестве фона.

Отображаемый объект Movie также можно использовать для определения видео спрайта, который представляет собой спрайт, склеенный из двух фильмов. Основной фильм обеспечивает цвет спрайта. Второй фильм - маска фильм - обеспечивает альфа-канал, где белый цвет - полная непрозрачность, а чёрный - полная прозрачность.

Видео, которые воспроизводятся в отображаемом объекте Movie, зацикливаются автоматически.


Отображаемый объект Movie принимает два параметра:

play
Строка, содержащая имя воспроизводимого видеофайла.
Параметр всегда должен быть задан.
mask
Строка, содержащая наименование видеофайла для использования в качестве альфа-маски. Она должна быть того же размера, продолжительности и частоты кадров, что и видеофайл, заданный в play.


Вот пример определения видео спрайта:

image eileen movie = Movie(play="eileen_movie.webm", mask="eileen_mask.webm")


Видео спрайт можно показать с помощью оператора show, который автоматически запускает воспроизведение видео. Он будет автоматически остановлен при скрытии отображаемого объекта.

show eileen movie

e "Сегодня я весьма взбудоражена."

hide eileen

e "Но нет смысла тратить энергию, когда меня нет рядом"


Отображаемый объект Movie также можно использовать как часть экрана, при условии, что он создан во время фазы инициализации (например, как часть оператора image).

image main_menu = Movie(play="main_menu.ogv")

screen main_menu:
    add "main_menu"
    textbutton "Start" action Start() xalign 0.5 yalign 0.5

Несколько отображаемых объектов Movie или спрайтов могут отображаться на экране одновременно с учетом производительности системы и при условии, что все они имеют одинаковую частоту кадров. Поведение Ren'Py при отображении фильмов с разной частотой кадров не определено, но, скорее всего, будет включать значительную потерю кадров.

Функции языка Python (Python Functions)[править | править код]

renpy.movie_cutscene(filename, delay=None, loops=0, stop_music=True)

Отображает кат-сцену в формате MPEG-1 за указанное количество секунд. Пользователь может щелкнуть кнопкой мыши, чтобы прервать кат-сцену. Наложения и подложки отключены во время кат-сцены.
filename
Имя файла, содержащего фильм в формате MPEG-1.
delay
Количество секунд ожидания до завершения кат-сцены. Обычно продолжительность фильма указывается в секундах. Если принимает значение None, то задержка вычисляется из числа циклов (то есть, loops + 1) *продолжительность фильма. Если -1, то ждём пока пользователь прервёт воспроизведение видео нажатием на кнопку мыши/клавиатуры.
loops
Количество дополнительных циклов для отображения видео, -1 для бесконечного цикла.
Возвращает значения True, если фильм был прерван пользователем или принимает значение False, если заданная задержка не прерывалась.


Movie(fps=24, size=None, channel='movie', play=None, mask=None, mask_channel=None, image=None, play_callback=None, side_mask=False, loop=True, start_image=None, **properties)
Это отображаемый объект, показывающий текущий фильм.
fps
Частота кадров, которую фильм должен выдать при воспроизведение. В настоящее время параметр игнорируется, но он сохраняется для обратной совместимости. Частота кадров определяется автоматически.
size
Этот параметр следует указать либо как кортеж, задающий ширину и высоту фильма, либо как значение None, чтобы автоматически настроить размер воспроизводимого фильма. Если принимает значение None, размер отображаемого на экране объект будет (0, 0), когда фильм не воспроизводится.
channel
Аудиоканал, связанный с этим фильмом. Когда файл фильма воспроизводится на этом канале, он будет выводиться на экран в этом отображаемом объекте Movie. Если channel не указан, а play задан, название канала выбирается автоматически.
play
Если параметр задан, то это должен быть путь к файлу фильма. Файл фильма будет автоматически воспроизводиться на channel, когда Movie отображается, и автоматически останавливается, когда фильм скрывается.
side_mask
Если принимает значение True, это говорит Ren'Py о необходимости использовать режим параллельной маски для Movie. В этом случае фильм делится пополам. Левая половина используется для цветовой информации, а правая половина используется для альфа-информации. Ширина отображаемого объекта равна половине ширины файла фильма.
По возможности, side_mask следует использовать поверх mask, потому что у неё нет шансов, что кадры выйдут из синхронизации.
mask
Если параметр задан, то это должен быть путь к файлу фильма, который используется в качестве альфа-канала этого отображаемого объекта. Файл фильма будет автоматически воспроизводиться на movie_channel при показе Movie и автоматически останавливаться при скрытии фильма.
mask_channel
Канал, на котором воспроизводится видео с альфа-маской. Если параметр не указан, по умолчанию используется channel_mask. Например, если channel - "sprite", mask_channel по умолчанию является "sprite_mask".
start_image
Изображение, которое отображается после начала воспроизведения, но первый кадр ещё не был декодирован.
image
Изображение, которое отображается, когда задаётся play, но файл, на который оно ссылается, не существует. Например, это можно использовать для создания облегченной мобильной версии, которая не использует видео спрайты. Пользователи также могут отказаться от этого изображения в качестве предпочтения, если видео слишком обременительно для их системы.
play_callback
Если принимает значение не None, функция, используемая для запуска воспроизведения фильмов. Это может сделать что-то вроде очереди переходов между спрайтами, если это необходимо. Вызывается со следующими аргументами:
old
Старый объект Movie или значение None, если фильм не воспроизводится.
new
Новый объект Movie.


Объект Movie имеет параметр play, доступный как _play, в то время как channel, mask и mask_channel соответствуют заданным параметрам.
Как правило, для этого нужно использовать renpy.music.play(), чтобы запустить воспроизведение фильма на заданном канале с synchro_start=True. Минимальная реализация:
def play_callback(old, new):

    renpy.music.play(new._play, channel=new.channel, loop=True, synchro_start=True)

    if new.mask:
        renpy.music.play(new.mask, channel=new.mask_channel, loop=True, synchro_start=True)
loop
Если принимает значение False, фильм не будет зацикливаться. Если image определено, оно будет отображаться после окончания фильма. Иначе фильм станет прозрачным.


Отображаемый объект будет прозрачным, когда фильм не воспроизводится.

Источник[править | править код]

Статья "Movie" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи