このPythonスクリプト `pptx2md_with_image.py` は、PowerPointプレゼンテーション (またはPDF) と、各スライドのテキスト情報をAIモデル (OpenAIまたはGoogle Gemini) に入力し、各スライドの解説をMarkdown形式で生成するツールです。

---

## 1. プログラムの動作

このプログラムは、以下のステップで動作します。

1.  **入力ファイルの解析**:
    *   PowerPointファイル (`.pptx`) またはPDFファイル (`.pdf`) を指定します。
    *   各スライドのテキスト情報を含むテキストファイル (`.txt`) を指定します。このテキストファイルは、`#Slide N` (Nはスライド番号) というヘッダーで各スライドのテキストを区切る必要があります。
2.  **スライドテキストの読み込み**: 指定されたテキストファイルから、スライド番号と対応するテキストを読み込み、辞書形式で保持します。
3.  **PDFへの変換 (PowerPoint入力の場合)**:
    *   入力ファイルが `.pptx` の場合、`win32com.client` (Microsoft PowerPoint COMオブジェクト) を使用して、指定されたPowerPointファイルを一時的なPDFファイルに変換します。この際、PowerPointアプリケーションが一時的に開かれることがあります。
    *   入力ファイルが既に `.pdf` の場合、このステップはスキップされます。
4.  **スライド画像の抽出**:
    *   変換されたPDF (または元のPDF) から、`PyMuPDF` (fitz) ライブラリを使用して、各スライドを個別のPNG画像ファイルとして抽出します。これらの画像は作業ディレクトリ内に保存されます。
5.  **AIモデルによる解説生成**:
    *   コマンドライン引数で指定されたAPI (`openai`, `openai5`, `gemini`, `google`) に応じて、OpenAIまたはGoogle GeminiのAIクライアントを初期化します。
    *   各スライドについて、抽出されたPNG画像、読み込んだスライドテキスト、スライド番号、および指定された出力言語をAIモデルに送信します。
    *   AIモデルは、画像とテキストを基にスライドの解説（要点、解説、図の読み取りなどを含む）を生成します。
    *   `openai` を選択した場合、デフォルトで `gpt-4o` モデルが使用されます (`openai5` の場合は `gpt-5-preview`)。
    *   `gemini` または `google` を選択した場合、デフォルトで `gemini-2.5-flash` モデルが使用されます。
6.  **Markdownファイルの生成**:
    *   AIによって生成された各スライドの解説を `#Slide N` というMarkdownヘッダーと共に集約します。
    *   最終的に、入力ファイル名に基づく新しいMarkdownファイル (`<入力ファイル名>-poictureinif.md`) を生成し、すべての解説を書き込みます。

## 2. 必要な非標準ライブラリとインストールコマンドとインストール方法

このプログラムを実行するには、以下の非標準ライブラリが必要です。

| ライブラリ名             | インポート名          | インストールコマンド             | 備考                                                                                                                                                                                                                                                                                                                                                                                                                              |
| :----------------------- | :-------------------- | :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `pywin32`                | `win32com.client`     | `pip install pywin32`            | PowerPointファイルのPDF変換に使用されます。Windows環境でのみ動作し、Microsoft PowerPointがインストールされている必要があります。                                                                                                                                                                                                                                                                                    |
| `PyMuPDF`                | `fitz`                | `pip install pymupdf`            | PDFファイルから画像を抽出するために使用されます。                                                                                                                                                                                                                                                                                                                                                                                 |
| `openai`                 | `openai`              | `pip install openai`             | OpenAI API (GPTモデル) を利用するために必要です。                                                                                                                                                                                                                                                                                                                                                                                 |
| `google-generativeai`    | `google.generativeai` | `pip install google-generativeai` | Google Gemini APIを利用するために必要です。                                                                                                                                                                                                                                                                                                                                                                                     |

**インストール方法:**

上記の`インストールコマンド`をターミナルまたはコマンドプロンプトで実行してください。

例:
```bash
pip install pywin32 pymupdf openai google-generativeai
```

## 3. 必要な入力ファイル

1.  **プレゼンテーションファイル (`infile`)**:
    *   拡張子が `.pptx` のPowerPointファイル、または `.pdf` のPDFファイル。
    *   例: `my_presentation.pptx` または `report.pdf`

2.  **スライドテキストファイル (`txt`)**:
    *   各スライドのテキスト情報を含むプレーンテキストファイル (`.txt`)。
    *   ファイルの内容は、以下の形式である必要があります。
        ```
        #Slide 1
        これはスライド1のテキストです。
        プレゼンテーションの導入部分。

        #Slide 2
        スライド2の内容。
        重要な概念を説明しています。

        #Slide 3
        結論部分。
        まとめと次のステップ。
        ```

## 4. 実行後に生成される出力ファイル

### メイン出力ファイル

*   **Markdownファイル**:
    *   ファイル名: `<入力ファイル名 (拡張子なし)>-poictureinif.md`
    *   例: `my_presentation.pptx` を入力した場合、`my_presentation-poictureinif.md`
    *   内容: 各スライドのAIによる解説がMarkdown形式で記述されます。

### 中間生成ファイル (作業ディレクトリ内)

スクリプトは、入力ファイルと同じディレクトリに `<入力ファイル名 (拡張子なし)>_work/` という作業ディレクトリを作成し、その中に中間ファイルを生成します。

*   **PDFファイル**:
    *   `my_presentation_work/my_presentation.pdf` (入力が `.pptx` の場合のみ生成)
    *   PowerPointから変換されたPDFファイルです。
*   **スライド画像ファイル**:
    *   `my_presentation_work/slides_png/slide_001.png`
    *   `my_presentation_work/slides_png/slide_002.png`
    *   ... (各スライドに対応するPNG画像)
    *   PDFから抽出された各スライドの画像ファイルです。

## 5. コマンドラインでの使用例 (Usage)

### 基本的な使用例 (Gemini API、日本語)

`my_presentation.pptx` と `my_presentation_text.txt` を使用して、Gemini APIで日本語の解説を生成し、`my_presentation-poictureinif.md` を出力します。
事前に `GOOGLE_API_KEY` 環境変数を設定してください。

```bash
# 環境変数の設定 (Windowsの場合)
# set GOOGLE_API_KEY=YOUR_GEMINI_API_KEY
# 環境変数の設定 (macOS/Linuxの場合)
# export GOOGLE_API_KEY="YOUR_GEMINI_API_KEY"

python pptx2md_with_image.py my_presentation.pptx my_presentation_text.txt --api gemini --language ja
```

### OpenAI APIを使用する例 (GPT-4o、日本語)

`my_presentation.pdf` と `my_presentation_text.txt` を使用して、OpenAI API (GPT-4o) で日本語の解説を生成します。
事前に `OPENAI_API_KEY` 環境変数を設定するか、プログラムが自動的に設定を読み込むようにしておいてください。

```bash
python pptx2md_with_image.py my_presentation.pdf my_presentation_text.txt --api openai --openai_model gpt-4o --language ja
```

### OpenAI API (GPT-5-preview) を使用する例

`--api openai5` オプションを使用します。

```bash
python pptx2md_with_image.py my_presentation.pptx my_presentation_text.txt --api openai5 --openai_model5 gpt-5-preview
```

### 出力言語を英語にする例

`--language en` オプションを使用します。

```bash
python pptx2md_with_image.py my_presentation.pptx my_presentation_text.txt --api gemini --language en
```

### PowerPointを非表示でPDFに変換する例

`--visible False` オプションでPowerPointアプリケーションの表示を抑制します（ただし、バックグラウンドで動作はします）。

```bash
python pptx2md_with_image.py my_presentation.pptx my_presentation_text.txt --api gemini --visible False
```

### 利用可能なオプション

*   `infile`: (必須) 入力プレゼンテーションファイル (.pptx または .pdf)
*   `txt`: (必須) スライドテキストファイル (.txt)
*   `--api`: 使用するAPI (`openai`, `openai5`, `gemini`, `google`)。デフォルトは `gemini`。
*   `--openai_model`: OpenAI APIで使用するモデル名。デフォルトは `gpt-4o`。
*   `--openai_model5`: OpenAI API (`--api openai5` の場合) で使用するモデル名。デフォルトは `gpt-5-preview`。
*   `--google_model`: Google Gemini APIで使用するモデル名。デフォルトは `gemini-2.5-flash`。
*   `--visible`: PowerPointをPDF変換時に表示するかどうか (`True` または `False`)。デフォルトは `True`。
*   `--language`: AIに生成を依頼する言語 (`ja`, `en` など)。デフォルトは `ja`。

**注意:**
*   `pywin32` はWindows環境でのみ動作します。PowerPointファイルからPDFへの変換機能はWindows専用です。PDFファイルを直接入力として使用すれば、macOS/Linuxでも画像抽出とAI生成は可能です。
*   OpenAI APIやGoogle Gemini APIを使用する場合、APIキーを環境変数として設定するか、OpenAI/Googleのライブラリが自動的に読み込む方法で認証情報を設定しておく必要があります。
    *   OpenAIの場合: `OPENAI_API_KEY`
    *   Google Geminiの場合: `GOOGLE_API_KEY`