オンライン演劇の稽古録画を考える -Zoomクラウドレコーディング共有の自動化 with GAS (Google Apps Script)-
===
本記事は、3/26-3/28に上演する『反復かつ連続』(柴幸男作)公演のマガジン記事です。公演詳細などについては、こちらからご覧ください。
===
はじめに
こんにちは。コロナ禍に入ってから、オンライン演劇やライブパフォーマンス分野を中心に配信や、その周辺技術の担当を趣味としている、furuyanと申します。
現在、配信公演『反復かつ連続』の配信技術担当をしておりますが、最初のタスクは稽古場における録画・その閲覧ソリューションの確保でした。本公演では本番直前を除いて、原則としてオンライン上で稽古を行っています。プロ・アマ問わず、現在の状況においてはZoomなどを使用したオンライン会議システム上での稽古が広く行われていると感じます。
過去に携わった公演でも、稽古の録画を行って役者等に共有することは振り返りに役立つと好評でした。加えて、オンラインだと、録画などが容易であるという背景もあります。しかし、録画のオペレーションや共有などのために、配信技術者が稽古の都度、操作や作業を行う必要があることが課題でした。
そこで、稽古場の役者や演出のみで録画オペレーションを行い、GAS(Google Apps Script)を用いてZoomのクラウドレコーディングの情報を自動的に座組内に共有する仕組みを作りました。本記事では、これに関して、ご紹介したと思います。
また、本記事ではオンライン演劇での録画共有という点で解説を行いますが、定例ミーティング等の録画を自動で共有するのにも応用が可能であると思います(むしろ、そちらの方が需要は高い)。
録画方法の検討
Zoom上で行う稽古やミーティングを稽古場の役者や演出家、他のスタッフ自信が録画を開始し、簡単に後で振り返ることができる仕組みを構築する必要があります。
検討したのは、以下の方法でした。
①Zoomのクラウドレコーディング機能(要:有料ライセンス)を利用する
②Zoomの機能を利用して、YouTubeに限定公開で配信をする
②の方法であれば、YouTubeの管理権限を座組メンバに渡すことによって、後で振り返ることができる&稽古の様子をZoomに入らなくても生で確認できるなどの利点がありました。しかし、我々の過去の経験から、YouTubeは著作権やコミュニティガイドラインの違反監視をAIで行っており、誤検知を含めてアカウントに影響が出たり配信が停止される恐れがありました。
①のクラウドレコーディングの方法では、ホストキーを渡すことによって、稽古場の人々が自由に録画開始をすることができます。しかし、録画されたものは、ホストのアカウント(有料ライセンスが必要)にログインした状態でなければ、閲覧や共有の設定ができません。つまり、録画を行った場合は都度その旨を稽古場の人から教えてもらった上で、共有設定をして渡す必要がありました。
しかし、クラウドレコーディングがされて、その動画の処理が完了すると、グローバルに共有できるリンクと共にアカウントに登録されているメールアドレスに通知が来ることに気づきました。これを、何かしらの方法で取得して、稽古場の人々が見えるところに共有することにより、目的が実現できます。
実装 -概要-
ZoomにはGmailで登録をしていたので、GASを用いてメールを取得し、パースを行った後に、視聴者共有URLと閲覧用パスワードのみをLINE Notifyに投げることによって実現しました。
Zoomから送信されるメール(URLおよびパスワードなどは編集済み)
実装 -LINE Notify-
こちらに関しては、他にわかりやすい記事がたくさんありますので、そちらを参照してください。LINE Notifyのページにログインをして、投稿するグループを指定して、トークンを手に入れます。
LINE Notifyのトークンは取得時の表示のみで、その後は再表示できないのでお気をつけください。
実装 -GAS-
① 任意のスプレッドシートを開く
②[ツール]から[スクリプトエディタ]を開く
③以下のスクリプトを貼り付け、件名とトークンを編集して実行(初回はGmailへのアクセス許可を求められます)
//件名を置き換える
var FindSubject = 'subject:(クラウド記録中- 反復かつ連続 稽古場 は現在利用可能です) ';
function getMail(){
//指定した件名のスレッドを検索して取得
var myThreads = GmailApp.search(FindSubject, 0, 10);
//スレッドからメールを取得し二次元配列に格納
var myMessages = GmailApp.getMessagesForThreads(myThreads);
for(var i in myMessages){
for(var j in myMessages[i]){
//スターがないメッセージのみ処理
if(!myMessages[i][j].isStarred()){
var body = myMessages[i][j].getBody();
var start = body.indexOf("視聴者と録画を共有");
var end = body.indexOf(")",start)
var strSubject = myMessages[i][j].getSubject();
var startDate = body.slice(body.indexOf("2021年"),body.indexOf("M")+1);
var strMessage = body.slice(start+18,end+1);
strMessage = strMessage.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'')
//LINEにメッセージを送信
sendLine(startDate,strMessage);
//処理済みのメッセージをスターをつける
myMessages[i][j].star();
}
}
}
}
function sendLine(startDate,strMessage){
//Lineに送信するためのトークン
var strToken = ""; //トークンを入れる
var options =
{
"method" : "post",
"payload" : {"message" : strDataMessage + "に開始した稽古の録画処理が完了"+ strMessage},
"headers" : {"Authorization" : "Bearer "+ strToken}
};
var passwords =
{
"method" : "post",
"payload" : {"message" : strMessage.slice(strMessage.indexOf("ド:")+2,strMessage.indexOf(")"))},
"headers" : {"Authorization" : "Bearer "+ strToken}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
//UrlFetchApp.fetch("https://notify-api.line.me/api/notify",passwords);
}
④スクリプトをトリガー処理する(目覚まし時計のようなマークをクリックして、一定時間ごとに処理をする)
こちらで完成です!設定した時間おきにメールが確認されて、該当のメールがあった場合、LINEに共有されます!
まとめと補足
Gmailに届いたZoomのクラウドレコーディング情報を自動的に、LINEに共有する方法についてご説明しました。
今回の実装では、処理したメールかどうかをGmailのスター機能を使って実装しています。これだと当該メールがGmailで「重要」扱いされるようになってしまうので、場合によってはタグなどで管理した方が良いかもしれません。
また、本当はパスワードは単独で送信をしたいのですが、LINE NotifyではデフォルトでLINE Notifyのトークン発行時に設定した名前が文面頭に付与されてしまいます。スマートフォンだと、パスワード単独でのコピーが難しいので、ちょっとそこは不便になってしまっています。(Notifyの名前+パスワードを単独で送信したい場合は、スクリプトでコメントアウトしている部分を解除すると、パスワードは単独で送信されます。)
これによって、稽古場で録画されたものを自動的にLINEに共有することができ、大変便利になりました。