bad apple!!
内容
このプログラムは、bad apple!(feat. nomico)のPVをPythonを用いて再現しよう!という内容です。 実はYoutube並びにGithub上に似たようなプログラムがあったしなんならそっちの方が結構良かったりするんですが、一応公開しますw
使い方
-
このプログラムをダウンロードします。上部の「Code」という緑のボタンから「Download ZIP」を選択、その後解凍します
-
まず、badapple.pyと同じ階層に、badapple.mp3とbadapple.mp4を置きます(既に用意はしてますが、著作権とかの問題があり次第削除します)
-
badapple.pyを普通に動作させます
-
データ生成が完了したらエンターキーを押して、楽しみます
データの保存について
v.1.1.0から、各フレームを表現する文字列(以下、ドットファイル)が保存できるようになりました。
これによって、いちいち待つことなく、すぐに再生することが可能になります。
使い方
-
まず、選択肢の「2」を選ぶ
-
現在の設定に合わせたドットファイルを、badapple.pyと同じ階層にあるdotsフォルダの中に生成
-
その後、選択肢の「3」を選ぶ
-
先ほど生成したファイル名を入力し、再生
-
楽しむ
注意
ドットファイルはテキストファイル(txt)で保存されますが、なんと一つのファイルあたり100MBは超えます。というか私の時は300MB超えました。なので、容量には充分注意をして、生成しまくらないようにしてください。
あと、そのテキストファイルを生で見ようとすると重くなるので、あまり直視しないようにお願いします。
自動フレーム調整機能について
v.1.1.0から、自動で、fpsに合わせたフレーム調整を行うことができます。これにより、ある程度高画質なドットファイルでも、少しカクカクするかもしれませんが再生することができるようになりました。
なお、この機能は完璧なものではありません。遅れるもんは遅れます。抗えません。無駄な抵抗をせず、画質を落としましょう。
なお、再生時に「debug_fps」と入力すると、現在のfpsと、通常のfpsに合わせて調整するフレーム数をみることができますが、これをONにするとfps落ちるので、なんかおかしいという時のみ活用してください。
Q&A
-
サイズが収まらない
申し訳ありませんが、badapple.py内の「CUSTOM」というコメントがある箇所の数値を調整してください -
音とズレる
1番と同様、badapple.py内の「CUSTOM」というコメントがある箇所の数値を調整してください。
原因は多分、描画するときの処理時間があるからだと思いますので、描画するときの文字数を減らすなどの対策を行うと良いかもしれません -
ウインドウが自動的に閉じない
ウインドウを閉じる方法がよくわからなかったので、申し訳ありませんが手動でウインドウを閉じてください -
エラー吐きまくってる
ライブラリのインストールをしていないのかもしれません。
この作品では、
- openCV
- pygame
- fpstimer
- tkinter
- screeninfo
が必要です。
-
どう足掻いてもズレる
他のアプリのウインドウをできるだけ閉じることをお勧めします。また、なぜか1回目はズレるんですが、2回目は普通になる時が結構あるので、何回か試してみるのもいいかもしれません。 -
ウインドウを動かそうとするとズレる
仕方ないものです。 -
特にない
bad apple!!を楽しんでください
感想
小さい頃から、bad apple!!のPVのアレンジ(?)をめちゃくちゃ見てて、「うわぁ、こういうのやりたいなぁ」と思ってたので、どんな形であれ自分の手でアレンジができたのは本当に嬉しいです。もちろん、改善すべき点なんてあげればキリがないんですが、今はもうちょっとだけ幻想入りさせてもらいます。。。
そもそも、「bad apple!!」とは?
元々は、東方旧作の弾幕STGシリーズ、「東方幻想郷」の3面ステージの道中BGM。
それをnomicoがカバーした「bad apple!! feat. nomico」と、そのPVが爆発的人気を誇り、今や東方projectの顔とも呼べる曲となった。
また、PVが影絵なので、二値化できる作品であり、それを利用して今回のプログラムの他にも様々なオリジナリティのあるアレンジが公開されている。このプログラムでも、PythonのopenCVを用いて動画を二値化しているが、その処理を施しても違和感のない仕上がりとなっている。
実は、PVに関しては絵コンテから、神様が影絵へと変化させたのだが、影絵の元である絵コンテでは、最後に出てくる霊夢、魔理沙は旧作のキャラクターとなっている。