0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでYouTubeショート動画を自動アップロード

Posted at

PythonでYouTubeショート動画を自動アップロードするプログラムを作ってみた

はじめに

この記事はClaudeで書かれています。コードはGeminiによって書かれてます。
動画コンテンツ制作を効率化したい、特にYouTubeショートの投稿を自動化したいと思ったことはありませんか?

今回は、指定フォルダに動画ファイルを追加するだけで自動的にYouTubeショートとしてアップロードしてくれるPythonプログラムを作成しました。ファイル監視機能付きで、リアルタイムに動画をアップロードできます。

サンプル動画 🎬

AIで生成した猫のショート動画を、本プログラムで自動アップロードした例です。

スクリーンショット 2025-08-23 152321.png

▶ 動画はこちら(YouTube)

※ この動画はAIによって生成されたもので、実際の猫ではありません。

完成形のイメージ

  • 指定したフォルダを常時監視
  • .mp4.mov.avi.mkvファイルが追加されると自動検知
  • YouTube APIを使って自動的にショート動画としてアップロード
  • アップロード進捗をリアルタイム表示

必要な準備

1. Google Cloud Platformでプロジェクト作成とAPI有効化

  1. Google Cloud Consoleにアクセス
  2. 新しいプロジェクトを作成
  3. YouTube Data API v3を有効化
  4. 認証情報から「OAuth 2.0 クライアントID」を作成(アプリケーション種別:デスクトップアプリ)
  5. JSONファイルをダウンロードし、client_secrets.jsonとして保存

2. 必要なライブラリのインストール

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib watchdog

プログラムの主な機能

🔍 ファイル監視機能

watchdogライブラリを使用して、指定されたディレクトリをリアルタイムで監視します。

class VideoFileHandler(watchdog.events.FileSystemEventHandler):
    def on_created(self, event):
        if not event.is_directory and event.src_path.lower().endswith(SUPPORTED_EXTENSIONS):
            print(f"\n🆕 新しい動画ファイルを検知しました: {event.src_path}")
            time.sleep(5)  # ファイル転送完了を待機
            youtube_service = get_authenticated_service()
            upload_video_as_short(youtube_service, event.src_path)

🔐 OAuth 2.0認証

初回実行時にブラウザが開き、Googleアカウントでの認証を行います。認証情報はtoken.jsonに保存され、次回以降は自動で読み込まれます。

def get_authenticated_service():
    creds = None
    token_path = 'token.json'
    
    if os.path.exists(token_path):
        creds = Credentials.from_authorized_user_file(token_path, SCOPES)

    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRETS_FILE, SCOPES)
            creds = flow.run_local_server(port=0)
        
        with open(token_path, 'w') as token:
            token.write(creds.to_json())

    return build(API_SERVICE_NAME, API_VERSION, credentials=creds)

📤 YouTube API経由でのアップロード

ファイル名から自動的にタイトルを生成し、#Shortsタグを付与してショート動画として投稿します。

def upload_video_as_short(youtube, file_path):
    base_title = os.path.basename(file_path).rsplit('.', 1)[0]
    video_title = f"{base_title} #Shorts"
    
    body = {
        'snippet': {
            'title': video_title,
            'description': "このショート動画はPythonプログラムによって自動投稿されました。\n\n#Shorts #自動投稿",
            'tags': ['自動投稿', 'Python', 'API', 'ショート動画'],
            'categoryId': '22'  # People & Blogs
        },
        'status': {
            'privacyStatus': 'private'  # 非公開でアップロード
        }
    }
    
    media = MediaFileUpload(file_path, chunksize=-1, resumable=True)
    request = youtube.videos().insert(
        part=",".join(body.keys()),
        body=body,
        media_body=media
    )
    
    # アップロード進捗を表示
    response = None
    while response is None:
        status, response = request.next_chunk()
        if status:
            print(f"アップロード進捗: {int(status.progress() * 100)}%")

使い方

1. ファイル配置

your_project/
├── youtube.py
├── client_secrets.json  # Google Cloud Consoleからダウンロード
└── videos/              # 監視対象フォルダ(例)

2. プログラム実行

# カレントディレクトリを監視
python youtube.py

# 特定のフォルダを監視
python youtube.py /path/to/watch/folder

3. 動画ファイルをフォルダに追加

監視中のフォルダに.mp4.mov.avi.mkvファイルを追加するだけで自動アップロードが開始されます。

実行結果

スクリーンショット 2025-08-23 145236.png

対応ファイル形式の追加

SUPPORTED_EXTENSIONS = ('.mp4', '.mov', '.avi', '.mkv', '.webm', '.flv')

タイトル生成ロジックのカスタマイズ

# 現在の日時を含める例
import datetime
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
video_title = f"{base_title} - {current_time} #Shorts"

注意事項

  1. YouTubeの利用規約を遵守してください
  2. API制限:YouTube Data API v3には1日あたりのクォータ制限があります
  3. ファイルサイズ:YouTubeの動画ファイルサイズ制限(一般的に128GB)に注意
  4. セキュリティclient_secrets.jsontoken.jsonは機密情報なので適切に管理してください

応用アイデア

  • AI生成された動画の自動投稿:画像生成AIと組み合わせて自動コンテンツ作成
  • ライブ配信のハイライト自動投稿:OBSなどと連携してハイライトシーンを自動切り出し・投稿
  • 定期的なバッチ処理:cronジョブと組み合わせて決まった時間に一括アップロード
  • メタデータの自動生成:動画解析APIと組み合わせてタイトルや説明文を自動生成

まとめ

このプログラムを使えば、動画制作に集中して、投稿作業は完全に自動化できます。YouTube APIの強力な機能とPythonのシンプルさを組み合わせることで、効率的なコンテンツ投稿ワークフローを構築できました。

ぜひ皆さんの動画制作ワークフローに取り入れて、より多くの時間をクリエイティブな作業に使ってください!

参考資料

コード全体

詳細なコードは https://github.com/ishikawamasahito/YouTube-video-auto-posting で公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?