僕は思いました。YouTube Musicにアップロードした曲を整理したいなと。
そして気が付くのです。アップロードした曲を一括で削除する機能が無いことに。

なん... だと...
一括削除はどこに?
初期のYouTube Musicは一括選択みたいな機能があった気がするんですよね。
えっ、この機能消えちゃったの? これアルバム単位で手動ってこと? 指が死ぬわ。

そもそも何曲あるの?

約20000曲。アルバム単位なら3000枚くらい。

それはそれは...
YTMusic Deleterを使う
なくなったものは仕方ない。じゃあ、手動でやるか!とはならないのがエンジニア。
これを何としても自動化します。こんなの手動でやってたら500年は掛かるぜ。
と言うことで、有志の方が作ってくださったYTMusic Deleterを使います。
https://github.com/apastel/ytmusic-deleter
YouTube Musicは公式APIがないのでytmusicapiと呼ばれる非公式APIが存在します。
https://ytmusicapi.readthedocs.io/en/stable/index.html
先程のYTMusic Deleterは内部的にytmusicapiを使ってるみたいですね。
当然、非公式APIの時点で利用は自己責任です。何かあったら自分で解決して。
後、現在()は認証方法が変わってるので、自称パソコンの先生程度では扱うのは無理。
英語のドキュメントが読めること、リクエストヘッダー等の知識があることが最低条件です。
YTMusic Deleterをインストールする
普通にGitHubから落とします。WindowsならGUI用のインストーラーがあります。
https://github.com/apastel/ytmusic-deleter/releases

だが俺はCLIを使うぜ!

何で?!

そのほうが面白いからだ!
と言うことで、インストーラーは使いません。せっかくなのでUbuntu経由で使いましょう。
まぁ、UbuntuといってもWSL経由なので実質Windowsです。てか、僕Windows側にPython入れてないんですよね。
インストールはコマンド一発です。
pip install ytmusic-deleter
もしくはこっち。
pip3 install ytmusic-deleter
PATHを通せば公式っぽく使えますが、めんどいのでアプリを直で叩きます。
たぶん、次のパスに入ってると思うのでディレクトリを移動します。
cd /home/{ユーザー名}/.local/bin
lsしてytmusic-deleterが見つかればヨシ!
それか次のコマンドでヘルプでも表示しよう。
./ytmusic-deleter --help
YouTube Musicにログインする
ここが特殊です。簡単に言うと、ログイン済みのブラウザからログイン情報を引っこ抜いて渡します。
引っこ抜く方法はChrome等の開発機能を使います。よく分かりませんがFirefoxが推奨らしい。
ちなみに正確にはログインするためのJSONを作る感じ。それが各コマンドで利用されます。
ドキュメントはこちら。
https://ytmusicapi.readthedocs.io/en/stable/setup/browser.html#browser-authentication
動画もあるよ。
https://youtu.be/FZ7gaMTUYN4
でっ、引っこ抜いた情報は後で使うので、コピーしてメモ帳にでも貼り付けておきましょう。
たぶん、ここの話が1番難しいので、ここをクリアできないなら使うの諦めたほうがいい。
では、実際にログインします。次のコマンドを叩きましょう。
./ytmusic-deleter whoami
そうするとコピった情報を貼り付けろって言われます。なのでコピペします。
後は画面の指示どおりCtrl + D?で確定すればOK。Errorが出なければヨシ!
YTMusic Deleterで一括削除する
ログイン情報があれば各種コマンドが利用できます。
そしてアップロードした曲を一括削除するのが次のコマンドです。
./ytmusic-deleter delete-uploads
ログイン情報に問題がなければ全曲の削除が始まります。こんな感じですね。

でっ、最後にこうなると完了です。
[2025-04-19 18:17:23] Deleted 3264 out of 3264 uploaded albums (or songs).
Albums Processed 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 3264/3264 [48:43<00:00, 1.12 albums/s]
3264枚のアルバムが約50分で削除完了。
手動500年と比べると素晴らしい速さですね。
Error解決
実は最初は成功しなくて、それを解決するのに6時間くらい掛かりました。
使ってる人も少ないのか日本語の記事は殆どないですね。

そもそもCLIで使ってる人がいない説。

だろうね。
UnicodeEncodeError
次のようなErrorです。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
これを発生させてるのはclient.pyのheader.encode('ascii')です。
たぶん、文字コード的な問題ですね。ログイン情報のエンコードに失敗してるっぽい。
File "/usr/lib/python3.10/http/client.py", line 1248, in putheader
header = header.encode('ascii')
ログイン情報はytmusic-deleterと同階層のbrowser.jsonに記録されてます。
それを開いて中身を確認しましょう。僕の場合は最後に変なゴミが混じってました。
{
"accept": "*/*",
"etc...": "",
"etc...": "",
"etc...": "",
"\u30c7\u30b3\u30fc\u30c9\u6e08\u307f": "}"
}
これを修正してリトライです。
だが、成功せず。次に続きます。
No uploaded songs were found.
こんな感じのErrorです。まぁ、Errorでは無いのですが。
[2025-04-19 15:10:11] No uploaded songs were found.
[2025-04-19 15:10:11] Deleted 0 out of 0 uploaded albums (or songs).
そのままの意味でアップロードした曲が無いって言ってます。
何故でしょうか。実はこれ、正しくログインできてません。
コピペしたリクエストヘッダーがゴミ混じりで正しくログインできない的なやつです。
と言うことで、コピペした内容を確認しましょう。何か途中に邪魔な日本語いますね。
accept:
*/*
etc...
デコード済み:
message ClientVariations {
// Active Google-visible variation IDs on this client. These are reported for analysis, but do not directly affect any server-side behavior.
etc...
}
etc...
はぁ、これだから日本語は駄目なんだよ。その意味不明なデコード済み:って文字列を消しましょう。
そうするとあら不思議。やっと各種コマンドが実行できるようになります。やったね。
あとがき
アルバムが約3000枚とか言いましたが、殆どが重複なんですよね。
Google Play Musicの頃はFLACが未対応(覚えてない)だったので、追加でアップしたのが被ってる感じ。
と言うか、アップロードした曲を編集できないのがYouTube Musicの問題だと思うんですよ。
この記事は参考になりましたか?
コメント