ムービー link

Ren'Py は(組み込みの) FFmpeg によって以下のビデオコーデックを使用したムービーの再生が可能です。 :

  • VP9
  • VP8
  • Theora
  • MPEG-4 part 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 の使用を勧めます )

ムービーは画面全体に、あるいは displayable 内に表示出来ます。フルスクリーンムービーはより効率的です。

ムービーはウェブプラットフォームではサポートされません。

フルスクリーンムービー link

フルスクリーンののムービーを表示する最も簡単で効率的な方法は renpypy.movie_cutscene() 関数の使用です。この関数はムービーが終わるかユーザーがクリックするまでムービーを表示します。

$ renpy.movie_cutscene("On_Your_Mark.webm")

Android や iOS のようなモバイルでは、 config.hw_video を True にするとハードウエアデコードが使用されます。これはデフォルトで True です。これは一般的にずっと高速ですが、サポートされるムービーフォーマットのリストはプラットフォームに依存します。 Android サポートメディアフォーマット を参照してください。ビデオがサポートされているかどうをテストする簡単な方法はファイルをターゲットとするデバイスにコピーしてデフォルトのビデオプレイヤーで再生することです。

Movie Displayables と Movie Sprites link

Movie displayable を使用して Ren'Py が displayable を表示可能な場所ならどこにでもムービーが表示出来ます。例えばメニューや背景としてムービーが表示出来ます。

Movie displayable を使用して 2 つのムービーからなる Movie sprite も定義出来ます。第一ムービーはスプライトの色を与えます。第二ムービーは白が完全に不透明で黒が完全に透明となるムービーをマスクするアルファチャンネルを与えます。

Movie displayable で再生されるムービーは自動的にループされます。

Movie は2つの引数をとります。 :

play

再生するムービーファイルの文字列です。

これは常に与えなければいけません。

mask

アルファマスクとして使用するムービーファイルの名前を指定します。 play に渡された動画ファイルと同じサイズと再生時間フレームレートであるべきです。

Movie sprite の定義例です。

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

movie sprite は show statement で表示され、自動的に再生が開始します。また非表示になると自動的に停止します。

show eileen movie

e "I'm feeling quite animated today."

hide eileen

e "But there's no point on wasting energy when I'm not around."

初期化時に作成されていれば Movie displayable もスクリーンの一部として使用可能です (例えば 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 displayable や sprite がひとつのスクリーンに同時に表示可能ですが、システムのパフォーマンスに依存し、同じフレームレートを共有します。異なるフレームレートのムービーを表示したときの Ren'Py の振る舞いは未定義ですが、明らかなフレームレートの低下が予測されます。

Python Functions link

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

これは動画のカットシーンを指定された秒数表示します。ユーザーはクリックでカットシーンを飛ばせます。オーバーレイ、アンダーレイはカットシーン中無効化されます。

filename

Ren'Py で再生可能な動画のファイル名です。

delay

カットシーンが終了するまでの秒数で、通常はムービーの長さです。 None なら時間は ( loops + 1) x ( ムービーの流さ ) で算出されます。 -1 ならユーザーがクリックするまで待ちます。

loops

ループする回数です。 -1 なら永遠にループします。

ムービーがユーザーにより停止されたら True 、停止せずに指定した時間が経過したら False を返します。

Movie(fps=24, size=None, channel=u'movie', play=None, mask=None, mask_channel=None, image=None, play_callback=None, side_mask=False, loop=True, start_image=None, **properties) link

これは現在の ムービーを表示する displayable です。

fps

ムービーが表示されるフレームレートです ( これは現在は無視されますが、引数は互換性のために残されています。フレームレートは自動的に決定されます )。

size

これにはムービーの幅と高さのタプルか、自動的に再生するムービーのサイズに調整するなら None を指定します (None なら displayable はムービーが再生されていないとき (0, 0) になります )。

channel

このムービーに関連づけられたオーディオチャンネルです。ムービーファイルがそのチャンネルで再生されると、この Movie displayable で表示されます。これが指定されないと、 play が渡され、チャンネル名が自動で選ばれます。

play

ムービーファイルのパスです。ムービーファイルはムービーが表示されると自動的に channel チャンネルで再生され、非表示になると停止します。

side_mask

True なら、Ren'Py が side-by-side マスクモードを Movie に使用するようにします。この場合、動画は半分に分けられます。左半分は色情報、右半分はアルファ情報です。 displayable の幅は動画ファイルの幅の半分となります。

フレームの同期がずれる可能性がないため、可能な場所では mask より side_mask を使用するべきです。

mask

この displayable のアルファチャンネルとして使用されるムービーファイルのパスです。ムービーファイルはムービーが表示されると自動的に movie_channel チャンネルで再生され、非表示になると停止します。

mask_channel

アルファマスクビデオが再生されるチャンネルです。指定されないと、 デフォルトで channel_mask が使用されます (例えば、channel が "sprite" なら、 mask_channel はデフォルトで "sprite_mask" になります)。

start_image

再生が開始したが、最初のフレームがまだデコードされていないときに表示される画像です。

image

play が指定されたが、参照するファイルがないとき表示する画像です (例えば、これを使用して movie sprites を使用しないモバイル用のバージョンを作成出来ます)。 ビデオがシステムに対して重すぎる場合、ユーザーが設定からこの画像を選択することも可能です。画像はビデオを再生し終えた後にも使用されます。

play_callback

None または、動画再生を開始するのに使用する関数です(スプライト間のトランジションをキューするようなときに使用します)。以下の引数で呼び出されます。

old

古い Movie オブジェクトであるか、ムービーが再生さてないときは None です。

new

新しい Movie オブジェクトです。

movie オブジェクトの play 引数は _play として利用でき、 channel, loop, mask, mask_channel フィールドは対応する引数に対応します。

一般的に、これは指定したチャンネルで、 synchro_start=True で renpy.music.play() を使用して動画を再生するのが望ましいです。以下が最小の実装です

def play_callback(old, new):

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

    if new.mask:
        renpy.music.play(new.mask, channel=new.mask_channel, loop=new.loop, synchro_start=True)
loop

False なら、ムービーはループしません。 image が定義されると、ムービー停止時その画像が表示されます。そうでなければムービーは透明化します。