/ #Python #Docker 

YouTubeのピアノ演奏動画の全自動採譜(MIDI化)

はじめに

YouTube には沢山のピアノ演奏動画が上がっているかと思います。

ま○しぃさんとか、よみ○さんとか、事務員○さん、けいちゃ○さんなどが有名ですかね。 海外勢だとAni○enzさんが凄く凄いです(語彙力

この人達みたいにピアノを弾きたい!…は無理でも真似事がしたいですよね。 そうです楽譜…楽譜があれば、 MIDI ファイルがあれば!

そこで、 YouTube のチャンネルを指定することで、そのチャンネルに上がっている演奏動画を一括 MIDI ファイルに変換する便利な道具を作成しました。 (著作権とか色々怪しそうなので公開はしません…許して)

内容

フロー図

大まかな流れを図にしました。 9974aa20bef20004b0980bc6903a91a4.png

流れの説明

1. youtube data api v3 というAPIでチャンネル名から各動画のIDを抜きます。

2. yt_dlp を使用し、先程抜いたIDからURLを作成し、渡してあげることでmp3形式のファイルをダウンロードします。

:::note warn YouTube ダウンロードのメジャーな API である youtube_dlYouTube 側から帯域幅制限されるみたいです。解決策の一つである yt_dlp を代替として用いることで回避しました。 :::

3. Pydub を使用し、ダウンロードしたmp3ファイルをwav形式に変換します。

4. Google さんの MagentaOnsets and Frames モデルを使用しMIDIファイルに変換します。

今回は WSL の上で Ubuntu を動かして、その中で Docker を使用することで環境構築をしました。

Magenta については以下の記事に詳しくまとめているので参照ください。

結果

ま○しぃさんのチャンネルURLを指定することで画像のように203個のmidファイルを獲ることができました。やったね!

f506bb9906ac9d06b66db977a5eb01a0.png

困った点

Magentaの環境構築

Magenta を動かすには色々なものをインストールして、条件を満たさなければいけないです。(特にGPUをアクティブにしようとすると…)

そこで今回は Docker を使用することで楽しました。(環境構築で手間取るのは嫌ですからね^)

使用した Docker ファイルは以下のリンクからお借りしました。

私の Magenta の記事を見て作ってくれたみたいです。有能すぎる..

複数の wav ファイルを Magenta に食わせる方法

Magenta に渡すファイル名を指定するところでメタキャラを使いました。

" *.wav " のように渡すと全ファイル処理してくれます。絶対エラー吐くと思っていたのでラッキーでした笑

ちゃんとコード読んで、コードで実装できるようにしないとですね…

課題とこれから

  • Dockerfileを書いて本当に全自動化
  • 動画のURLを渡したらmidにしてくれるWebサービス

今回作成したプログラムではほとんどの作業を自動化できましたが、 フローでのそれぞれのプログラムが分かれています(環境も違うから…)。

よって全部自動化してWebサービスにできれば.. 乞うご期待