Skip to main content
This guide shows you how to convert blog articles into engaging videos with professional AI-generated voice-over narration. Perfect for repurposing written content into narrated video format for social media, YouTube, or podcasts.

What You’ll Learn

Blog to Video

Convert blog URLs to video storyboards automatically

AI Voice-Over

Add professional narration to blog videos

Voice Customization

Control speaker, speed, and amplification settings

Auto Sync

Voice-over syncs automatically with video scenes

Before You Begin

Make sure you have:
  • A Pictory API key (get one here)
  • Node.js or Python installed on your machine
  • The URL of a publicly accessible blog article
  • Basic understanding of voice-over concepts
npm install axios

How Blog-to-Video with Voice-Over Works

When you convert a blog to video with voice-over narration:
  1. Content Extraction - The API scrapes your blog URL for text content
  2. Scene Generation - The content is analyzed and split into logical scenes
  3. Visual Selection - Appropriate stock visuals are automatically matched to each scene
  4. Voice Generation - AI creates natural voice-over narration from the extracted text
  5. Synchronization - Voice-over is automatically synchronized with video timing
  6. Video Rendering - The final video is rendered with narration and visuals combined
The blog URL must be publicly accessible. Password-protected or paywalled content cannot be extracted. The AI will automatically determine the best way to structure your content into scenes.

Complete Example

import axios from "axios";

const API_BASE_URL = "https://api.pictory.ai/pictoryapis";
const API_KEY = "YOUR_API_KEY";

// Sample blog URL - replace with your own blog URL
const BLOG_URL = "https://blog.pictory.ai/10-best-text-to-video-ai-tools/";

async function createBlogUrlToVideoWithVoiceOver() {
  try {
    console.log("Creating video from blog URL with AI voice-over...");

    const response = await axios.post(
      `${API_BASE_URL}/v2/video/storyboard/render`,
      {
        videoName: "blog_url_to_video_with_voiceover",
        url: BLOG_URL,

        // Voice-over configuration
        voiceOver: {
          enabled: true,                    // Enable voice-over
          aiVoices: [
            {
              speaker: "Brian",              // AI voice name
              speed: 100,                    // Normal speaking speed (50-200)
              amplificationLevel: 0,         // Normal volume (-1 to 1)
            },
          ],
        },
      },
      {
        headers: {
          "Content-Type": "application/json",
          Authorization: API_KEY,
        },
      }
    );

    const jobId = response.data.data.jobId;
    console.log("✓ Video creation started!");
    console.log("Job ID:", jobId);

    // Monitor progress
    console.log("\nMonitoring video creation...");
    let jobCompleted = false;
    let jobResult = null;

    while (!jobCompleted) {
      const statusResponse = await axios.get(
        `${API_BASE_URL}/v1/jobs/${jobId}`,
        {
          headers: { Authorization: API_KEY },
        }
      );

      const status = statusResponse.data.data.status;
      console.log("Status:", status);

      if (status === "completed") {
        jobCompleted = true;
        jobResult = statusResponse.data;
        console.log("\n✓ Video from blog URL with voice-over is ready!");
        console.log("Video URL:", jobResult.data.videoURL);
      } else if (status === "failed") {
        throw new Error("Video creation failed: " + JSON.stringify(statusResponse.data));
      }

      await new Promise(resolve => setTimeout(resolve, 5000));
    }

    return jobResult;
  } catch (error) {
    console.error("Error:", error.response?.data || error.message);
    throw error;
  }
}

createBlogUrlToVideoWithVoiceOver();

Understanding the Parameters

Main Request Parameters

ParameterTypeRequiredDescription
videoNamestringYesA descriptive name for your video project
urlstringYesThe URL of the blog article or webpage to convert
voiceOverobjectYesVoice-over configuration object

Voice-Over Configuration

ParameterTypeRequiredDescription
enabledbooleanYesSet to true to enable voice-over
aiVoicesarrayYesArray of AI voice configurations (currently supports one voice)
speakerstringYesThe name of the AI voice (e.g., “Brian”, “Emma”)
speednumberNoVoice speed from 50-200 (default: 100 = normal speed)
amplificationLevelnumberNoVolume level from -1 to 1 (default: 0 = normal volume)
To get a complete list of available AI voices, use the Get Voiceover Tracks API endpoint. This returns all available voices with their names, languages, and characteristics.

Voice Speed Reference

Speed ValuePlayback RateBest Used For
500.5x (Very slow)Complex technical content, detailed explanations
750.75x (Slower)Educational content, learning materials
900.9x (Slightly slower)Professional presentations, important information
1001.0x (Normal)Standard content, most blog articles
110-1201.1-1.2x (Slightly faster)Casual content, quick summaries
1501.5x (Fast)Quick recaps, energetic content
2002.0x (Very fast)Speed reading, urgent updates

Amplification Level Reference

LevelEffectBest Used For
-1.0QuietestBackground narration, ambient voice
-0.5Quieter than normalSubtle emphasis, secondary information
0Normal volumeStandard narration, most use cases
0.3Slightly louderImportant points, key messages
0.5Moderately louderStrong emphasis, calls-to-action
1.0LoudestMaximum emphasis, attention-grabbing moments
Volume Considerations: Very high amplification levels (0.7-1.0) may cause audio distortion. Test your settings and use moderation for professional results.

Supported Content Types

The API can extract and convert content from:
  • Blog posts and articles
  • News websites
  • Medium articles
  • WordPress sites
  • Most publicly accessible web pages
  • Content management system (CMS) pages
The URL must be publicly accessible without authentication. Password-protected, paywalled, or login-required content cannot be extracted.

Common Use Cases

Content Marketing and Social Media

{
  url: "https://yourblog.com/latest-article",
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Emma",      // Female voice for lifestyle content
      speed: 110,           // Slightly faster for engaging delivery
      amplificationLevel: 0.2  // Slightly louder for emphasis
    }]
  }
}
Result: Engaging social media video with professional female narration.

Educational and Tutorial Content

{
  url: "https://tutorial-site.com/how-to-guide",
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Brian",     // Clear male voice for tutorials
      speed: 90,            // Slower for comprehension
      amplificationLevel: 0   // Normal volume
    }]
  }
}
Result: Clear instructional video with slower narration for better understanding.

Business and Corporate Content

{
  url: "https://company-blog.com/quarterly-update",
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Matthew",   // Professional male voice
      speed: 100,           // Normal pace
      amplificationLevel: 0   // Standard volume
    }]
  }
}
Result: Professional corporate video with natural narration.

Quick News and Updates

{
  url: "https://news-site.com/latest-update",
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Joanna",    // Dynamic female voice
      speed: 120,           // Faster for news delivery
      amplificationLevel: 0.3  // Louder for energy
    }]
  }
}
Result: Energetic news-style video with faster delivery.

Best Practices

Match voice speed to your content type and audience:
  • Technical/Complex: Use 75-90 for slower, clearer delivery
  • Standard Content: Use 100 for natural, comfortable pacing
  • Casual/Social: Use 110-120 for energetic, engaging delivery
  • Quick Updates: Use 120-150 for fast-paced content
  • Test First: Always preview before production to ensure the pace feels right
Use volume strategically for emphasis:
  • Subtle Changes: Use 0.1-0.3 for gentle emphasis on key points
  • Normal Content: Keep at 0 for most narration
  • Strong Emphasis: Use 0.4-0.6 sparingly for critical messages
  • Avoid Extremes: Don’t exceed 0.7 to prevent audio distortion
  • Consistency: Maintain similar levels across similar content types
Choose voices that match your brand and content:
  • Professional/Business: Brian, Matthew, or Joanna
  • Casual/Friendly: Emma, Amy, or Joey
  • Technical/Educational: Brian or Emma for clarity
  • Brand Consistency: Use the same voice across all your videos
  • Test Options: Try different voices to find the best fit
Use the Get Voiceover Tracks API to explore all available voices.
Ensure your blog URL will work:
  • Public Access: URL must be accessible without login
  • No Paywalls: Content behind paywalls cannot be extracted
  • Clean URLs: Avoid URLs with session parameters or tracking codes
  • Test First: Manually check the URL opens in a browser
  • Well-Structured: Articles with clear HTML structure work best
Prepare your blog for better video conversion:
  • Clear Structure: Use headings and paragraphs effectively
  • Concise Writing: Shorter sentences work better for narration
  • Relevant Length: 500-2000 words is ideal for video conversion
  • Visual Content: Include images that can be used in the video
  • Clean Formatting: Remove excessive ads or sidebars when possible

Troubleshooting

Problem: The API cannot access or parse the blog content.Solution:
  • Verify the URL is publicly accessible (test in incognito browser)
  • Check that the article doesn’t require login or subscription
  • Ensure the URL is complete and correctly formatted
  • Try removing URL parameters (everything after ?)
  • Verify the blog page loads correctly and has text content
  • Check if the site has anti-scraping protection
Problem: The voice-over sounds artificial or choppy.Solution:
  • Try a different AI voice speaker (some sound more natural)
  • Adjust the speed to 95-105 for more natural cadence
  • Ensure your blog content has proper punctuation
  • Avoid using all caps or unusual formatting in source content
  • Use the Get Voiceover Tracks API to find higher-quality voices
Problem: Narration is too fast/slow for the video scenes.Solution:
  • The API automatically syncs voice to video duration
  • If issues persist, adjust the speed parameter:
    • Increase speed (110-120) if narration is too slow
    • Decrease speed (80-90) if narration is too fast
  • Very long articles may be automatically summarized
  • Consider breaking long articles into multiple videos
Problem: Voice-over audio sounds muffled or distorted.Solution:
  • Reduce amplificationLevel to 0 or below
  • Avoid levels above 0.7 which can cause clipping
  • Try a different AI voice - some have better audio quality
  • Check if the source content has unusual characters or formatting
  • Ensure punctuation in source content is correct
Problem: Video completes but appears empty or very short.Solution:
  • Check that the URL points to an article, not the homepage
  • Verify the page has substantial text content (300+ words)
  • Remove URL parameters and tracking codes
  • Try a direct link to the article, not a shortened URL
  • Ensure the page is in a supported language

Next Steps

Enhance your blog-to-video content with these features:

API Reference

For complete technical details, see: