見出し画像

推しの動画のサムネイル画像をPCの背景にスライドショーで表示すると捗る

サムネ画像を鑑賞する機会が得られるとともに、「この動画面白いよな~」「この動画なんだっけ?」「この動画まだ見てないかも」という視聴のきっかけが得られます。捗る。

PCの背景をスライドショーにする方法

特定のフォルダにある複数の画像を、一定の時間間隔でランダムにPCの背景として表示する方法について説明します。

デスクトップの適当な場所で右クリックをして、「個人用設定」を選択します。

「背景」で「スライドショー」を選ぶと、「スライドショーのアルバムを選ぶ」という項目が出てきます。そこで、PCの背景として表示したい画像が置いてあるフォルダを選択します。あとは、時間間隔や、ランダムにするか、サイズをどうするか、などをお好みで決定すればOKです。

ぽんぽこちゃんねるの動画サムネ画像すべてを簡単にダウンロードする方法

肝心の画像をどうやって取得するかについて説明します。ぽんぽこちゃんねるを例に説明しますが、「サムネ付きの動画一覧ページがあるWiki」が整備されているチャンネルなら、同じ要領でできます。

ダウンロードしたサムネ画像をPCの背景に用いる行為は、著作権法においては、著作権法第30条第1項「私的使用のための複製」に該当すると思いますが、一応自己責任です。

まず、非公式Wikiで動画一覧のページを開きます(年別なので数回同じ作業が必要になります)。ダウンロード対象となるサムネ画像が表示されることを確認し、ブラウザのメニューから「名前を付けてページを保存」します(Google Chromeだと「その他ツール」の先にあります)。保存するときは、ファイルの種類が「ウェブページ、完全」となっていることを確認します。

ページを保存するとフォルダができているので、フォルダ内に移動します。

「表示」>「グループ化」と進んで「種類」を選びます。すると、フォルダ内のファイルが種類ごとに整理されます。種類が「JPGファイル」となっているファイルのうち、「(文字列)default(_数字).jpg」というファイル名のものがサムネ画像です。defaultの前にくる文字列はsd、mq、maxresなどが多いです。これらを一か所に集めてスライドショーのアルバムとして指定するわけです。

上級編:背景に表示されたサムネ画像の動画タイトルがわかるようにする方法

①サムネイル画像のファイル名を動画タイトルにして、②John's Background Switcher (JBS) という無料ソフトを使うことにより実現できます。

こんな感じ。JBSを使うと右上にファイル名(動画タイトル)を表示することができる。動画タイトルがわかっているので、非公式WikiやYouTubeで検索してすぐに動画にたどり着ける。捗る。
上図の例では、さらにファイル作成日を動画投稿日に変更している。捗る。

①についてはYouTube APIを使うのが手っ取り早いかなと思います。参考までにPythonコードを載せておきます。こちらの方法はWikiに頼らないので、あらゆるチャンネルに適用できます。ファイル作成日の変更はOS依存で、下記ではWindows前提で書いてます。

import pandas as pd
from apiclient.discovery import build
import cv2
import cv2u
import re
import os
import time
import datetime
import win32_setctime # 作成日変更に使う。Windowsで有効(WSLではダメ)

# Windows+OpenCVでは読み書きで日本語に問題があるのでその対策
# 参考: https://qiita.com/SKYS/items/cbde3775e2143cad7455
def imwrite(filename, img, params=None):
    try:
        ext = os.path.splitext(filename)[1]
        result, n = cv2.imencode(ext, img, params)

        if result:
            with open(filename, mode='w+b') as f:
                n.tofile(f)
            return True
        else:
            return False
    except Exception as e:
        print(e)
        return False

youtube = build('youtube', 'v3', developerKey='各自で用意するAPI用のキー')

video_id_list = []

request = youtube.playlistItems().list(
    part='snippet',
    maxResults=50,
    playlistId = 'UU1EB8moGYdkoZQfWHjh7Ivw', # ぽんぽこちゃんねるの動画一覧のプレイリストID
)

while request:
    response = request.execute()

    rows = []
    for x in response['items']:
        date = x['snippet']['publishedAt']
        title = x['snippet']['title']
        thumbnails = pd.DataFrame.from_dict(x['snippet']['thumbnails']).T
        ix = thumbnails.width.astype(int).argmax() # サムネ候補から解像度最大のものを特定
        url = thumbnails.iloc[ix].url
        rows.append([date, title, url])

    video_id_list.extend(rows)
    request = youtube.playlistItems().list_next(request, response)

for i, (date, title, url) in enumerate(video_id_list):
    title = re.sub(r'[\\|/|:|?|.|"|<|>|\|]', '-', title) # ファイル名に使用不能な文字を-に置換
    path = f'保存先フォルダ\{title}.png'
    if os.path.exists(path):
        print(f'{i} EXIST {title}') # すでに存在する場合はスキップ
    else:
        print(f'{i} {title}')
        im = cv2u.imgcodecs.urlread(url) # サムネ画像を取得
        time.sleep(2)
        imwrite(path,im) # ファイル名を動画タイトルにして保存
        ctime = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%SZ").timestamp()
        win32_setctime.setctime(path, ctime) # ファイル作成日を動画投稿日に変更





この記事が気に入ったらサポートをしてみませんか?