ひろゆきDBという謎サイトを見つけたのでちょっと仕組みを考えてみた。

この記事ではYoutubeに関連したライブラリやツールを軽く紹介します。

## ひろゆきDBとは
https://hiroyukidb.net/

西村 博之さんのYoutubeライブを話題ごと(ほとんどスパチャに対する回答)に区切ったサイト。
きりぬき動画を作るのに使用されてるようです。

自動でYoutube動画を話題別に区切ることが可能なのか気になり、YoutubeAPIやサードパーティライブラリを検証しました。
残念ながらYoutubeAPIで文字起こしやスパチャを取得する方法を見つけられませんでした。

## 文字起こし
文字起こしとはライブ配信の音声を自動で作成されたテキストデータ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357677/69b1a2a3-57bd-8ab4-4273-924d009deb56.png)



### DOWNSUB

https://downsub.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357677/a7b226e7-a6ff-f164-5b2e-79dc04b090bc.png)

`SRT`は動画の再生時間帯と文字起こしがセットになっています。

```SRT.txt
8
00:00:15,600 --> 00:00:21,360
なんだっけあの枚工場はてましたけどハイダーの大崎解けないからなんかあの大参加者

9
00:00:21,360 --> 00:00:22,380
グレイスんですけども

10
00:00:22,380 --> 00:00:25,370
はいなんかボリュームでかい気がするの

11
00:00:25,370 --> 00:00:29,240
ってだけでエイターの僕シラフでしゃべり続けるのはがきついので8ビールの言います
```



`TXT`は文字起こしのみとなります。

```TXT.txt
なんだっけあの枚工場はてましたけどハイダーの大崎解けないからなんかあの大参加者

グレイスんですけども

はいなんかボリュームでかい気がするの

ってだけでエイターの僕シラフでしゃべり続けるのはがきついので8ビールの言います

```


###  youtube-dl

https://github.com/ytdl-org/youtube-dl

#### ツールのダウンロード方法

下記のコマンドを実行。
```
brew install youtube-dl
```

#### ツールの動かし方

```
youtube-dl --sub-lang ja --write-auto-sub --sub-format srt --skip-download eBcLrgrU3aQ
```

- `--sub-lang ja`
    - 文字起こしの言語
- `--write-auto-sub`
    - 自動文字起こしを指定します。
- `--sub-format srt`
    - `srt`か`ass/srt/best`を指定できるが、正直違いがわからないがとりあえず指定する。
- `--skip-download`
    - 文字起こしだけほしいので動画をダウンロードしません。
 
出力結果の整形が必要っぽい。
余分なデータを省くオプションは見つからず、これが限界。

```出力結果.txt
00:00:21.350 --> 00:00:21.360 align:start position:0%
なんだっけあの枚工場はてましたけどハイダーの大崎解けないからなんかあの大参加者
 

00:00:21.360 --> 00:00:22.370 align:start position:0%
なんだっけあの枚工場はてましたけどハイダーの大崎解けないからなんかあの大参加者
グレイス<00:00:21.600><c>ん</c><00:00:21.630><c>です</c><00:00:21.750><c>けど</c><00:00:21.900><c>も</c>

00:00:22.370 --> 00:00:22.380 align:start position:0%
グレイスんですけども
 

00:00:22.380 --> 00:00:25.360 align:start position:0%
グレイスんですけども
はい<00:00:23.100><c>なん</c><00:00:23.340><c>か</c><00:00:23.400><c>ボリューム</c><00:00:23.790><c>で</c><00:00:23.880><c>か</c><00:00:24.000><c>い</c><00:00:24.029><c>気</c><00:00:24.119><c>が</c><00:00:24.180><c>する</c><00:00:24.360><c>の</c>

00:00:25.360 --> 00:00:25.370 align:start position:0%
はいなんかボリュームでかい気がするの
```


## スーパーチャット
ライブチャットはyoutube公式のAPIを使って取得する方法はわかりませんでした。(ないらしい)
紹介してる手法は自前でスクレイピングするものしかありませんでした。
youtubeの規約でスクレイピングするのは良くないので使用には注意が必要。


### pytchat
Python使うことが前提
これもスクレイピングしてると思います。

https://github.com/taizan-hokuto/pytchat


#### ダウンロード方法


```
pip install pytchat
```

#### 出力データについて

`"type":"superChat"`であるデータスーパーチャットになります。
メッセージだけではなくて、金額などが取得できているので色々面白いことができそう。

```output.json
  {
    "author": {
      "badgeUrl": "",
      "type": "",
      "isVerified": false,
      "isChatOwner": false,
      "isChatSponsor": false,
      "isChatModerator": false,
      "channelId": "UCxXK21LxmyIiN5wuye7YjRQ",
      "channelUrl": "http://www.youtube.com/channel/UCxXK21LxmyIiN5wuye7YjRQ",
      "name": ": zunbero",
      "imageUrl": "https://yt4.ggpht.com/ytc/AAUvwnhhltX_ZUIvaFKkwCKaR0fviD91aTnsm2_dg6jG=s64-c-k-c0x00ffffff-no-rj"
    },
    "type": "superChat",
    "id": "ChwKGkNLZS1fb3I5aF9FQ0Zka041d29ka0FVQ0VB",
    "timestamp": 1623153273690,
    "elapsedTime": "0:10",
    "datetime": "2021-06-08 20:54:33",
    "message": "ひろゆきさんは金使わないと公言してますが、溜まってるお金はどうしようと考えているんですか？",
    "messageEx": [
      "ひろゆきさんは金使わないと公言してますが、溜まってるお金はどうしようと考えているんですか？"
    ],
    "amountValue": 520.0,
    "amountString": "¥520",
    "currency": "¥",
    "bgColor": 4280150454,
    "colors": {
      "headerBackgroundColor": 4278239141,
      "headerTextColor": 4278190080,
      "bodyBackgroundColor": 4280150454,
      "bodyTextColor": 4278190080,
      "timestampColor": 2147483648,
      "authorNameTextColor": 2315255808
    }
  },
```


## 最後に
スーパーチャットの内容と文字起こしを使えばひろゆきDBのようなサイトは自動で簡単につくれると思ったのですが、実際は難しいです。
サイト下部にも記載されてますが、有志によるチャプター情報を使っているようなので多少は手動で作る必要があるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357677/968eb111-6223-4227-03b8-d1ecf023aceb.png)