Spaces:
Paused
Paused
A newer version of the Gradio SDK is available:
6.8.0
metadata
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
リクエスト
{
"pdf_url": "https://example.com/sample.pdf",
"duration_per_page": 5,
"dpi": 150
}
パラメータ:
pdf_url(string, 必須): PDFファイルのURLduration_per_page(integer, オプション): 1ページあたりの表示秒数(デフォルト: 5)dpi(integer, オプション): 画像解像度(デフォルト: 150)
レスポンス
{
"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): 生成された動画のURLmessage(string): 処理結果メッセージtotal_pages(integer): PDFの総ページ数video_duration(float): 動画の総再生時間(秒)
エンドポイント: GET /health
ヘルスチェック用エンドポイント
レスポンス
{
"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の取得方法
- Hugging Faceにログイン
- Settings → Access Tokens に移動
- "New token" をクリック
- Write権限を付与してトークンを生成
- 生成されたトークンをコピー
- Space設定の "Repository secrets" に追加
🚀 使用方法
Web UIから使用
- Space URLにアクセス
- PDF URLを入力欄に貼り付け
- 表示秒数とDPIを調整(任意)
- 「🎬 動画生成」ボタンをクリック
- 生成された動画URLをコピー
APIから使用
curlの例
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の例
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の例
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: 処理時間が短く、動作確認に最適
⚠️ 制限事項
- PDFサイズ: 大きなPDF(20ページ以上)は処理に時間がかかります
- タイムアウト: Hugging Face Spacesのタイムアウト制限(〜60秒)に注意
- 同時リクエスト: 大量の同時リクエストには対応していません
- ファイル形式: 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