にゃみかんてっくろぐ

猫か百合を見守る壁になりたい

VTuber が歌った曲をまとめたい 前半(検討編)

VTuber にハマり気味です。

その中で、「過去、どんな曲を歌っていたのかな」と知りたくなりました。その欲求を満たしていきます。

対象動画は「すべて」

対象の動画は「すべて」です。

ライブ配信する VTuber の配信スタイルは多種多様です。 はっきり「歌枠(カラオケ配信的なもの)」と題しているものもあれば、 そうでない配信で突発的にアカペラや歌が始まることもあります。

そのため、すべての動画(配信アーカイブ)を対象にします。

検討: 曲の列挙方法

曲の列挙方法はいくつか思い浮かびます。結論は [2.] ですが、そこへ至るために検討した内容を整理していきます。

方法 所要時間 実現可能性 網羅性
1. 配信アーカイブをすべて見る 長い 低い 高い
2. 動画コメント欄にある時間指定コメントを活用する 短い 高い 中くらい
3. ライブ配信のチャット欄メッセージを活用する - 不可 中くらい
4. YouTube の自動生成字幕を活用する - 不可 低い
5. 楽曲認識 API を使う 中くらい 中くらい 中くらい

1. 配信アーカイブをすべて見る

手作業で動画をすべて見ていく方法です。

これは非常に大変です。ほとんどの VTuber は配信アーカイブが 100 時間以上。 1000 時間を超える方も珍しくありません。

たくさん配信があるのは嬉しい限りですが、「曲を列挙する」ために見直すのはいささか辛いものがあります。

2. 動画コメント欄にある時間指定コメントを活用する

動画コメント欄にある、下記のような「時間指定コメント」を用いる方法です。

f:id:no_clock:20210117033801p:plain
【歌枠】ゆどうふってやっぱポン酢【メリッサ・キンレンカ/にじさんじ】 コメント欄より引用

YouTube Data API v3CommentThreads があり、 API で取得可能です。

網羅性はユーザのコメントに依存しますが、私の観測範囲では比較的高い確率で書かれているようです。

3. ライブ配信のチャット欄メッセージを活用する (不可)

ライブ配信の右側にあるチャット欄メッセージを用いる方法です。

f:id:no_clock:20210117024232p:plain
YouTube ライブ配信の画面構成

ただし、これは実現不可です。過去のチャット欄を取得する API がないためです。

API を確認すると、 YouTube Data API v3 Videos に次の記述があります。つまり、 activeLiveChatId があるのは配信中のみです。

liveStreamingDetails.activeLiveChatId

string
(省略) This field is filled only if the video is a currently live broadcast that has live chat. Once the broadcast transitions to complete this field will be removed and the live chat closed down. (省略)

activeLiveChatId がないため、チャットメッセージの取得 API (YouTube Live Streaming API / LiveChatMessages) は利用できません。

残るはスクレイピングですが、利用規約で禁止されています。

本サービスの利用には制限があり、以下の行為が禁止されています。

(省略)

3. 自動化された手段(ロボット、ボットネット、スクレーパなど)を使用して本サービスにアクセスすること。ただし、(a)公開されている検索エンジンYouTuberobots.txt ファイルに従って使用する場合、または(b)YouTube が事前に書面で許可している場合を除きます。

利用規約 (YouTube)

4. YouTube の自動生成字幕を活用する (不可)

自動生成されている字幕データを用いる方法です。

f:id:no_clock:20210117034221p:plain
【SNOW MIKU 公式曲】好き!雪!本気マジック feat. 初音ミク【Mitchie M】 (CC-BY 4.0)
(本動画の字幕は自動生成ではないが、字幕の表示例として掲載)

ただし、これも実現不可です。

YouTube Data API v3 Captions download で取得を試みると 403 が返却されます。

{
  "error": {
    "code": 403,
    "message": "The permissions associated with the request are not sufficient to download the caption track. The request might not be properly authorized, or the video order might not have enabled third-party contributions for this caption.",
    "errors": [
      {
        "message": "The permissions associated with the request are not sufficient to download the caption track. The request might not be properly authorized, or the video order might not have enabled third-party contributions for this caption.",
        "domain": "youtube.caption",
        "reason": "forbidden",
        "location": "id",
        "locationType": "parameter"
      }
    ]
  }
}

公式ドキュメントには明記されていませんが、本人もしくは字幕追加の協力者 (2020/9/28 をもって機能終了) でないとダウンロード出来ないのではないか、という話があるようです。

youtube api - Downloading captions always returns a 403 - Stack Overflow

スクレイピングは [3.] と同様で利用規約に引っかかります。

5. 楽曲認識 API を使う

音声データを API に投げて曲名を教えてもらう方法です。 ACRCloudAudD などが提供しています。ただ、いくつか問題があります。

認識精度。 別サービスですが Google アシスタントの「近くで流れている曲について調べる」機能をちょっと触った限りでは、一致率 (?) が低いものもありました。悪くはありませんが、十分とも言い難い印象です。

f:id:no_clock:20210117030806p:plain
ヴィーナスとジーザス (アカペラ配信) と KING (カバー) の認識結果

オリジナル曲の扱い。 楽曲データベースの構築方法はわかりませんが、 Google アシスタントだと何らかの商用配信が必要そうな気配があります。 YouTube にアップロードされているのみのオリジナル曲は認識されませんでした。

料金。 大量の配信アーカイブAPI に通すにはかなりのお金が掛かってしまいます。

前半のまとめ

ここまで、 VTuber が歌った曲を列挙する方法を検討してきました。表を再掲します。

方法 所要時間 実現可能性 網羅性
1. 配信アーカイブをすべて見る 長い 低い 高い
2. 動画コメント欄にある時間指定コメントを活用する 短い 高い 中くらい
3. ライブ配信のチャット欄メッセージを活用する - 不可 中くらい
4. YouTube の自動生成字幕を活用する - 不可 低い
5. 楽曲認識 API を使う 中くらい 中くらい 中くらい

挙げた方法の中では、「2. 動画コメント欄にある時間指定コメントを活用する」が比較的よさそうです。後半でこれを具現化していきます。