ブログ記事から16:9動画を自動生成する2つのアプローチ!AIツール活用とPython連携の手順

ブログ記事から16:9動画を自動生成する手順 アイキャッチ

「過去に書いたブログ記事の資産を、YouTubeなどの動画プラットフォームでも再活用したい」と考えたことはありませんか?
テキスト記事から動画を作成する作業は、一から手作業で行うと台本作成、スライドデザイン、ナレーション録音、動画編集など膨大な時間がかかります。
しかし現在は、AI動画生成サービスの活用や、Pythonスクリプトによる連携パイプラインを組むことで、横型(16:9)の解説動画を効率よく自動生成できるようになりました。
本記事では、手軽に使えるおすすめのAIツールと、自作プログラムによる自動生成パイプラインの構築手順を、各サービスの公式リンクを交えて分かりやすく解説します。

ブログ記事を動画化するメリット

Webサイトの文字コンテンツを動画化(特にYouTubeや社内研修、プレゼンなどで扱いやすい16:9の横型動画)することには、多くのメリットがあります。

  • リーチ層の拡大:「文字を読むのが苦手」「移動中や作業中に耳と目で情報をインプットしたい」という動画派のユーザー層にアプローチできます。
  • コンテンツ資産の二次利用:既に執筆して検索エンジンで評価されている良質な記事の構成をそのまま活かし、少ない労力で新しい成果物を生み出せます。
  • SEOと動画検索の相乗効果:ブログ記事内に動画を埋め込むことで滞在時間が延び、検索エンジンからの評価向上にもつながります。

手軽にすぐ使えるAI動画生成サービス

プログラミングを行わず、まずはブラウザ上で手軽に動画を作成したい場合は、記事のURLやテキストを読み込ませるだけで自動生成してくれるクラウドサービスが便利です。

NoLang:テキストやURLから即座に要約動画を作成

NoLang(ノーラング)は、日本語の文章処理に優れた国産のAI動画生成サービスです。Web記事のURLや要約テキストを入力すると、わずか数十秒から1分程度でAIナレーション、字幕、関連画像が配置された動画を出力します。

公式サイト:https://no-lang.com/

NoLangの公式サイト画面キャプチャ
NoLang:テキスト入力から即座に動画構成・音声・字幕を組み立てるAI動画生成ツール

画面比率はYouTube向けの16:9(横型)とショート動画向けの9:16(縦型)をワンクリックで切り替えることができ、生成された動画の台本や画像素材もブラウザ上で簡単に差し替え可能です。まずはスピード重視で動画の雰囲気を掴みたい場合に適しています。

Vrew:テロップとAI音声を自動配置する動画編集ツール

Vrew(ブリュー)は、テキストエディタ感覚で動画を編集できるAI音声・動画編集ソフトウェアです。「テキストからビデオを作成」機能を使うと、ブログ記事の本文を貼り付けるだけで、AIが文章を自然な長さに区切ってスライドを作成し、AIナレーションとテロップ、無料の背景素材をタイムラインに自動配置してくれます。

公式サイト:https://vrew.voyagerx.com/ja/

Vrewの公式サイト画面キャプチャ
Vrew:AI音声の生成と字幕・シーン分割を一括で行える高機能エディタ

Vrewの大きな強みは「手作業での微調整のしやすさ」です。AIが自動生成したテロップの誤字修正や、声の高さ・話速の調整、画像の差し替えがドキュメント編集のように直感的に行えるため、実務で使える高品質な動画を短時間で仕上げたい方に向いています。

Pythonによる自動生成パイプラインの構築手順

WordPressで記事を公開したタイミングで自動的に動画ファイルを生成したい場合や、自社独自のスライドデザインで統一したい場合は、Pythonスクリプトによるパイプライン構築が最も柔軟です。

パイプラインの全体アーキテクチャ

記事本文から16:9動画を出力するまでの処理フローは、以下の5つのステップで構成されます。

Pythonによるブログ動画自動生成パイプラインの全体図解
ブログ記事から16:9動画を自動出力する一連のパイプラインフロー

ブログ記事の要約とスライド構成の抽出

最初のステップは、記事本文をLLM(Google AI Studio / Gemini API など)に渡し、動画用スライドの構成とナレーション原稿を構造化データ(JSON)として抽出することです。

開発リソース:Google AI Studio(Gemini API 公式サイト)

Gemini APIへのプロンプト設計例:

以下のブログ記事を元に、16:9の横型解説スライド(3〜5シーン)の構成を作成してください。
出力は必ず以下のJSONフォーマットのみを返してください。

[
  {
    "scene_index": 1,
    "slide_title": "スライドの見出し",
    "points": ["箇条書き要点1", "箇条書き要点2", "箇条書き要点3"],
    "narration": "このスライドで読み上げる自然なナレーション文です。"
  }
]

【記事本文】
(ここにブログのテキストを入力)

VOICEVOXを活用したナレーション音声の生成

抽出した「narration」テキストを元に、合成音声を作成します。無料で利用でき、商用利用も可能なローカルAPIとして動作するVOICEVOX(ボイスボックス)を利用するのが実用的です。

公式サイト・ダウンロード:VOICEVOX 公式サイト(voicevox.hiroshiba.jp)

音声ファイルを生成すると同時に「音声の再生時間(秒数)」を取得しておくことが極めて重要です。この秒数が、該当スライドを表示する時間となります。

import requests
import json
import wave

def generate_voicevox_audio(text, speaker_id=2, output_path="audio.wav"):
    base_url = "http://127.0.0.1:50021"
    
    # 1. 音声合成用のクエリを作成
    params = {"text": text, "speaker": speaker_id}
    res_query = requests.post(f"{base_url}/audio_query", params=params)
    query_data = res_query.json()
    
    # 2. 音声合成を実行
    res_synth = requests.post(
        f"{base_url}/synthesis",
        params={"speaker": speaker_id},
        headers={"Content-Type": "application/json"},
        data=json.dumps(query_data)
    )
    
    # 3. WAVファイルとして保存
    with open(output_path, "wb") as f:
        f.write(res_synth.content)
        
    # 4. 音声の長さ(秒数)を計測
    with wave.open(output_path, "rb") as wf:
        frames = wf.getnframes()
        rate = wf.getframerate()
        duration = frames / float(rate)
        
    return duration

Pillowによる16:9スライド画像の自動描画

各シーンのタイトルと箇条書き要点を、1920×1080ピクセル(16:9標準フルHD)の画像として描画します。Pythonの画像処理ライブラリであるPillow(PIL)を使用すれば、背景色や文字サイズ、枠線を動的にレイアウトできます。

公式サイト・ドキュメント:Pillow 公式サイト(python-pillow.org)

16:9比率スライド画像の自動生成サンプル図解
自動生成される16:9スライド画像のレイアウト設計例(見出し・要点・テロップの分離配置)

スライド作成のポイントは「文字を詰め込みすぎないこと」です。画面上は箇条書きの要点にとどめ、詳しい説明はナレーション音声側で伝える構成にすることで、スマートフォンでも見やすい画面に仕上がります。

MoviePyによる音声と画像の結合処理

生成された各スライド画像と音声ファイルを、Pythonの動画編集ライブラリであるMoviePyを用いてタイムライン上に結合し、MP4動画として書き出します。

公式ドキュメント:MoviePy 公式ドキュメント(zulko.github.io/moviepy)

from moviepy.editor import ImageClip, AudioFileClip, concatenate_videoclips

def create_video_from_scenes(scene_list, output_file="output_16x9.mp4"):
    clips = []
    
    for item in scene_list:
        img_path = item["image_path"]
        audio_path = item["audio_path"]
        duration = item["duration"]
        
        # 音声ファイルを読み込み
        audio_clip = AudioFileClip(audio_path)
        
        # 音声の長さに合わせて画像クリップを作成(16:9)
        # 音声の切れ目に余白を持たせるため0.5秒追加
        clip_duration = duration + 0.5
        img_clip = ImageClip(img_path).set_duration(clip_duration).set_audio(audio_clip)
        
        clips.append(img_clip)
        
    # 全シーンを順番に連結
    final_video = concatenate_videoclips(clips, method="compose")
    
    # YouTube等に適したH.264 / AAC形式で出力
    final_video.write_videofile(
        output_file,
        fps=24,
        codec="libx264",
        audio_codec="aac"
    )
    print(f"動画出力完了: {output_file}")

用途に応じたアプローチの選び方

ご自身の目的やスキルセット、動画の運用規模に応じて、最適なアプローチを選んでみてください。

アプローチ 主なツール・リンク メリット 適した用途
AIツール・SaaS活用 NoLang
Vrew
環境構築不要、操作が簡単、手動での微調整が可能 まずは数本テスト作成したい場合、クオリティを画面上でこだわりたい場合
Python自動パイプライン Gemini API
VOICEVOX
Pillow
MoviePy
完全無人化が可能、デザインの統一、ランニングコストを低く抑えられる WordPress記事投稿と連動して大量に自動生成したい場合、独自システムに組み込みたい場合

まとめ

ブログ記事のテキスト情報は、すでに構成や論点が整理されているため、動画コンテンツの「台本」として非常に優秀な素材です。

  • 手軽にスピード重視で試したいときは「NoLang」や「Vrew」を活用する
  • ブログ投稿と連携して量産・自動化を進めたいときは「Python + VOICEVOX + MoviePy」のパイプラインを構築する

文字コンテンツを動画という別の表現形式に変換することで、これまで届かなかった新しい読者層との接点を作ることができます。まずは手元の記事を1本ピックアップして、動画化の一歩を踏み出してみてはいかがでしょうか。


eguchi.netをもっと見る

購読すると最新の投稿がメールで送信されます。