AIで動画生成を始めると、次に欲しくなるのが「投稿の自動化」です。 毎日1本、あるいは数本の動画を手動でアップロードするのは意外と時間がかかります。
本記事では、Mac環境でPythonを使い、指定したフォルダに動画を置くだけで、以下の作業をすべて自動化する仕組みを解説します。
- タイトル生成(ファイル名から自動作成)
- 動画アップロード
- サムネイルの自動設定
- 投稿済みファイルの自動仕分け整理
一度構築してしまえば、あなたは動画を作ってフォルダに入れるだけ。あとの面倒な作業はMacに任せましょう。
1. 準備:MacにPythonをインストールする
まずはプログラムを動かす環境を作ります。
- Python公式サイトからインストーラーをダウンロードし、インストールしてください。
- Macの「ターミナル」アプリを開き、
python3 --versionと入力してバージョンが表示されればOKです。 - 作業用フォルダを作り、準備を整えます。ターミナルに以下を順にコピペしてください。Bash
mkdir ~/Desktop/youtube_automation cd ~/Desktop/youtube_automation python3 -m venv venv source venv/bin/activate pip install google-api-python-client google-auth-oauthlib
2. YouTube API(Google Cloud)の設定
YouTubeを操作するための「合鍵」を取得します。
- Google Cloud Consoleでプロジェクトを作成。
- YouTube Data API v3を有効にします。
- OAuth同意画面を設定し、必ず自分のGmailアドレスを**「テストユーザー」**に追加してください(※これを忘れるとエラー403で動きません)。
- 認証情報から「OAuth 2.0 クライアント ID」を「デスクトップアプリ」として作成し、JSONファイルをダウンロードします。
- ダウンロードしたファイル名を
client_secret.jsonに変更して、デスクトップのyoutube_automationフォルダに入れてください。
3. フォルダ構成
フォルダの中身を以下の状態にします。
main_uploader.py(下記のソースコードを保存)client_secret.json(取得した鍵)thumbnail.jpg(共通サムネイル画像)upload_queue/(ここに投稿したい動画を入れる)archive/(投稿が終わるとここへ自動移動されます)
4. 自動投稿ソースコード(main_uploader.py)
この内容をコピーして、テキストエディタなどで main_uploader.py という名前で保存してください。
Python
import os
import pickle
import shutil
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
# 設定
CLIENT_SECRET = "client_secret.json"
SCOPES = ['https://www.googleapis.com/auth/youtube.upload']
QUEUE_DIR = "upload_queue"
ARCHIVE_DIR = "archive"
THUMBNAIL = "thumbnail.jpg"
def get_service():
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET, SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
return build('youtube', 'v3', credentials=creds)
def main():
youtube = get_service()
if not os.path.exists(ARCHIVE_DIR): os.makedirs(ARCHIVE_DIR)
# フォルダ内のMP4を検索
files = sorted([f for f in os.listdir(QUEUE_DIR) if f.endswith('.mp4')])
if not files:
print("投稿待ちの動画がありません。")
return
for filename in files:
file_path = os.path.join(QUEUE_DIR, filename)
print(f"🚀 投稿開始: {filename}")
# タイトル生成(ファイル名をベースにする)
title = f"【AI】{os.path.splitext(filename)[0]}"
body = {
"snippet": {"title": title, "categoryId": "10"},
"status": {"privacyStatus": "unlisted"} # 安全のため限定公開
}
# アップロード
media = MediaFileUpload(file_path, resumable=True)
request = youtube.videos().insert(part="snippet,status", body=body, media_body=media)
response = request.execute()
video_id = response.get('id')
# サムネイル設定
if os.path.exists(THUMBNAIL):
youtube.thumbnails().set(videoId=video_id, media_body=MediaFileUpload(THUMBNAIL)).execute()
# 【自動仕分け】投稿済みフォルダへ移動
shutil.move(file_path, os.path.join(ARCHIVE_DIR, filename))
print(f"✅ 完了 ID: {video_id} -> archiveへ移動しました\n")
if __name__ == '__main__':
main()
5. 日々の操作手順(運用マニュアル)
環境構築ができたら、普段の投稿は驚くほど簡単です。
- 動画を置く: 投稿したい動画を
upload_queueフォルダにコピーします。ファイル名がそのままタイトルになります。 - 実行する: ターミナルで以下の3行を打つだけです(コピペでOK)。
Bashcd ~/Desktop/youtube_automation source venv/bin/activate python main_uploader.py - 完了の確認: 投稿が終わると動画は自動的に
archiveフォルダへ移動し、仕分けされます。
⚠️ 運用の重要ルール
このシステムでは、動画は一旦**「限定公開」**でアップロードされます。 AI生成コンテンツは、YouTube側での著作権チェック(Content IDなど)が完了するまで数分かかります。投稿完了後、YouTube Studioで問題がないか確認し、最後に自分の手で「公開」に切り替えてください。 これがアカウントを安全に守るコツです。


コメント