yt-dlpで作るYouTube動画ダウンロードツールプロジェクト

目次

プロジェクト概要

前提条件

  • Pythonプログラミングの基本的な知識(変数、関数、クラスの概念)
  • VSCodeエディタの基本操作ができること
  • ターミナル(コマンドライン)の基本的な使用経験
  • Gitとバージョン管理の基礎知識
  • インターネット接続環境の確保

開発環境

  • Python 3.7以上
  • VSCode(Visual Studio Code)
  • Git(バージョン管理システム)
  • GitHubアカウント
  • yt-dlp
  • FFmpeg(ファイル形式変換時に必要)

プロジェクト内容

このプロジェクトでは、yt-dlpライブラリを使用してYouTube動画を効率的にダウンロードするツールを構築します。初心者でも段階的に学習できるよう、基本的な環境設定から高度なカスタマイズ機能まで、4つのステップに分けて実装していきます。

プロジェクトの核となるのは、yt-dlpライブラリを使用した動画ダウンロード技術です。このライブラリはyoutube-dlのフォーク版として開発され、YouTubeをはじめとする多数の動画プラットフォームに対応しています。動画の品質選択、ファイル形式の指定、字幕の自動取得など、実用的な機能を備えたツールを開発します。

データ処理においては、動画の詳細情報(タイトル、再生時間、ファイルサイズ)を事前に取得し、ユーザーが適切な判断を行えるシステムを構築します。また、ダウンロード完了後には生成されたファイルの一覧表示機能も実装し、実際の業務で活用できる実用的なツールを作成できます。

プロジェクトの特徴として、ユーザビリティを重視したインターフェース設計を採用しています。動画品質の選択(480p、720p、1080p、最高画質)やファイル形式の変換(MP4、AVI、MKV)など、ユーザーのニーズに応じて柔軟にカスタマイズできる機能を提供します。また、設定確認機能により、ダウンロード前に選択内容を確認できるため、誤操作を防ぐことができます。

エラーハンドリングにも配慮し、ネットワークエラーや不正なURL入力に対する適切な対応機能を実装します。try-except文を使用した例外処理により、予期しない状況でもシステムが安定して動作するよう設計されています。また、URL検証機能により、対応サイトの自動判別も行います。

開発プロセスでは、オブジェクト指向プログラミングの概念を活用し、VideoDownloaderクラスを中心とした構造化されたコード設計を採用します。各機能を独立したメソッドとして実装することで、コードの可読性と保守性を向上させ、将来的な機能拡張も容易に行えるようになります。

最終的に、完成したプロジェクトをGitHubにアップロードし、ポートフォリオとして活用できる形にします。適切なドキュメント(README.md)の作成や、.gitignoreファイルの設定など、実際の開発現場で必要とされる技術も学習できます。

実装内容

  • yt-dlpライブラリの基本実装と動画ダウンロード機能
  • 仮想環境の構築と依存関係管理(requirements.txt)
  • 動画品質選択システム(480p、720p、1080p、最高画質)
  • ファイル形式変換機能(MP4、AVI、MKV形式対応)
  • 字幕自動取得機能(利用可能な字幕の自動ダウンロード)
  • 動画情報表示機能(タイトル、再生時間、ファイルサイズ)
  • URL検証機能とエラーハンドリング
  • GitHubでのバージョン管理とポートフォリオ公開

得られるスキル

  • yt-dlpライブラリ(動画ダウンロードと高度なオプション設定)
  • ファイル形式変換技術(FFmpegを使用した動画変換)
  • ユーザーインターフェース設計(コマンドライン操作の最適化)
  • エラーハンドリング(例外処理と安定性の確保)

得られる経験

  • 実際の動画プラットフォームとの連携経験
  • ユーザビリティを考慮したツール開発手法の習得
  • 仮想環境での開発環境構築と管理

得られる成果物

  • 完全に動作するYouTube動画ダウンロードツール
  • GitHubでのポートフォリオとして活用可能なプロジェクト
  • 完全なPythonソースコード

Step1:開発環境の準備とプロジェクト構造の作成

このステップでは、YouTubeダウンロードツールプロジェクトを始めるための開発環境を整備し、必要なファイル構造を作成していきます。プログラミングを始める前の準備段階として、とても重要な作業になります。

※Step1の内容がわからない際は、下記記事にGitHubとVSCodeの連携について詳細を記載しているためご参照ください。

GitHubリポジトリの作成

まず最初に、プロジェクト専用のGitHubリポジトリを作成しましょう。

  1. GitHubの公式サイトにアクセスし、自分のアカウントでログインします
  2. 画面右上の「+」アイコンをクリックし、ドロップダウンメニューから「New repository」を選択します
  3. 新しいリポジトリの作成ページで、以下の情報を入力します

リポジトリの設定

  • Repository nameyoutube_video_downloader」と入力
  • Descriptionyt-dlpを使用したYouTube動画ダウンロードツール」と入力
  • VisibilityPublic」を選択(ポートフォリオとして公開するため)
  • Initialize this repository with
    • Add a README file」のチェックは外す(Step4で作成するため)
    • Add .gitignore」で「Python」を選択
    • Choose a license」は「None」のままにする
  1. Create repository」ボタンをクリックしてリポジトリを作成します

プロジェクトフォルダの作成

次に、プロジェクトを管理するための親フォルダを作成しましょう。

Windows・macOS共通

  1. デスクトップや任意の場所に新しいフォルダを作成します
  2. フォルダ名は任意ですが、ここでは例として「PythonPortfolio」に設定します

この親フォルダが、今後のプロジェクト全体を管理するルートディレクトリとなります。複数のプロジェクトを整理して管理するために作成しておくと便利です。

VSCodeでプロジェクトを開く

作成したGitHubリポジトリをローカルにクローンして開きましょう。

  1. VSCodeを起動します
  2. 左側のアクティビティバーからソース管理アイコン(分岐のようなアイコン)をクリックします
  3. リポジトリの複製」ボタンをクリックします
  4. GitHubから複製」を選択します
  5. 先ほど作成した「youtube_video_downloader」リポジトリを選択します
  6. リポジトリ宛先として先ほど作成した親フォルダを選択します
  7. クローンしたリポジトリを開きますか」というウィンドウが表示されたら「開く」をクリックします

VSCodeの左側にエクスプローラーパネルが表示され、現在のプロジェクトフォルダの中身が確認できるようになります。

仮想環境の作成とアクティベート

Python開発において仮想環境は非常に重要です。仮想環境とは、プロジェクトごとに独立したPython実行環境を作成する仕組みのことです。これにより、プロジェクト間でのライブラリの競合を防ぎ、クリーンな開発環境を維持できます。

詳しくは下記記事をご参照ください。

Windows環境での仮想環境作成

  1. VSCodeの上部メニューから「ターミナル」→「新しいターミナル」を選択
  2. 以下のコマンドで仮想環境を作成します
python -m venv myenv
  1. 仮想環境をアクティベートします
myenv\Scripts\activate

macOS環境での仮想環境作成

  1. VSCodeの上部メニューから「ターミナル」→「新しいターミナル」を選択
  2. 以下のコマンドで仮想環境を作成します
python3 -m venv myenv
  1. 仮想環境をアクティベートします
source myenv/bin/activate

重要なポイント

  • 仮想環境名は「myenv」として作成
  • ターミナルの行頭に「(myenv)」と表示されることを確認
  • この表示があることで、仮想環境が正常にアクティベートされていることがわかります

プロジェクトファイル構造の作成

次に、今回のYouTubeダウンロードプロジェクトに必要なファイルを作成していきます。VSCodeのエクスプローラーパネルを使用してファイルを作成しましょう。

メインプログラムファイルの作成

  1. VSCodeの左側エクスプローラーパネルで「新しいファイル」アイコン(ファイルの絵とプラスのマークがあるアイコン)をクリック
  2. ファイル名を「video_downloader.py」として作成

この「video_downloader.py」ファイルが、今回のYouTube動画ダウンロード機能を実装するメインプログラムとなります。.py拡張子Pythonスクリプトファイルであることを示しており、実行可能なプログラムコードを記述するために使用します。

依存関係管理ファイルの作成

続いて、プロジェクトで使用するライブラリを管理するためのファイルを作成します。

  1. 同じくエクスプローラーパネルで「新しいファイル」アイコンをクリック
  2. ファイル名を「requirements.txt」として作成

requirements.txtファイルは、Pythonプロジェクトで使用する外部ライブラリとそのバージョンを記録するための重要なファイルです。これにより、他の開発者や本番環境でも同じライブラリ環境を再現できます。

requirements.txtの内容設定

作成した「requirements.txt」ファイルをVSCodeで開き、以下の内容を記述してください。

yt-dlp==2025.5.22

今回のプロジェクトでは、yt-dlpというライブラリを使用します。

  • yt-dlp YouTube、Internet Archive、その他の動画プラットフォームから動画をダウンロードするための強力なライブラリです。youtube-dlのフォーク版として開発され、より活発にメンテナンスされています。YouTubeの動画を効率的にダウンロードする際に使用します

プロジェクト構造の確認

この時点で、VSCodeのエクスプローラーパネルには以下のような構造が表示されているはずです。

youtube_video_downloader/
├── myenv/                 # 仮想環境フォルダ
├── video_downloader.py    # メインプログラムファイル
├── requirements.txt       # 依存関係管理ファイル
└── .gitignore             # Git除外設定ファイル(GitHub作成時に自動生成)

この基本構造が、今回のYouTubeダウンロードプロジェクトの基盤となります。GitHubで作成したリポジトリをクローンしたため、必要なファイルが最初から含まれています。

仮想環境が正常にアクティベートされていることを再度確認し(ターミナルに「(myenv)」が表示されている状態)、次のステップに進む準備を整えましょう。

ライブラリのインストール

仮想環境がアクティベートされている状態で、VSCodeのターミナルから以下のコマンドを実行します。

pip install -r requirements.txt

このコマンドにより、requirements.txtに記載されたyt-dlpライブラリがインストールされます。インストール処理には数十秒程度かかる場合がありますので、しばらくお待ちください。

インストールが完了すると、ターミナルに「Successfully installed yt-dlp-2025.5.22」のようなメッセージが表示され、プロジェクトの環境準備が完了します。

Step2:yt-dlpライブラリの基本実装

このステップでは、yt-dlpライブラリを使用してYouTube動画をダウンロードする基本機能を実装します。クラス構造を活用して、再利用可能で管理しやすいコードを作成していきます。

VideoDownloaderクラスの作成

まず、動画ダウンロード機能をまとめて管理するクラスを作成します。このクラスの中に、今後必要な機能をすべてdef文(関数)として実装していきます。

video_downloader.py」ファイルを開き、以下のコードを記述してください。

import yt_dlp
import os


class VideoDownloader:
    def __init__(self):
        self.download_path = "downloads"
        self.setup_download_directory()

initメソッドはクラスの初期化を行う特別な関数です。ここでダウンロード先のフォルダパスを設定し、ディレクトリの作成機能を呼び出します。

ダウンロードディレクトリの設定機能

次に、クラス内にsetup_download_directoryメソッドを実装します。

import yt_dlp
import os


class VideoDownloader:
    def __init__(self):
        self.download_path = "downloads"
        self.setup_download_directory()

このメソッドはクラス内で定義されているため、selfキーワードを使用してクラスの属性にアクセスできます。

yt-dlpオプションの設定

動画ダウンロードのオプション設定を管理するメソッドを追加します。

def get_download_options(self):
        options = {
            'format': 'best[height<=720]',
            'noplaylist': True,
            'outtmpl': f'{self.download_path}/%(title)s.%(ext)s',
        }
        return options

formatオプションは動画の品質を制御し、noplaylistでプレイリスト全体のダウンロードを防ぎます。outtmplでファイル名の形式を指定しています。

動画ダウンロード機能の実装

メインのダウンロード機能をクラス内に実装します。

def download_video(self, url):
        try:
            options = self.get_download_options()
            
            with yt_dlp.YoutubeDL(options) as downloader:
                print(f"動画情報を取得中: {url}")
                info = downloader.extract_info(url, download=False)
                
                print(f"タイトル: {info.get('title', '不明')}")
                print(f"再生時間: {self.format_duration(info.get('duration', 0))}")
                print("ダウンロードを開始します...")
                
                downloader.download([url])
                print("ダウンロードが完了しました")
                
        except Exception as e:
            print(f"エラーが発生しました: {str(e)}")

try-except文を使用してエラーハンドリングを行い、extract_infoメソッドで動画情報を事前に取得してからダウンロードを実行します。

時間フォーマット機能の実装

再生時間を見やすい形式に変換するメソッドを追加します。

def format_duration(self, seconds):
        if not seconds:
            return "不明"
        
        hours = seconds // 3600
        minutes = (seconds % 3600) // 60
        remaining_seconds = seconds % 60
        
        if hours > 0:
            return f"{hours}時間{minutes}分{remaining_seconds}秒"
        elif minutes > 0:
            return f"{minutes}分{remaining_seconds}秒"
        else:
            return f"{remaining_seconds}秒"

このメソッドでは、秒数を時間、分、秒に分解して日本語形式で表示します。**整数除算(//)剰余演算(%)**を使用して計算しています。

ユーザー入力処理機能の実装

ユーザーからの入力を処理し、ダウンロードを実行する機能を追加します。

def run(self):
        print("=== YouTube動画ダウンローダー ===")
        print("動画のURLを入力してください")
        print("例: https://archive.org/details/BigBuckBunny_124(テスト用)")
        print()
        
        while True:
            url = input("動画URL(終了する場合は 'q' を入力): ").strip()
            
            if url.lower() == 'q':
                print("プログラムを終了します")
                break
            
            if not url:
                print("URLを入力してください")
                continue
            
            if not self.validate_url(url):
                print("有効なURLを入力してください")
                continue
            
            self.download_video(url)
            print()

while Trueでループを作成し、ユーザーが終了を選択するまで継続してURL入力を受け付けます。

URL検証機能の実装

入力されたURLが有効かどうかを確認するメソッドを追加します。

def validate_url(self, url):
        valid_domains = ['archive.org', 'youtube.com', 'youtu.be']
        return any(domain in url for domain in valid_domains)

any()関数を使用して、指定されたドメインのいずれかがURLに含まれているかを確認します。

メイン実行部分の実装

プログラムのエントリーポイントを作成します。

def validate_url(self, url):
        valid_domains = ['archive.org', 'youtube.com', 'youtu.be']
        return any(domain in url for domain in valid_domains)

if name == “main”により、このファイルが直接実行された場合のみmain関数が呼び出されます。

動作テスト実行

VSCodeのターミナルでプログラムを実行してテストします。

python video_downloader.py

プログラムが正常に起動し、URL入力画面が表示されることを確認してください。

本プロジェクトでは動作テスト用として、Internet ArchiveのサンプルURL「https://archive.org/details/BigBuckBunny_124」を使用します。このURLを入力すると以下のような出力が表示されます。

動画情報を取得中: https://archive.org/details/BigBuckBunny_124
[archive.org] Extracting URL: https://archive.org/details/BigBuckBunny_124
[archive.org] BigBuckBunny_124: Downloading webpage
[archive.org] BigBuckBunny_124: Downloading JSON metadata
タイトル: Big Buck Bunny
再生時間: 9分56秒
ダウンロードを開始します...
[archive.org] Extracting URL: https://archive.org/details/BigBuckBunny_124
[archive.org] BigBuckBunny_124: Downloading webpage
[archive.org] BigBuckBunny_124: Downloading JSON metadata
[info] BigBuckBunny_124: Downloading 1 format(s): 2
[download] Destination: downloads/Big Buck Bunny.avi
[download] 100% of 316.85MiB in 01:45
ダウンロードが完了しました

yt-dlpライブラリは動画のダウンロード進行状況を詳細に表示し、完了まで進行率をリアルタイムで確認できます。ダウンロードされた動画ファイルは「downloads」フォルダ内に保存されるので確認してください。また、自分の保存したいYouTubeのURLで試してみてください。

Step3:ダウンロード品質とオプションのカスタマイズ

このステップでは、動画の品質選択機能ファイル形式の指定詳細オプション設定など、より実用的なカスタマイズ機能を実装します。ユーザーのニーズに合わせて柔軟にダウンロード設定を変更できるようになります。

品質選択機能の実装

VideoDownloaderクラス内に、動画品質を選択するメソッドを追加します。

def select_quality(self):
        print("\n=== 動画品質を選択してください ===")
        quality_options = {
            '1': {'format': 'best[height<=480]', 'description': '480p (標準画質)'},
            '2': {'format': 'best[height<=720]', 'description': '720p (高画質)'},
            '3': {'format': 'best[height<=1080]', 'description': '1080p (フルHD)'},
            '4': {'format': 'best', 'description': '最高画質(サイズ大)'}
        }
        
        for key, value in quality_options.items():
            print(f"{key}. {value['description']}")
        
        while True:
            choice = input("選択番号を入力してください (1-4): ").strip()
            if choice in quality_options:
                return quality_options[choice]['format']
            print("無効な選択です。1-4の番号を入力してください。")

このメソッドでは、辞書構造を使用して複数の品質オプションを管理し、ユーザーの選択に応じて適切なformat文字列を返します。

ファイル形式選択機能の実装

動画のファイル形式を選択する機能をクラス内に追加します。

def select_format(self):
        print("\n=== ファイル形式を選択してください ===")
        format_options = {
            '1': {'ext': 'mp4', 'description': 'MP4形式(汎用性が高い)'},
            '2': {'ext': 'avi', 'description': 'AVI形式(高品質)'},
            '3': {'ext': 'mkv', 'description': 'MKV形式(高機能)'},
            '4': {'ext': 'any', 'description': 'オリジナル形式(変換なし)'}
        }
        
        for key, value in format_options.items():
            print(f"{key}. {value['description']}")
        
        while True:
            choice = input("選択番号を入力してください (1-4): ").strip()
            if choice in format_options:
                return format_options[choice]['ext']
            print("無効な選択です。1-4の番号を入力してください。")

format_options辞書により、異なるファイル形式の特徴を説明付きで提供し、ユーザーが適切な選択を行えるようにしています。

get_download_optionsメソッドの変更

既存のget_download_optionsメソッドをget_custom_download_optionsに変更し、ユーザーの選択に基づいてオプションを動的に生成できるようにします。

def get_custom_download_options(self, quality_format, file_format):
        options = {
            'format': quality_format,
            'noplaylist': True,
            'outtmpl': f'{self.download_path}/%(title)s.%(ext)s',
            'writeinfojson': True,
            'writesubtitles': True,
            'writeautomaticsub': True,
        }
        
        if file_format != 'any':
            options['postprocessors'] = [{
                'key': 'FFmpegVideoConvertor',
                'preferedformat': file_format,
            }]
        
        return options

新しく追加されたオプションの説明

  • writeinfojson 動画の詳細情報をJSONファイルとして保存
  • writesubtitles 利用可能な字幕ファイルをダウンロード
  • writeautomaticsub 自動生成字幕もダウンロード
  • postprocessors ファイル形式変換の設定

設定確認表示機能の実装

選択された設定を確認表示するメソッドを追加します。

def display_settings(self, quality_format, file_format):
        print("\n=== 現在の設定 ===")
        print(f"動画品質: {quality_format}")
        print(f"ファイル形式: {file_format}")
        print(f"保存先: {self.download_path}/")
        print("追加機能: 動画情報・字幕も同時ダウンロード")
        
        confirm = input("\nこの設定でダウンロードしますか? (y/n): ").strip().lower()
        return confirm == 'y' or confirm == 'yes'

このメソッドは、ユーザーが設定を確認してからダウンロードを開始できるようにする確認機能を提供します。

download_videoメソッドの変更

既存のdownload_videoメソッドをdownload_video_with_optionsに変更して、カスタム設定に対応させます。

def download_video_with_options(self, url, quality_format, file_format):
        try:
            options = self.get_custom_download_options(quality_format, file_format)
            
            with yt_dlp.YoutubeDL(options) as downloader:
                print(f"\n動画情報を取得中: {url}")
                info = downloader.extract_info(url, download=False)
                
                print(f"タイトル: {info.get('title', '不明')}")
                print(f"再生時間: {self.format_duration(info.get('duration', 0))}")
                print(f"ファイルサイズ: {self.format_filesize(info.get('filesize', 0))}")
                
                if self.display_settings(quality_format, file_format):
                    print("\nダウンロードを開始します...")
                    downloader.download([url])
                    print("ダウンロードが完了しました")
                    self.show_downloaded_files(info.get('title', 'unknown'))
                else:
                    print("ダウンロードをキャンセルしました")
                
        except Exception as e:
            print(f"エラーが発生しました: {str(e)}")

メソッド名を変更し、品質とファイル形式のパラメータを受け取るように拡張しました。

ファイルサイズ表示機能の実装

ダウンロード前にファイルサイズを確認できる機能を追加します。

def format_filesize(self, size_bytes):
        if not size_bytes:
            return "不明"
        
        for unit in ['B', 'KB', 'MB', 'GB']:
            if size_bytes < 1024.0:
                return f"{size_bytes:.1f} {unit}"
            size_bytes /= 1024.0
        return f"{size_bytes:.1f} TB"

for文1024による除算を使用して、バイト数を適切な単位(KB、MB、GB)に変換して表示します。

ダウンロード完了ファイル表示機能の実装

ダウンロード完了後に生成されたファイル一覧を表示する機能を追加します。

def show_downloaded_files(self, title):
        print(f"\n=== ダウンロード完了ファイル ===")
        for filename in os.listdir(self.download_path):
            if title.replace(" ", "_") in filename or title in filename:
                filepath = os.path.join(self.download_path, filename)
                filesize = os.path.getsize(filepath)
                print(f"・{filename} ({self.format_filesize(filesize)})")

os.listdiros.path.getsizeを使用して、ダウンロードされたファイルとそのサイズを一覧表示します。

runメソッドの変更

runメソッドを変更して、新しいカスタム機能を活用します。

def run(self):
        print("=== YouTube動画ダウンローダー ===")
        print("動画のURLを入力してください")
        print("例: https://archive.org/details/BigBuckBunny_124(テスト用)")
        print()
        
        while True:
            url = input("動画URL(終了する場合は 'q' を入力): ").strip()
            
            if url.lower() == 'q':
                print("プログラムを終了します")
                break
            
            if not url:
                print("URLを入力してください")
                continue
            
            if not self.validate_url(url):
                print("有効なURLを入力してください")
                continue
            
            quality_format = self.select_quality()
            file_format = self.select_format()
            
            self.download_video_with_options(url, quality_format, file_format)
            print()

メソッドの流れにselect_qualityselect_formatを追加し、カスタム設定でのダウンロードを実行するように変更しました。

動作テスト実行

VSCodeのターミナルでプログラムを実行してテストします。

python video_downloader.py

サンプルURL「https://archive.org/details/BigBuckBunny_124」を入力後、品質とファイル形式の選択画面が表示され、設定確認を経てダウンロードが実行されることを確認してください。ダウンロード完了後には、動画ファイルと共に情報ファイル(.info.json)や字幕ファイルも生成されます。ダウンロードされたファイルは「downloads」フォルダ内に保存されるので確認してください。また、自分の保存したいYouTubeのURLで試してみてください。

Step4:プロジェクトをGitHubにアップロード

このステップでは、完成したYouTubeダウンロードツールをGitHubにアップロードし、ポートフォリオとして活用できる形にします。最終的なファイル整理とコードの公開を行っていきます。

.gitignoreファイルの更新

既存の.gitignoreファイルに、プロジェクト固有の除外設定を追加します。

VSCodeで「.gitignore」ファイルを開き、以下の内容を末尾に追加してください。

# Virtual environment
myenv/

# Downloaded video files
downloads/
*.mp4
*.avi
*.mkv
*.webm
*.flv

# Video metadata files
*.info.json
*.description
*.annotations.xml

# Subtitle files
*.vtt
*.srt
*.ass
*.ttml

これらを追加する理由について説明します。

  • myenv/ 仮想環境フォルダはプロジェクト固有のため、リポジトリに含める必要がありません
  • downloads/ ダウンロードされた動画ファイルの保存フォルダを除外
  • 動画ファイル形式 MP4、AVI、MKVなどの動画ファイルはサイズが大きいため除外
  • メタデータファイル yt-dlpが生成する情報ファイルを除外
  • 字幕ファイル 自動ダウンロードされる字幕ファイルを除外

README.mdファイルの作成

README.md」ファイルをVSCodeのエクスプローラーパネルで新規作成し、以下の内容を記述してください。

# YouTube動画ダウンロードツール

## プロジェクト内容
yt-dlpライブラリを使用してYouTube動画を効率的にダウンロードするツールです。動画品質の選択、ファイル形式の指定、字幕の自動取得など、様々なカスタマイズ機能を備えています。Pythonを使った動画処理技術とユーザーインターフェース設計を学習することを目的として実装しました。動作テストとしてInternet Archiveの教育動画も利用できます。

## プロジェクト構成
```
youtube_video_downloader/
├── video_downloader.py     # メインプログラム
├── requirements.txt        # 依存関係管理
├── README.md              # プロジェクト説明書
└── .gitignore             # Git除外ファイル設定
```

## 必要要件/開発環境
- **Python 3.7以上**
- **インターネット接続** (動画ダウンロードのため)
- **VSCode** (開発環境)
- **Git** (バージョン管理)
- **FFmpeg** (ファイル形式変換時に必要)

### 使用ライブラリ
- **yt-dlp 2025.5.22** 動画ダウンロード処理

## 機能
- **動画品質選択** 480p、720p、1080p、最高画質から選択可能
- **ファイル形式変換** MP4、AVI、MKV形式への変換対応
- **字幕自動取得** 利用可能な字幕ファイルの自動ダウンロード
- **メタデータ保存** 動画の詳細情報をJSONファイルで保存
- **ダウンロード進行表示** リアルタイムで進行状況を確認
- **エラーハンドリング** 接続エラーや不正URLへの対応
- **ファイルサイズ表示** ダウンロード前のサイズ確認機能
- **URL検証機能** 対応サイトの自動判別

## 実行方法

### 1. リポジトリのクローン
```bash
git clone https://github.com/yourusername/youtube_video_downloader.git
cd youtube_video_downloader
```

### 2. 仮想環境の作成・アクティベート

**Windows**
```bash
python -m venv myenv
myenv\Scripts\activate
```

**macOS**
```bash
python3 -m venv myenv
source myenv/bin/activate
```

### 3. 依存関係のインストール
```bash
pip install -r requirements.txt
```

### 4. プログラムの実行
```bash
python video_downloader.py
```

実行後、URL入力画面が表示されます。
YouTubeのURLを入力して動画をダウンロードできます。
停止するには 'q' を入力してください。

## 使用例
動作テスト用として以下のURLで確認できます。
```
https://archive.org/details/BigBuckBunny_124
```

## 対応サイト
- YouTube (youtube.com, youtu.be)
- Internet Archive (archive.org)

## ダウンロードファイル
動画ファイルは「downloads」フォルダに保存されます。
設定により以下のファイルが生成されます。
- 動画ファイル (.mp4, .avi, .mkv等)
- 動画情報ファイル (.info.json)
- 字幕ファイル (.vtt, .srt等)

## 開発者
YuYu

プロジェクトのコミット・プッシュ

プロジェクトの全ての変更をGitHubに反映させましょう。

変更のステージングとコミット

  1. VSCodeの左側のアクティビティバーからソース管理アイコンをクリックします
  2. 変更内容セクションで、すべての変更ファイルを確認します
  3. 各ファイルの横にある「+」アイコンをクリックしてステージングします
  4. コミットメッセージ入力欄に「Add YouTube video downloader with yt-dlp」と入力します
  5. コミット」ボタンをクリックします

GitHubへのプッシュ

  1. コミット完了後、「変更の同期」または「プッシュ」ボタンをクリックします
  2. 初回の場合、GitHub認証が求められる場合があります
  3. 認証完了後、ローカルの変更がGitHubリポジトリに反映されます

GitHubでの確認

プロジェクトが正常にアップロードされたか確認しましょう。

  1. ブラウザでGitHubリポジトリページを開きます
  2. 以下のファイルが正しくアップロードされていることを確認します
  • video_downloader.py (メインプログラムファイル)
  • requirements.txt (依存関係管理ファイル)
  • README.md (プロジェクト説明書)
  • .gitignore (更新された除外設定ファイル)
  1. README.mdが適切に表示され、プロジェクトの説明が読みやすく表示されていることを確認します
  2. ファイル一覧にmyenv/フォルダやdownloads/フォルダ、動画ファイルが含まれていないことを確認します(.gitignoreで除外されているため)

これで本格的なYouTubeダウンロードツールが完成し、GitHubでのポートフォリオ公開も完了しました。作成したプロジェクトは、就職活動や案件獲得時の実績として活用できる実用的なツールとなっています。

まとめ

このプロジェクトを通じて、yt-dlpライブラリを使用した動画ダウンロードツールの開発から実践的なアプリケーション構築まで幅広く学習することができました。

得られたスキル

  • yt-dlpライブラリ – 動画ダウンロードと高度なオプション設定
  • ファイル形式変換技術 – FFmpegを使用した動画変換処理
  • ユーザーインターフェース設計 – コマンドライン操作の最適化
  • エラーハンドリング – 例外処理と安定性の確保

得られた経験

  • 実際の動画プラットフォームとの連携経験
  • ユーザビリティを考慮したツール開発手法の習得
  • 設定管理とカスタマイズ機能の実装経験
  • プロジェクト管理の基本的な流れの理解
  • GitHubを使用したバージョン管理の実践的経験

得られた成果物

  • 完全に動作するYouTube動画ダウンロードツール
  • GitHubでのポートフォリオとして活用可能なプロジェクト
  • 完全なPythonソースコード

次に学ぶべきこと

  • **GUI(tkinter)**を使用した視覚的なインターフェースの追加
  • **設定ファイル(JSON/YAML)**による設定の永続化
  • ログ機能の実装によるダウンロード履歴の管理
  • プレイリスト一括ダウンロード機能の実装
  • 定期実行機能による自動ダウンロードシステムの構築

このプロジェクトから応用することでできること

  • 教育機関向け動画管理ツールの開発による案件受注
  • 企業研修動画の一括保存システムの構築
  • YouTubeチャンネルのバックアップサービスの提供
  • 動画コンテンツの品質管理ツールとしての活用
  • オフライン視聴用動画準備の自動化
  • 動画ファイル変換サービスの事業化

このyt-dlp技術を基盤として、教育分野や企業の動画管理ニーズに対応できるサービスを開発することが可能です。特に、定期的な動画収集や品質管理が必要な業務では、高い価値を提供できる技術として活用できます。

この記事が気に入ったら
フォローしてね!

この記事が参考になった方はシェアしてね!
  • URLをコピーしました!

本コンテンツへの意見や質問

コメントする

目次