Generate vertical videos (1080x1920) optimized for Pinterest using the JSON2Video API.
```bash
export JSON2VIDEO_API_KEY="your_api_key_here"
```
Create a video using a JSON configuration file:
python3 scripts/generate_video.py --config my-video.json --wait
The video is defined as an array of scenes. Each scene contains:
| Property | Type | Description |
|---|---|---|
| ---------- | ------ | ------------- |
image | object | Image configuration (AI-generated or URL) |
voice | object | Voice configuration (generated TTS or URL) |
text_overlay | string | Optional text displayed on scene |
subtitles | boolean | Enable/disable subtitles |
zoom_effect | boolean | Add Ken Burns zoom effect |
duration | number | Override scene duration (seconds) |
AI-Generated Image:
{
"image": {
"source": "ai",
"ai_provider": "flux-schnell",
"ai_prompt": "A minimalist workspace with laptop..."
}
}
Available AI Providers:
flux-pro - Highest quality, realistic imagesflux-schnell - Fast generation, good qualityfreepik-classic - Digital artwork styleURL-Based Image:
{
"image": {
"source": "https://example.com/image.jpg"
}
}
AI-Generated Voice (TTS):
{
"voice": {
"source": "generated",
"text": "Your voiceover text here",
"voice_id": "en-US-EmmaMultilingualNeural",
"model": "azure"
}
}
Provided Audio File:
{
"voice": {
"source": "https://example.com/voiceover.mp3"
}
}
Note on Scene Duration: The voiceover determines scene length automatically. Each scene's duration matches its audio length. For provided audio files, ensure they match your intended scene timing.
{
"resolution": "instagram-story",
"quality": "high",
"cache": true,
"scenes": [
{
"image": {
"source": "ai",
"ai_provider": "flux-schnell",
"ai_prompt": "Affiliate marketing workspace with laptop and coffee"
},
"voice": {
"source": "generated",
"text": "Here's how to make money with affiliate marketing",
"voice_id": "en-US-Neural2-F"
},
"text_overlay": "Affiliate Marketing 101",
"subtitles": true,
"zoom_effect": true
}
]
}
For long scripts, split into multiple scenes with shorter voice segments:
{
"scenes": [
{
"image": { "source": "ai", "ai_prompt": "Hook image" },
"voice": { "source": "generated", "text": "Attention-grabbing hook..." },
"zoom_effect": true
},
{
"image": { "source": "ai", "ai_prompt": "Step 1 image" },
"voice": { "source": "generated", "text": "Step one is to..." },
"zoom_effect": true
},
{
"image": { "source": "ai", "ai_prompt": "CTA image" },
"voice": { "source": "generated", "text": "Click the link in bio..." },
"zoom_effect": false
}
]
}
Create video from config:
python3 scripts/generate_video.py --config video.json --wait
Create without waiting:
python3 scripts/generate_video.py --config video.json --no-wait
Check status of existing project:
python3 scripts/generate_video.py --project-id YOUR_PROJECT_ID
| Resolution | Dimensions | Use Case |
|---|---|---|
| ------------ | ------------ | ---------- |
instagram-story | 1080x1920 | Pinterest/Reels/Stories (recommended) |
instagram-feed | 1080x1080 | Square posts |
full-hd | 1920x1080 | Landscape YouTube |
hd | 1280x720 | Standard HD |
custom | Any | Custom dimensions |
Voice format: en-US-EmmaMultilingualNeural
Common Azure voices:
en-US-EmmaMultilingualNeural - Female, natural (recommended)en-US-GuyNeural - Male, professionalen-US-JennyNeural - Female, friendlyen-GB-SoniaNeural - British femaleen-GB-RyanNeural - British maleSee Microsoft Azure Speech Voices for full list.
Voice names: Natural names like Bella, Antoni, Nova, Shimmer
Available voices: Daniel, Serena, Antoni, Bella, Nova, Shimmer, and more.
See ElevenLabs Voice Library for full list.
JSON2VIDEO_API_KEYscripts/example-config.json - Basic example with one scenescripts/example-advanced.json - Multi-scene affiliate marketing videoSee ADVANCED.md for:
Error: "JSON2VIDEO_API_KEY environment variable not set"
→ Run: export JSON2VIDEO_API_KEY="your_key"
Error: "Render failed"
→ Check: Image URLs are publicly accessible
→ Check: AI prompts don't violate content policies
→ Check: Audio files are valid MP3/WAV
Video takes too long
→ Enable cache: true in config
→ Use flux-schnell instead of flux-pro for faster generation
→ Pre-generate AI images and use URLs instead
For programmatic use in other scripts:
from scripts.generate_video import create_pinterest_video
scenes = [
{
"image": {"source": "ai", "ai_prompt": "..."},
"voice": {"source": "generated", "text": "..."},
"subtitles": True,
"zoom_effect": True
}
]
video_url = create_pinterest_video(scenes, wait=True)
print(f"Video ready: {video_url}")
共 1 个版本