はい。
8/4から9/15にかけて開催されましたニコマス有志企画、P名を隠しての視聴者投票式アイマスMAD勝ち抜き戦ことim@s MAD Survival Championship 2019 Re:の提出用アップローダの構築運用、本編動画制作スタッフをしていました。
視聴された皆様、投票された皆様、動画で参加された皆様、ご参加ありがとうございました。
スタッフとして参加することになった経緯
まあ、だいたいお察しかと思いますがkaku-tail THE@TERから引き続きという感じです。
kaku-tailのときに作ったアップローダ流用すればだいたい行けるやろ、ということで。
夏コミのときに参加者の方々とお会いする機会があったのですが、本編動画の製作も行っていた僕は当然誰が動画で参加されているかも知っていたので、うっかりその話題を出してしまわないように気を付けるのが大変でした。*1
MSCのために追加開発した部分
流用すればだいたい行けるやろ、と書きはしましたが完全に同じイベントでもないのでいくつか追加で開発した部分もありました。
サムネイル/予選始点/本選始点/決勝始点の入力とチェック
kaku-tailとMSCの差分として大きいのが、このサムネイル/予選始点/本選始点/決勝始点を指定して、勝ち抜いていくにつれてより長く見ることができるというルールだと思います。
そのためには始点の指定をまとめる作業と、それらの指定区間の包含が正しいかをチェックする作業が必要なわけですが、MSC5までは始点を記入したテキストファイルを動画と一緒にzipで圧縮して提出していたと聞きました。*2
これでは参加者の方々にお手間をかけさせてしまうことになる…という名目のもと、何よりも僕がその包含チェックをしたくない!!(単純に大変だし、人為的ミスが出る気しかしない
せっかくこれだけのためにアップローダを構築したわけですから、ファイルアップロード画面にサムネや始点の入力欄を設け、そこで区間の包含までチェックするようにしました。 *3 今回の始点指定で30fps換算かつフレーム部の数え方は0~29、という書き方の指定がされていたのはこれのためです*4。
提出された動画ファイルを調べて30fps/60fpsの自動判別などもやろうと思えばできたはずですが、そこまでは面倒くさかったのでこのような仕様となりました。*5
サムネ/始点のgoogleスプレッドシートへの出力
区間の包含チェックは前述の機能で実現できたわけですが、本編製作をするにあたってそれら始点指定を一覧できないと製作に非常に手間がかかってしまいます。
そこで、提出された動画の始点指定をgoogleスプレッドシートに自動的に出力するようにしました。*6
これにより始点指定が一覧できると同時に、aviutlに入力する再生開始位置をスプレッドシートの機能で計算できるので製作時にかなり楽ができました。
提出ファイルのファイル名の先頭にに自動で参加者番号を付ける
kaku-tailのときの教訓として、参加者の方々から提出されたファイルのファイル名をそのまま保存していたため、どのファイルが誰のファイルなのかわからなくなってしまい、いちいち本編中での並び順と、参加者名と、その参加者の方の提出されたファイル名という三点を確認する必要があり、非常に煩雑だったという点がありました。
そこで今回はアップロード時にファイル名の先頭にに自動で参加者番号を付けるようにしたことで、前述のスプレッドシートに書いてある内容との対応付けがしやすくなり、本編制作の効率がかなり改善されました。
新規登録ならびにファイル提出の可否設定
MSCは参加登録できる期間とファイル提出期間がそれぞれ異なり、しかもそれを決めるのはサーバー管理者(=僕)ではなく主催なので、スタッフ以上の権限を持つユーザがアップローダのWebページ上でそれらの可否を設定できるようにする必要がありました。
エンジニアでない人から見ると一見なんでもないように見えると思いますが、どう作ればいいのか地味に迷った部分でした。*7
その他細かい部分
- kaku-tailは公募後に抽選を行い参加者が絞られる形式だったのに対してMSCは完全公募型の企画でしたので、登録直後のスタッフの承認を待つ段階が消えています。
- MSCで必要な提出物は動画一つだけのため、アップロードできるファイルは1つだけになっています
- なんとなく色を変えました
まとめ
というわけでMSC2019 Reのスタッフをした話でした。
改めて、視聴された皆様、投票された皆様、動画で参加された皆様、ご参加ありがとうございました。
最近こう、章立てというか、見出しを付けるのが癖になってしまい、最後の節にも見出しを付けなければならなくなるわけですが、なんて書けばいいんですかね。
便宜的にまとめ、としてますが別にそれまでの内容をまとめてるわけでもなし。悩ましい。
*1:kaku-tail THE@TER開催以来半年しか経っていないということにその時気付きマジ?と思ったのも記憶に新しい
*3:テスト書くのは全体的にサボりがちでしたが、ここにバグがあって提出できないとなるとさすがにまずいので、ここだけちょっと真面目にモデルのバリデーションの単体テスト書いた
*4:裏話として、実は動画制作ツールによってフレームの数え方が0始まりなのか1始まりなのかか異なる疑惑、実は当初通算フレーム数で指定させようとしていたが30fpsと60fpsの判別が存外面倒で諦めた、ルールで0始まりと指定したのにaviutlの再生始点の指定は実は1始まりだったことが後から判明、などがあります
*5:これについては万が一次回があるならそのときの開発課題ですかね…動画再生ソフトで開いてfpsを確認するのはやはりそこそこの手間でした
*6:RailsとGoogle Driveをイイ感じに連携させるgemというのはなかったので汎用のgoogle-drive gemを適当に包んで、Active Recordのafter_saveコールバックで呼んで使いました
*7:Web画面を通して変更できるサイト全体に係る設定を作りたいというときに使うgemはあまり決定版と言えるようなものが見当たらず、結果としてマストドンで使用していたrails-settings-cached gemを倣って使いました