yt-dlpとpythonで簡単youtubeライブ配信動画ダウンロード

未分類

pytube等でダウンロードを試みたのですが、解像度が低いものしか落とせなかったりして上手く動作しなかったのでを利用したダウンロードするPythonプログラムを作成しました。
以下の手順に沿ってダウンロードするプログラムの準備し、以下Pythonコードを実行してください。

yt-dlp.exe&FFmpegをダウンロード

以上のようなボタンが二つのリンク先にあるのでダウンロードしてください。

yt-dlp.exe

FFmpeg

配置するフォルダを決める

以上のようにエクスプローラーで落としてきたファイルを一つのフォルダにまとめます。
「動画ダウンロード.py」は以下のコードを貼り付けます。

ダウンロードするメインのpythonコード

import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import subprocess


def get_video_data(channel_url):
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')

    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=options)

    driver.get(channel_url + '/streams') # ライブ配信のページにアクセス
    time.sleep(5)  # ページのロードを待つために数秒待機

    video_elements = driver.find_elements(By.CSS_SELECTOR, "#contents.ytd-rich-grid-row a#thumbnail.inline-block.style-scope")
    video_titles = driver.find_elements(By.CSS_SELECTOR, "#video-title")

    video_data = [(elem.get_attribute('href'), title.text) for elem, title in zip(video_elements, video_titles)]

    driver.quit()
    return video_data


def download_videos(channel_url, download_folder, ytdlp_path):
    if not os.path.exists(download_folder):
        os.makedirs(download_folder)

    video_data = get_video_data(channel_url)
    print(video_data)

    for url, title in video_data:
        video_path = os.path.join(download_folder, f"{title}.mp4")
        if os.path.exists(video_path):
            print(f"Skipping {title}, already downloaded.")
            continue

        command = [ytdlp_path, url, "-o", video_path]
        subprocess.run(command, check=True)
        print(f"Downloaded {title}")


# 使用例
channel_url = 'https://www.youtube.com/???????????'  # チャンネルのURLを指定 適宜編集してください
download_folder = r'C:\VIDEO\??????????'  # ダウンロード先のフォルダを指定 適宜編集してください
ytdlp_path = os.path.join(os.path.dirname(__file__), "yt-dlp.exe")  # yt-dlpのパスを指定 適宜編集してください

download_videos(channel_url, download_folder, ytdlp_path)

コメント

タイトルとURLをコピーしました