インタラクションな部分を部分を除けばどんなゲームエンジンよりも動画編集ソフトの方が演出力は高いと思います。動画編集ソフトを使った方が便利な場合は無理してゲームエンジンに拘るより、動画を活用しましょう。という訳でRen’Pyでシームレスに動画を再生する方法です。
Ren’Pyには2つの動画再生方法があります。1つはフルスクリーンで動画再生する通常の再生です。もう一方はテキストウィンドウや通常の立ち絵と併用可能な再生です。
220322 追記 v7.4ではもう画像と同じ扱いで特に特別なことをする必要はなくなったようです。
フルスクリーンで再生
こちらは単に動画ファイルを指定するだけで再生出来ます。
$ renpy.movie_cutscene("movie.mpg")
他の画像と併用して再生
通常の画像やテキストウィンドウと一緒に表示する方法です。画像と同じ扱いなので再生しながらトランジションや変換も出来ます。スクリーンの一部にも使用出来るので、タイトル画面背景に使うといいでしょう。
使用するにはまずMovieクラスのインスタンスを画像として定義します。
init:
# サイズは自由に指定出来ます。
image movie = Movie(size=(400, 300)) #他の画像同様 transform でもサイズを指定でき、その場合はアスペクト比を保持しないようです。
再生するときは以下のようにします。
label movie_sign:
scene black
# 動画再生用の画像を表示、この時点では透明な画像です。
show movie
# 動画を再生開始
play movie "movie.mkv"
"動画を再生しています。再生が完了すると透明になります。"
# 動画を停止します。終了時点の映像で止るわけではなく、透明になります。
stop movie
# 動画を非表示します。
hide movie
220321 追記
v7.4で確認したところ、今のバージョンはもうplay, stopの指定しなくても表示、非表示で自動で再生開始停止するみたいです。
スクリーンの背景に使うときはこんな感じです。
screen main_menu:
# 表示と同時に再生を開始する
on "show" action Play("movie", "background.mpg")
# スクリーン表示時とループ部分を別にしたい場合、次のようにすればtitlescreen_aを再生完了した後titlescreen_bをループ再生してくれます。
# on "show" action [Play("movie", "movie/titlescreen_a.webm", loop=False), Queue("movie", "movie/titlescreen_b.webm", loop=True)]
# 非表示時に再生を停止する
on "hide" action Stop("movie")
on "replaced" action Stop("movie")
# 背景として動画を指定
add Movie(size=(1920, 1080))
これだけなのですが注意点が幾つかあります。
動画再生時に画像領域が高確率で一瞬暗転する
必ずという訳ではないですが、再生時に再生領域が暗転することがあります。動画開始時と同じ画像を一瞬被せる、暗転から始めるなど対策する必要があります(220321追記 v7.4ではこの問題の発生は確認できません)
stop movie を忘れない
再生停止を宣言しないでおくと、次に再生したときに最後に再生した動画が一瞬表示されることがあります。特にタイトル画面に動画を使用している場合は注意です。after_loadラベルを使用してセーブロード時に停止するようにしてください。
再生しながらトランジションで非表示する
ちょっとコツが必要になります。220322 追記 v7.4ではもう画像と同じ扱いで普通にトランジションできるようです。
show movie
play movie "movie/test.webm"
adv "再生します"
scene bg test with dissolve
adv "動画を非表示します。"
このようにするとトランジション終了と同時に動画が再び表示されてしまいます。
show movie
play movie "movie/test.webm"
adv "再生します"
scene bg test with dissolve
stop movie # 再生停止
adv "動画を非表示します。"
再生を停止してからトランジションを開始するようにすれば、動画を再生しながらトランジションで非表示出来ます。
再生しながらトランジションで表示する
220322 追記 v7.4ではもう画像と同じ扱いで普通にトランジションできるようです。
show movie
with dissolve
play movie "movie/test.webm"
adv "トランジション開始"
だとトランジションされません
show movie
play movie "movie/test.webm"
with dissolve
adv "トランジション開始"
このように、再生を始めてからトランジションを開始してください。
一瞬しかない短いアニメーションなら連番画像を使ってATLを使うのも手です。
#0.1秒で次々に画像ファイルを切り替える画像を定義
image animation:
"images/0.png"
0.1
"images/1.png"
0.1
"images/2.png"
0.1
repeat
アルファチャンネル付きの動画にも近々対応予定です。