--- title: PDF to Video Converter emoji: 🎬 colorFrom: blue colorTo: purple sdk: gradio sdk_version: 4.19.2 app_file: app.py pinned: true --- # 📄 PDF to Video Converter 🎬 PDFファイルをスライドショー動画に変換するAPIです。指定されたURLからPDFをダウンロードし、各ページを画像化して、1ページあたり指定秒数のスライドショー動画を生成します。 ## 🌟 機能 ### ✅ 主要機能 - **PDF URLからのダウンロード**: HTTPリクエストで指定されたURLからPDFを取得 - **PDF→画像変換**: pdf2imageを使用して各ページを高品質な画像に変換 - **スライドショー動画生成**: 各画像を指定秒数(デフォルト5秒)表示する動画を作成 - **Hugging Faceアップロード**: 生成した動画をデータセットリポジトリに自動保存 - **URL返却**: アップロードされた動画のアクセス可能なURLを返却 ### 🎨 ユーザーインターフェース - **Gradio UI**: 直感的なWebインターフェース - **FastAPI**: RESTful APIエンドポイント - **リアルタイム進捗表示**: 処理状況を確認可能 - **動画プレビュー**: 生成された動画をその場で確認 ## 🔌 API仕様 ### エンドポイント: `POST /api/pdf-to-video` #### リクエスト ```json { "pdf_url": "https://example.com/sample.pdf", "duration_per_page": 5, "dpi": 150 } ``` **パラメータ:** - `pdf_url` (string, 必須): PDFファイルのURL - `duration_per_page` (integer, オプション): 1ページあたりの表示秒数(デフォルト: 5) - `dpi` (integer, オプション): 画像解像度(デフォルト: 150) #### レスポンス ```json { "status": "success", "video_url": "https://huggingface.co/datasets/username/repo/resolve/main/videos/video_20250107_123456_abc123.mp4", "message": "動画の生成とアップロードに成功しました", "total_pages": 10, "video_duration": 50.0 } ``` **フィールド:** - `status` (string): 処理結果("success" または "error") - `video_url` (string): 生成された動画のURL - `message` (string): 処理結果メッセージ - `total_pages` (integer): PDFの総ページ数 - `video_duration` (float): 動画の総再生時間(秒) ### エンドポイント: `GET /health` ヘルスチェック用エンドポイント #### レスポンス ```json { "status": "healthy", "service": "PDF to Video API", "hf_configured": true } ``` ## 🛠️ 技術スタック - **Gradio 4.19.2**: WebUI/SDK - **FastAPI**: REST APIフレームワーク - **pdf2image**: PDF→画像変換 - **OpenCV (cv2)**: 動画生成エンジン - **huggingface_hub**: データセットアップロード - **Pillow**: 画像処理 - **requests**: HTTP通信 ## ⚙️ 環境変数 以下の環境変数を設定する必要があります: | 変数名 | 必須 | デフォルト値 | 説明 | |--------|------|--------------|------| | `HF_TOKEN` | ✅ | - | Hugging Face認証トークン | | `HF_REPO_ID` | ❌ | `tomo2chin2/video-storage` | データセットリポジトリID | ### HF_TOKENの取得方法 1. [Hugging Face](https://huggingface.co/)にログイン 2. Settings → Access Tokens に移動 3. "New token" をクリック 4. Write権限を付与してトークンを生成 5. 生成されたトークンをコピー 6. Space設定の "Repository secrets" に追加 ## 🚀 使用方法 ### Web UIから使用 1. Space URLにアクセス 2. PDF URLを入力欄に貼り付け 3. 表示秒数とDPIを調整(任意) 4. 「🎬 動画生成」ボタンをクリック 5. 生成された動画URLをコピー ### APIから使用 #### curlの例 ```bash curl -X POST "https://your-space.hf.space/api/pdf-to-video" \ -H "Content-Type: application/json" \ -d '{ "pdf_url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", "duration_per_page": 5, "dpi": 150 }' ``` #### Pythonの例 ```python import requests response = requests.post( "https://your-space.hf.space/api/pdf-to-video", json={ "pdf_url": "https://example.com/sample.pdf", "duration_per_page": 5, "dpi": 150 } ) result = response.json() print(f"動画URL: {result['video_url']}") ``` #### JavaScriptの例 ```javascript fetch('https://your-space.hf.space/api/pdf-to-video', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ pdf_url: 'https://example.com/sample.pdf', duration_per_page: 5, dpi: 150 }) }) .then(response => response.json()) .then(data => console.log('動画URL:', data.video_url)); ``` ## 📊 処理フロー ``` 1. PDF URLダウンロード ↓ 2. PDF→画像変換(pdf2image) ↓ 3. 画像サイズ統一(Pillow) ↓ 4. 動画生成(OpenCV) - 各ページを指定秒数表示 - 30fps ↓ 5. Hugging Faceアップロード ↓ 6. URL返却 ``` ## 🧪 テスト用サンプルPDF 以下のURLでテスト可能です: - **W3C ダミーPDF**: `https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf` - **小サイズPDF**: 処理時間が短く、動作確認に最適 ## ⚠️ 制限事項 1. **PDFサイズ**: 大きなPDF(20ページ以上)は処理に時間がかかります 2. **タイムアウト**: Hugging Face Spacesのタイムアウト制限(〜60秒)に注意 3. **同時リクエスト**: 大量の同時リクエストには対応していません 4. **ファイル形式**: PDFのみ対応(画像ファイルは非対応) ## 🔧 トラブルシューティング ### エラー: "HuggingFace API が初期化されていません" → `HF_TOKEN` 環境変数が設定されているか確認してください ### エラー: "PDFのダウンロードに失敗しました" → PDF URLが正しいか、アクセス可能か確認してください ### エラー: "PDFの画像変換に失敗しました" → PDFが破損していないか確認してください ### 動画が生成されない → ログを確認し、どの段階でエラーが発生しているか特定してください ## 📁 ファイル構成 ``` majin/v4_spinoff/HUG/ ├── app.py # メインアプリケーション ├── requirements.txt # Python依存パッケージ ├── packages.txt # システムパッケージ ├── README.md # このファイル └── 実装ステップ.md # 詳細な実装手順 ``` ## 🤝 貢献 プルリクエストやイシューの報告を歓迎します。 ## 📜 ライセンス MIT License ## 📞 連絡先 問題や質問がある場合は、Issueを作成してください。 --- **最終更新**: 2025-10-07