Ren'Py は(組み込みの) FFmpeg によって以下のビデオコーデックを使用したムービーの再生が可能です。 :
MPEG-4 part 2 (Xvid と DivX を含む)
以下のオーディオコーデックも使用可能です。 :
以下のフォーマットのコンテナが使用可能です。 :
種々の MPEG ストリーム
( これらのフォーマットのうちいくつかは特許権使用許諾を必要とすることに注意してください。疑わしい場合、特に商業ゲームであれば VP9 や VP8, Theora, Opus, Vorbis, WebM, Matroska, Ogg の使用を勧めます )
ムービーは画面全体に、あるいは displayable 内に表示出来ます。フルスクリーンムービーはより効率的です。
Ren'Py の動画デコーダはアルファチャンネル付き動画をサポートしませんが、 Movie()
Displayable の side_mask パラメーターで代用できます。こちらは ffmpeg によってアルファチャンネルつきの mov ファイルから side-by-side マスクつきの webm ファイルを作成する方法の例です。
ffmpeg -i original.mov -filter:v alphaextract mask.mov
ffmpeg -i original.mov -i mask.mov -filter_complex "hstack" -codec:v vp8 -crf 10 output.webm
ムービーはウェブプラットフォームではサポートされません。
フルスクリーンのムービーを表示する最も簡単で効率的な方法は renpypy.movie_cutscene()
関数の使用です。この関数はムービーが終わるかユーザーがクリックするまでムービーを表示します。
$ renpy.movie_cutscene("On_Your_Mark.webm")
Android や iOS のようなモバイルでは、 config.hw_video
を True にするとハードウエアデコードが使用されます。これはデフォルトで True です。これは一般的にずっと高速ですが、サポートされるムービーフォーマットのリストはプラットフォームに依存します。 Android サポートメディアフォーマット を参照してください。ビデオがサポートされているかどうをテストする簡単な方法はファイルをターゲットとするデバイスにコピーしてデフォルトのビデオプレイヤーで再生することです。
Movie displayable を使用して Ren'Py が displayable を表示可能な場所ならどこにでもムービーが表示出来ます。例えばメニューや背景としてムービーが表示出来ます。
Movie displayable を使用して 2 つのムービーからなる Movie sprite も定義出来ます。第一ムービーはスプライトの色を与えます。第二ムービーは白が完全に不透明で黒が完全に透明となるムービーをマスクするアルファチャンネルを与えます。
Movie displayable で再生されるムービーは自動的にループされます。
Movie sprite の定義例です。
image eileen movie = Movie(play="eileen_movie.webm", side_mask=True)
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 の振る舞いは未定義ですが、明らかなフレームレートの低下が予測されます。
renpy.
movie_cutscene
(filename, delay=None, loops=0, stop_music=True) linkこれは動画のカットシーンを指定された秒数表示します。ユーザーはクリックでカットシーンを飛ばせます。オーバーレイ、アンダーレイはカットシーン中無効化されます。
Ren'Py で再生可能な動画のファイル名です。
カットシーンが終了するまでの秒数で、通常はムービーの長さです。 None なら時間は ( loops + 1) x ( ムービーの流さ ) で算出されます。 -1 ならユーザーがクリックするまで待ちます。
ループする回数です。 -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 です。
ムービーが表示されるフレームレートです ( これは現在は無視されますが、パラメーターは互換性のために残されています。フレームレートは自動的に決定されます )。
これにはムービーの幅と高さのタプルか、自動的に再生するムービーのサイズに調整するなら None を指定します (None なら displayable はムービーが再生されていないとき (0, 0) になります )。
このムービーに関連づけられるオーディオチャンネルです。ムービーファイルがそのチャンネルで再生されると、この Movie displayable で表示されます。これが "movie" のままで play が渡されると config.single_movie_channel
と config.auto_movie_channel
からチャンネル名が自動で選ばれます。
True なら、Ren'Py が side-by-side マスクモードを Movie に使用するようにします。この場合、動画は半分に分けられます。左半分は色情報、右半分はアルファ情報です。 displayable の幅は動画ファイルの幅の半分となります。
フレームの同期がずれる可能性がないため、可能な場所では mask より side_mask を使用するべきです。
アルファマスクビデオが再生されるチャンネルです。指定されないと、 デフォルトで channel_mask が使用されます (例えば、channel が "sprite" なら、 mask_channel はデフォルトで "sprite_mask" になります)。
再生が開始したが、最初のフレームがまだデコードされていないときに表示される画像です。
play が指定されたが、参照するファイルがないとき表示する画像です (例えば、これを使用して movie sprites を使用しないモバイル用のバージョンを作成出来ます)。 ビデオがシステムに対して重すぎる場合、ユーザーが設定からこの画像を選択することも可能です。画像はビデオを再生し終えた後にも使用されます。
None または、動画再生を開始するのに使用する関数です(スプライト間のトランジションをキューするようなときに使用します)。以下の引数で呼び出されます。
古い Movie オブジェクトであるか、ムービーが再生さてないときは None です。
新しい 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)
False なら、ムービーはループしません。 image が定義されると、ムービー停止時その画像が表示されます。そうでなければムービーは透明化します。