単一の動画ファイルを入力として、ショート動画作成用の設計図(企画書)を自動生成する Python プロジェクト。
- 動画ファイルから Whisper API を使用した音声文字起こし
- ChatGPT API を使用したショート動画企画書の生成
- 切り抜き箇所(開始・終了時刻)、タイトル案、キャプション案を含むマークダウン形式の企画書出力
- SRT 形式の字幕ファイル出力
- Google Drive 連携による自動処理
- Python 3.8.1+
- uv(パッケージ管理)
- mypy(型チェック)
- 依存性注入(DI)パターンの採用
- Google Drive API v3(サービスアカウント認証)
uv sync.env.exampleをコピーして.envファイルを作成してください:
cp .env.example .env# 必須: OpenAI APIキーを設定してください
OPENAI_API_KEY=your_actual_openai_api_key_here
# オプション: モデル設定(デフォルト値)
CHATGPT_MODEL=gpt-4o
WHISPER_MODEL=whisper-1# 必須: サービスアカウント認証 (いずれか1つを選択)
# オプション1: ファイルパス
GOOGLE_SERVICE_ACCOUNT_KEY_PATH=path/to/service-account-key.json
# オプション2: JSON文字列
GOOGLE_SERVICE_ACCOUNT_KEY_JSON='{"type":"service_account","project_id":"..."}'
# オプション3: Base64エンコードされたJSON (Cloud Run Job推奨)
GOOGLE_SERVICE_ACCOUNT_KEY_BASE64=eyJ0eXBlIjoic2VydmljZV9hY2NvdW50IiwicHJvamVjdF9pZCI6Li4ufQ==
# 必須: 入力・出力フォルダURL
INPUT_DRIVE_FOLDER=https://drive.google.com/drive/folders/input_folder_id
OUTPUT_DRIVE_FOLDER=https://drive.google.com/drive/folders/output_folder_id-
Google Cloud Console にアクセス
- Google Cloud Consoleにログイン
-
新しいプロジェクトを作成
- プロジェクト名:
shortmovie-draft-generator
- プロジェクト名:
-
Google Drive API の有効化
- API とサービス → ライブラリ
- "Google Drive API"を検索して有効化
-
サービスアカウントの作成
- IAM と管理 → サービスアカウント
- 「サービスアカウントを作成」をクリック
- 名前:
shortmovie-drive-access - 説明:
ショート動画企画書生成用のGoogle Driveアクセス
-
サービスアカウントキーの作成
- 作成したサービスアカウントをクリック
- 「キー」タブ → 「キーを追加」→ 「新しいキーを作成」
- 形式: JSON
- ダウンロードした JSON ファイルを安全な場所に保存
- 入力・出力フォルダを Google Drive で作成
- 各フォルダを右クリック → 「共有」を選択
- サービスアカウントのメールアドレスを追加
- JSON ファイル内の
client_emailの値をコピー - 権限: 「編集者」(出力フォルダ)、「閲覧者」(入力フォルダでも可)
- JSON ファイル内の
- フォルダ URL をコピーして環境変数に設定
このプロジェクトは動画処理に ffmpeg を使用します。事前にインストールしてください:
macOS:
brew install ffmpegUbuntu/Debian:
sudo apt update
sudo apt install ffmpegWindows: FFmpeg 公式サイトからダウンロードしてインストールしてください。
環境変数で設定したフォルダから 1 つの動画を処理:
uv run python src/main.py --drive-batchINPUT_DRIVE_FOLDERから未処理の動画を 1 つ検出- 動画をダウンロードして処理(音声文字起こし → 企画書生成)
- 企画書・字幕・元動画を
OUTPUT_DRIVE_FOLDERにアップロード - 連続処理の場合、すべての動画が処理されるまで繰り返し
OUTPUT_DRIVE_FOLDER/
├── video1/
│ ├── draft.md # 企画書
│ ├── subtitle.srt # 字幕ファイル
│ └── video1.mp4 # 元動画
├── video2/
│ ├── draft.md
│ ├── subtitle.srt
│ └── video2.mp4
└── ...
uv run python src/main.py input/video.mp4 output/uv run python src/main.py "https://drive.google.com/drive/folders/abc123" output/ --driveuv run python src/main.py input/video.mp4 output/ --upload --upload-folder-id "folder_id"既存の文字起こしファイル(transcript.json)から企画書と字幕ファイルを生成するデバッグ用スクリプトです。 文字起こし処理をスキップして、企画書生成部分のみをテストできます。
# サンプルファイルを使用してテスト
python debug_transcript_to_draft.py intermediate/sample_transcript.json output/
# 詳細ログ付きで実行
python debug_transcript_to_draft.py intermediate/sample_transcript.json output/ --verbose
# 既存のtranscript.jsonファイルを使用
python debug_transcript_to_draft.py intermediate/your_video_transcript.json output/# サンプルファイルでテスト実行
$ python debug_transcript_to_draft.py intermediate/sample_transcript.json output/ -v
=== TranscriptToDraftUsecase デバッグスクリプト ===
入力ファイル: intermediate/sample_transcript.json
出力ディレクトリ: output
🔧 TranscriptToDraftUsecaseを初期化中...
✓ 初期化完了
📝 企画書生成を開始します...
🎉 企画書生成が正常に完了しました!
生成されたファイル:
📄 企画書: output/sample_video_draft.md
📝 字幕: output/sample_video_subtitle.srt- 高速テスト: 文字起こし処理(時間がかかる)をスキップ
- 企画書生成のデバッグ: ChatGPT APIの応答やプロンプトの調整をテスト
- 文字起こし結果の修正: transcript.jsonを手動編集して再実行可能
- 開発効率向上: 企画書生成ロジックの改善時に便利
uv run pytestuv run mypy src/# フォーマットチェック
uv run ruff check src/ tests/
# 自動修正
uv run ruff check --fix src/ tests/
# コードフォーマット
uv run ruff format src/ tests/