PythonでYouTubeショート動画を自動アップロードするプログラムを作ってみた
はじめに
この記事はClaudeで書かれています。コードはGeminiによって書かれてます。
動画コンテンツ制作を効率化したい、特にYouTubeショートの投稿を自動化したいと思ったことはありませんか?
今回は、指定フォルダに動画ファイルを追加するだけで自動的にYouTubeショートとしてアップロードしてくれるPythonプログラムを作成しました。ファイル監視機能付きで、リアルタイムに動画をアップロードできます。
サンプル動画 🎬
AIで生成した猫のショート動画を、本プログラムで自動アップロードした例です。
※ この動画はAIによって生成されたもので、実際の猫ではありません。
完成形のイメージ
- 指定したフォルダを常時監視
-
.mp4、.mov、.avi、.mkvファイルが追加されると自動検知 - YouTube APIを使って自動的にショート動画としてアップロード
- アップロード進捗をリアルタイム表示
必要な準備
1. Google Cloud Platformでプロジェクト作成とAPI有効化
- Google Cloud Consoleにアクセス
- 新しいプロジェクトを作成
- YouTube Data API v3を有効化
- 認証情報から「OAuth 2.0 クライアントID」を作成(アプリケーション種別:デスクトップアプリ)
- 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ファイルを追加するだけで自動アップロードが開始されます。
実行結果
対応ファイル形式の追加
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"
注意事項
- YouTubeの利用規約を遵守してください
- API制限:YouTube Data API v3には1日あたりのクォータ制限があります
- ファイルサイズ:YouTubeの動画ファイルサイズ制限(一般的に128GB)に注意
-
セキュリティ:
client_secrets.jsonとtoken.jsonは機密情報なので適切に管理してください
応用アイデア
- AI生成された動画の自動投稿:画像生成AIと組み合わせて自動コンテンツ作成
- ライブ配信のハイライト自動投稿:OBSなどと連携してハイライトシーンを自動切り出し・投稿
- 定期的なバッチ処理:cronジョブと組み合わせて決まった時間に一括アップロード
- メタデータの自動生成:動画解析APIと組み合わせてタイトルや説明文を自動生成
まとめ
このプログラムを使えば、動画制作に集中して、投稿作業は完全に自動化できます。YouTube APIの強力な機能とPythonのシンプルさを組み合わせることで、効率的なコンテンツ投稿ワークフローを構築できました。
ぜひ皆さんの動画制作ワークフローに取り入れて、より多くの時間をクリエイティブな作業に使ってください!
参考資料
コード全体
詳細なコードは https://github.com/ishikawamasahito/YouTube-video-auto-posting で公開しています。

