Spaces:
Paused
Paused
File size: 6,838 Bytes
13ff327 abe5a08 13ff327 abe5a08 13ff327 abe5a08 13ff327 abe5a08 13ff327 abe5a08 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | ---
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
|