YouTubeの再生リスト(プレイリスト)の中で重複している動画を一括で削除する方法が無いか探していました。
こんな感じで1つのプレイリストに同一の動画が複数登録されてしまっている状態を解消するため、1つだけ残して残りの重複分は全て消したいです。
じつは削除機能、以前は存在したみたいですが公式がその機能を廃止してしまったみたいです。(最低)
YouTubeの既存機能で重複動画の削除を行うのは不可能なので、それを代わりに自動で行ってくれるツールが無いか探したら一応ありました。
以下、使い方と手順を記載します。
再生リストから重複する動画を削除するスクリプトを利用
有志の方々がYouTubeのプレイリストから重複している動画を一括削除するJavaScriptコードを公開してくれているのでそれを利用します。(海外)
本当にありがたいです…!!
(パソコンから操作してください。以下の手順説明ではChromeブラウザを使用しています)
事前準備
まず、重複する動画を削除したい再生リストに移動します。
(再生リストのURLは https://www.youtube.com/playlist?list=英数字列 という形式になっているはずです)
次に、YouTubeの言語設定を英語に変更します。(ツールの対応言語が英語のみなので)
画面右上の自分のアカウントアイコンをクリックし、「言語」の設定を日本語から English (US) に変更します。
メニューが英語表記に変われば言語設定の変更は完了です。
スクリプトのコピーと実行
有志が開発したツールはこちらのリンク先にありました。
リンク:Is there a javascript to remove duplicate videos in a Youtube playlist?
こちらがそのJavaScriptコードです。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function $$(selector,context=document.documentElement){return[...context?.querySelectorAll?.(selector) ?? []]}
async function removeduplicates() {
let titles = $$("#primary a#video-title")
.filter((i,j,k)=>k.
findIndex(k=>k.href.includes(Object.fromEntries(new URLSearchParams(i.href))['https://www.youtube.com/watch?v']))!==j)
for (let i = 0; i < titles.length; i++) {
titles[i].focus()
titles[i].closest("#contents > *").querySelector('button[aria-label="Action menu"]').click()
await sleep(100)
var things = document.evaluate(
'//span[contains(text(),"Remove from")]',
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
await sleep(300)
for (var j = 0; j < things.snapshotLength; j++) {
things.snapshotItem(j).click();
}
console.log(titles[i].innerText)
}
}
removeduplicates()
<コードのライセンス表記>
user7094677さんがこちらのstackoverflowページに投稿したコードを転記したもの。コードのライセンスは 表示 - 継承 4.0 国際 (CC BY-SA 4.0)
このコードをコピーしたら、重複する動画を削除したい再生リストに移動します。
再生リストの動画数が多い場合は下の方のリストが読み込まれていない状態なので、下スクロールを繰り返してプレイリストが最後まで全て表示された状態にします。
そしてF12キーを押しデベロッパーツールを起動します。
画面右側にデベロッパーツールが現れるので、上にある「コンソール」(画像赤丸部分)をクリックしてください。
コンソールの赤枠で囲った部分が入力欄になっているので、先ほどコピーしたコードをここに貼り付けます。
貼り付けたらEnterキーを押します。
Enterキーを押した直後から再生リスト中で被っている動画がどんどん自動で削除されていきます。
削除が完了するまで画面をそのままにして待機します。
完了後無事、再生リストから重複動画をまとめて削除できました。
※うまく動かない場合は
Enterを押しても何も起きない場合は、一度ページをF5で再読み込みさせた後にもう一度コンソールにコードを貼り付けEnterしてみてください。
私の環境でもなぜか一回目の試行では動かなかったことがありました。
動作報告
一応、私の環境では上記画像のプレイリスト(10動画→6動画)以外のプレイリストでも重複動画削除が機能したことを確認しました。
(約550動画→340動画、184動画→177動画など。)
複数のプレイリストで重複動画削除を実行する場合は、一つスクリプトを実行したら一度ページを再読み込みしてから次のスクリプトを実行するようにしていました。
再生リストに動画が重複するケース
そもそもなんで一つの再生リストに同じ動画が複数個も登録されているのかって話になりますが、意外に重複登録される抜け道的なケースはあります。
- 動画を再生リストに追加した後すぐ再び再生リスト追加画面のポップアップを表示させると、追加したはずの再生リストにチェックマークが付いていない
↑この状態で再度チェックを入れると、動画が二重に登録される - ある再生リストの動画全部を別の再生リストに入れる機能「すべてを追加…」を使うと、たとえ追加先のリストと動画が重複していても無視して追加されるので重複が発生する
- サードパーティ製のYouTubeクライアントソフト・アプリなどで動画を再生リストに追加したときに重複が無視される
※逆に上述の方法で、一つのプレイリストに同じ動画を複数個入れることもできてしまいます。(活用方法は不明)