桐生ココさん卒業LIVEに合わせてモザイクアート動画を作成した話
これまでアップしてきた動画、アーカイブのサムネを使用してモザイクアートを作成して、動画にしました。
— ハリネズミの日記🥟ねねちのファンサイト公開中 (@hedgehog_nene) July 1, 2021
I will never forget the contributions and intentions you have made.#桐生ココ#みかじ絵 #桐生ココ卒業LIVE#GoodbyeCoco pic.twitter.com/SHEWwZYZJ6
Vtuberプロダクションのホロライブ所属の桐生ココさん2021/7/1に卒業することになり、同日卒業LIVEが行われました。
卒業LIVEに合わせて、モザイクアートと動画を作成したので、この記事は編集後記ということで、記述してます。
作成の経緯
元々自分は同じプロダクション所属の桃鈴ねねさんが大好きなので、正直特別何か作成しようという意欲はありませんでした。
ただ卒業の日が近づいてくるにつれて、段々と
「やっぱなんか作りてぇなー」
という気持ちが強くなりましたが、その気持ちのまま当日を迎えてしまいました。
ただ作りたい思いは消えないし、卒業してから作るより、卒業する前に作ることに価値を感じたので、作ることを決意。
ただ、もっと早くに思い立っていれば、もっと良いものを作れたのになぁ、ということは後悔してますが、公開して1時間ほどで、動画は2万再生されていたのを見て、作ってよかったなと実感しています。
モザイクアートってどうやって作るの?
先ほどの記述の通り、思い立ったのは当日です。
なので、作成時間としては5時間ほど。
モザイクアートは本来、大量の画像を使用して、作成するので、そんな短時間で作成できるのか、という課題があります。
その問題を解決してくれるのが、PythonとYouTube APIです。
PythonとYouTube APIを使用することで、短時間で大量の画像を取得することができます。
それこそ、今回のようにサムネイルの画像を一気に取得するということができるのです。
モザイクアートを作成するという観点からはうってつけの技術でもあります。
ただし、YouTube APIにはクォータ制限があります。
簡単に言うとAPIでリクエストを送ってレスポンスが返ってくる数がクォータでその制限があるということですね。
YouTubeさんもそんな簡単に動画情報を寄越してくれません。
ただ今回のように特定のチャンネルのサムネイルを一気に取得するくらいであれば、問題はないと思います。
なぜPythonを使用したのか?
ぶっちゃけPython以外の言語でも今回の技術は再現できます。
例えばRubyやGoでも可能です。
ただこれは個人の好みで、自分の場合はRubyも学習していたので、扱えはしますが、Pythonの方が文法が直感的で扱いやすいので、Pythonを採用しただけです。
なぜサムネイルなのか
APIを使用すれば大量の画像を短時間で取得することは可能です。
例えば、Twitter APIを使用すればTwitterでの画像を取得することができますし、スクレイピングという技術を使用すれば、Google検索をして画像を取得する、ということも可能です。
で、今回採用したのが、桐生ココさんのチャンネルのサムネイルなのですが、サムネイルにした理由は大きく3つです。
取得しやすいから
後ほど、取得のコードは記述しますが、YouTube APIを叩いて、サムネイルの画像を取得するのは簡単です。
逆にサーチしてサムネイル画像を取得するのはちょっと面倒で、「サーチする」という手間があります。
チャンネルのサムネイル画像であれば、チャンネル情報だけ入力しておけばOKなので、簡単なんです。
著作権の問題
二次創作に関しては下記にガイドラインがあります。
単純にチャンネルのサムネイルであれば特に申請なくとも利用ができます。
逆に切り抜き動画やTwitterなどにアップされているファンアートの場合、万が一申請が必要だった場合、面倒なので、避けたというわけです。
今回の場合、タイムリミットが5時間ほどしかなかったので、そんな申請のことなんて考えられませんでした。
本音を言えば、これをファンアートも使って作成できたら、もっとエモい作品になったのになぁとは思いますが、後悔先に立たず。
4期生全員の画像を使いたかったから
後ほど画像を掲載していますが、個人的に4期生のオリジナルソング「キセキ結び」という曲が大好きなので、そのジャケット画像を使用したかったんです。
そうなったときにやっぱり4期生5人の画像で作りたいなぁという気持ちがあったので、5人のチャンネルのサムネイルを採用しました。
コーディング
実際にサムネイル画像を取得したコードを下記に記載しておきます。
from apiclient.discovery import build
import json
import time
# APIを使うための情報を設定
DEVELOPER_KEY = "自分のDEVELOPER_KEY"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
developerKey=DEVELOPER_KEY)
item_list = []
search = youtube.search().list(
part = "snippet",
# https://www.youtube.com/channel/チャンネルID
channelId = "チャンネルID",
maxResults = 50 # 一回で取得する動画情報数は最大で50件まで
)
data = search.execute()
# 一度で取得できる動画情報の数は50件なので、全て取得するまで繰り返す処理
while True:
item_list = item_list + data["items"]
print(len(item_list))
print(data["pageInfo"]) #処理が行われている間は正常に処理されているか情報を出力
if "nextPageToken" not in data:
break #取得しきったら、処理を終了
time.sleep(1)
search = youtube.search().list_next(search, data)
data = search.execute()
# 取得したデータをjson形式で保存
with open('movieData.json', 'w', encoding="utf8") as f:
json.dump(item_list, f, ensure_ascii=False)
import json
import urllib.request
# 先ほどのjsonファイルを開く
json_file = open('movieData.json', 'r')
data = json.load(json_file)
json_file.close()
# jsonファイルをもとに画像をダウンロード
i = 1
for line in data:
# 画像ファイル名とファイルパス
image_file = "画像を保存したいパス" + str(i) + ".jpg"
i += 1
# URLの場所を指定して取得
url = line["snippet"]["thumbnails"]["medium"]["url"] #mediumの部分は画質
print(line["snippet"]["title"])
# urllibライブラリを使用して画像を保存
tgt = urllib.request.urlopen(url).read()
with open(image_file, mode='wb') as f:
f.write(tgt)
より詳しい情報を取得したい場合はYouTube APIのリファレンスを参照してください。
なお、YouTube APIは実際にコードで試す前に、テストできるので、便利です!
コーディングは割とサクッと終わりました。
元々、桃鈴ねねさんのファンサイトを作成したときにYouTube APIと散々戦ったので、その経験が大きかったですね。
良ければ、そちらのファンサイトも見ていってください。
モザイクアートの作成
この時点で、残り3時間。
残り3時間でモザイクアートなんて作れるのか....?
はい、作れます。
今回はこちらを使用しました。
インストールすると、レクチャー動画もあって、単純に元となる画像を読み込んで、さらにモザイクにしたい画像を読み込んで作成すれば完成です。
もちろんサイズにもよりますが、
この画像は作成されるまでに1時間近くかかりました....
元絵が暖色系メインで、線がはっきりしていない絵なので、モザイクを細かくしないとわかりづらかったのと、単純にこの画像にはホロライブ4期生全員のチャンネルの動画、アーカイブのサムネイルを使用しました。
確か2200枚ほどでした。
なので、元絵、使用する画像、設定次第ですが、出力に時間がかかるケースもあるということですね。
動画の作成
モザイクアートの作成と並行して、動画も作成してました。
自分にはYouTubeチャンネルもないので、Twitterにアップするしかないんです。
なので、動画を2分以内に収めないといけなかったわけです。
ここの構成が大変でしたね。
動画編集はFinal Cut Pro Xを使用しました。
正直もっとトランジションとか字幕とかおしゃれなやつにしたかったんですが...
時間がない!
正直動画編集にかけられた時間は1時間もなかったと思います。
完成&公開
完成した動画を見たら、まぁ良いかなという感じで、正直こんな反響があると思ってませんでした。
せいぜい100いいねくらいだと...そしたらその15倍のいいねが来ました笑
アップしてから1時間くらいはずーっと通知音が鳴りっぱなしでビックリ。
正直、この記事もサクッと書いておしまいの予定でした笑
本当に作ってよかったなと思いました。
最後に
今回、かなりサクッと作って、割とコーディングもサクサク進んでくれたので、助かりました。
あともっと早くから計画してれば、もっと良いもの作れたのになぁ、という気持ちはありました。
ただ皆さんの反応があったので、やっぱり作ってよかったなぁと思いました。
今回の卒業に対して、皆さん人それぞれいろんな想いがあるんだなぁと改めて感じました。(自分もその1人ですが)
言葉に出す人、出さない人、長文打つ人、短文の人、文句言う人、ひたすら限界化する人、落胆する人....色んな人がいますが、全て同じホロライブを楽しむ人ということには変わりないです。
そして、2021/7/1という日は永遠に変わらないです、桐生ココが卒業した日です。
卒業ライブの同時接続約50万人、少なくともその50万人にはずっとずっと心に残り続けるでしょう。
単純なユニークなユーザー数で言えばその倍はいるでしょう。
これから皆さんはどんな想いでホロライブを見るのでしょうか。
そしてこれからホロライブはどんな進化をするのか。
わからないことばかりですが、今回のことで痛感したのはその日その日を最大限楽しむこと、最大限推しを推すこと。
自分はこれからも桃鈴ねねさんをはじめ、ホロライブを応援していきますし、その応援をプログラミングという技術を使って応援していきたいと思ってます。