見出し画像

149 PythonとPillowでYouTube動画を自動で拡大スクショしちゃおう♪ #ゆきまるさんファンと繋がりたい

はじめに

こんにちは!TechCommitメンバーの友季子です♬
今回は、PythonとPillowでYouTube動画のスクリーンショットを1.5倍に拡大して保存する方法についてまとめてみました。PythonやSelenium、Pillowなどを使って、ページ全体のスクリーンショットを取得し、それを大きく保存してみましょう!

Pillowについて

Pillowは、画像処理を行うためのPythonライブラリで、PIL(Python Imaging Library)の派生版です。豊富な画像形式を扱え、簡単に画像の操作ができるため、画像加工やWebスクレイピングでのスクリーンショットの編集などに便利です。

やること

今回は推しのユーチューバー、ゆきまるさんの動画を自動で1.5倍の倍率で拡大してスクリーンショットを撮影していきます💗
カッコイイので是非長髪男子好きな方はチェックしてみたらいいと思います♪

今回の技術ポイント

ページの全体の高さを取得し、ブラウザのウィンドウサイズをその高さに設定して撮影します。


1. 必要なライブラリを準備しよう

このプロジェクトでは、以下のPythonライブラリを使います。まずは、必要なライブラリをインストールしましょう。

  • Selenium: Webページを自動操作できるツール

  • webdriver_manager: SeleniumのChromeDriverを簡単に管理するライブラリ

  • Pillow: Pythonで画像操作を簡単に行えるライブラリ

コマンドプロンプトやターミナルで以下のコマンドを実行して、ライブラリをインストールします。

pip install selenium webdriver-manager pillow

2. Pythonコード

次に、YouTubeの動画ページにアクセスし、スクリーンショットを撮影して拡大するためのPythonコードを見ていきましょう。以下がサンプルコードです。

全体

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from PIL import Image
import io
from datetime import datetime

# Seleniumでブラウザを起動
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# YouTube動画ページにアクセス
url = "https://www.youtube.com/watch?v=j149xpasByg"
driver.get(url)

try:
    # 明示的な待機を使用して、動画プレイヤー要素が見つかるまで待機
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'video.html5-main-video'))
    )
    
    # ページ全体の高さを取得する
    page_height = driver.execute_script("return document.body.scrollHeight")
    driver.set_window_size(1920, page_height)  # ページ全体を表示できるようにウィンドウサイズを変更

    # スクリーンショットを撮る
    screenshot = driver.get_screenshot_as_png()

    # Pillowで画像を読み込む
    image = Image.open(io.BytesIO(screenshot))

    # 画像を拡大する(1.5倍にする)
    width, height = image.size
    new_size = (int(width * 1.5), int(height * 1.5))  # サイズを整数に変換
    enlarged_image = image.resize(new_size, Image.LANCZOS)

    # 今日の日付を取得し、ファイル名に使用
    today = datetime.now().strftime("%Y-%m-%d")
    filename = f"ゆきまるさん1.5倍拡大_{today}.png"

    # 拡大した画像を保存
    enlarged_image.save(filename)

    print(f"拡大した画像を '{filename}' として保存しました。")

except Exception as e:
    print(f"Error: {e}")

finally:
    # ブラウザを閉じる
    driver.quit()

## 20241114ページ全体の高さを取得する。ゆきまるさんのYouTube動画を1.5倍で拡大してスクショする。
#from PIL import Image は、PythonのPillowライブラリの Image モジュールをインポートするコードです。このモジュールを使うと、画像を開いたり、編集したり、保存したりできます。

解説あり

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from PIL import Image
import io
from datetime import datetime

# Seleniumでブラウザを起動
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# YouTube動画ページにアクセス
url = "https://www.youtube.com/watch?v=j149xpasByg"
driver.get(url)

try:
    # 動画プレイヤーが読み込まれるまで待機
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'video.html5-main-video'))
    )
    
    # ページの全体の高さを取得し、ブラウザのウィンドウサイズをその高さに設定
    page_height = driver.execute_script("return document.body.scrollHeight")
    driver.set_window_size(1920, page_height)

    # スクリーンショットを取得
    screenshot = driver.get_screenshot_as_png()

    # Pillowで画像を読み込み
    image = Image.open(io.BytesIO(screenshot))

    # 画像を1.5倍に拡大
    width, height = image.size
    new_size = (int(width * 1.5), int(height * 1.5))
    enlarged_image = image.resize(new_size, Image.LANCZOS)

    # 日付をファイル名に追加して保存
    today = datetime.now().strftime("%Y-%m-%d")
    filename = f"ゆきまるさん1.5倍拡大_{today}.png"
    enlarged_image.save(filename)

    print(f"拡大した画像を '{filename}' として保存しました。")

except Exception as e:
    print(f"Error: {e}")

finally:
    driver.quit()

コード解説

  • driver.get(url): 指定したYouTubeのURLにアクセスします。

  • WebDriverWait(driver, 10).until(...): 明示的な待機を使用して、動画プレイヤー要素が表示されるまで待機します。

  • driver.set_window_size(1920, page_height): ページ全体が表示されるようにブラウザのサイズを変更します。

  • get_screenshot_as_png(): ページ全体のスクリーンショットをPNG形式で取得します。

  • Image.open(io.BytesIO(screenshot)): Pillowでスクリーンショットを読み込みます。

  • image.resize(new_size, Image.LANCZOS): 画像を1.5倍に拡大します。

  • enlarged_image.save(filename): 拡大した画像を指定した名前で保存します。

3. うまくいかないときは?

もしエラーが出てしまった場合、以下の点を確認してみてください:

  • ChromeDriverのパス: webdriver_managerを使えば自動でChromeDriverを取得できますが、環境によってはうまく動かないことがあります。その場合は、ChromeDriverのインストールやパス設定を再確認しましょう。

  • YouTubeのページ読み込み: 動画プレイヤー要素が見つからないエラーが出る場合は、URLが正しいか、ページが完全に読み込まれているかを確認してみてください。

終わりに

PythonとPillowを使って、Webページ全体のスクリーンショットを撮って拡大する方法をご紹介しました。

これからPythonを学び始めた方や、画像処理に興味のある方に役立てばと思い、書いてみましたがいかがでしたでしょうか。
画像編集等の前処理を使いこなしていきたい方には、特に役立つ技術です。
もしこの記事がPython学習の一助となれば幸いです。

また励みになるので、気軽にイイネとフォローしてもらえたらハッピーです。


いいなと思ったら応援しよう!