2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1年半前、Powerpointを利用してYoutube投稿目的で作成した、「紙芝居」.mp4を改良する①

Posted at

日本でChatGPTのサービスがはじまってから数か月後の2024.2に作成した、(20) ものほしざお(絵本) - https://youtu.be/iGRwUov3O74?si=FE6uddL42Jl_KEaa  を今回改良してみた。

当時は、ChatGPTで最初に作画機能が搭載されたすぐのときだった。まだ、ChatGPTの機能が十分でなかったり、ぼくのほうの理解度が低かったこともあいまって、まだまだ改良の余地が大きかった。

今回の改良の目標は次の2つである。
ーPowerpointスライドには、「字」はのせず、「絵」のみとする。物語は、AIでつくった「ぼく」の声が語り、その字幕が表示されるようにする。
ー前回、絵の登場人物や背景がばらばらだったところに、なるべく統一感をもたせる

(1) ElevenLabsで自分の声をもとにしたAI音声をつくる。

TTS作成ソフトは数多くある。下図にまとめた。

image.png

「iRocket VoxTalker」は信頼性が低く、個人情報や支払いトラブルの報告もあります。自分の声をAIクローン化したいなら、ElevenLabs か Play.ht を使うのが確実・安全とのこと。
ElevenLabsの無料版ではAIクローンができないが、Play.htなら無料版でもできそうということで、当初Play.htを試みたが、Play.htは2025.11.1時点、新規申し込み中止だった。なのでElevenLabsの月5ドルの有料版使用(ちなみに、2025.11.1時点、JCBカードがつかえなかった。VISAカードはOK)。

ElevenLabs のHP: https://elevenlabs.io/app/home

そこの左側下の「デベロッパー」を選択すると、下記のようなページ(概要でなくAPIキーを示した)。そこで「APIキー」を取得。

image.png

さらに、同じくElevenLabs のHP画面、左側上の「ボイス」を選択し、その後右上に現れる「声を作成またはクローン」をクリックした下図をへて、自分の声をクローンして、その、「Voice ID」入手。

image.png
上図で、「ボイスデザイン」を選ぶのは今回の目的には✖:あらかじめあるAIから声を選んでテキストを読ませるだけで、自分の声データは使われない。→ 下の「インスタントボイスクローン」を選ぶ。すると下記へ。
image.png

自分の声の①ファイルアップロード、あるいは②ここで直接録音 (30秒)(ぼくは②を選択) →右側のパネルで 「Voice ID」 が自動的に発行されます。
クローン音声を作成すると、「ホーム」左側のサイドバー上部の 「ボイス(Voices)」 を選択して、そこの画面上にならぶところから(今は概要)「マイボイス」を選ぶと、自分の作成したクローン音声表示されます。その音声カードをクリックしすると右側(またはポップアップ)に「Voice ID」 という英数字のコードを確認できる(下図)。
image.png

自分の声をもとにしたAIの声は、今り若返る印象。自分の息子の声と似ている?

*今後のスクリプト作成時に、ElevenLabs の 「APIキー」、そこで作った、自分のAIボイスの「Voice ID」 をスクリプトに書きこむことがある。
 API_KEY = "YOUR_ELEVENLABS_API_KEY"
 VOICE_ID = "YOUR_VOICE_ID"

(2) 最初に作ったスクリプト:ppt_elevenlabs.py はテキストをもとに作成した音声と字幕をPowerpointに出力する仕様だった(python-pptxで PowerPoint作成)(その後、Powerpointの録音機能から.mp4を作成)
  → (注)最終的にはこの方法は挫折した

1.スクリプト内に、ストーリーを文字入力をする
 (注意)
   ①python3.10 ⇒3.8 にしてスクリプトは実行(VSCで調整) 
   ②(1)で入手した下記を書きこむ
   API_KEY = "YOUR_ELEVENLABS_API_KEY"
   VOICE_ID = "YOUR_VOICE_ID"
2.実行すれば、my_voice_story_elevenlabs.pptxが生成。ppt_elevenlabs.pyでつくった音声と字幕がPowerpointのどこに入ったか下記で確かめる。

image.png

ホーム→一番右の「編集」→「選択」→「オブジェクトの選択と表示。

なお、詳細は下図も参照だが、今たまたま選択されているのは、ppt_elevenlabs.pyで自動作成されたTextである。なおこのテキストは、スライド画面で、挿入→テキストボックス、で手動で追加もできる。
image.png
ホーム→一番右の「編集」→「選択」→「オブジェクトの選択と表示、のあと、この画面。

今の図では、ppt_elevenlabs.pyでつくった音声slide_1.mp3が、スライド下部左側にはいっているのがわかる。なお、このような音声は、挿入→メディア→オーディオ→このコンピューター上のオーディオ、で手動で挿入(追加やいれかえ)することもできる。
この、となり(スライド下部中央)のテキストは、上図でもふれたように、右側に表示されているTextBox2で、これはppt_elevenlabs.pyでつくられたテキスト(字幕)である。

image.png
選択されている「オーディオ6」は、このパワーポイント上で、スライドショー→録画、で普通に録音した音声。これは、スライド下部右側の「スピーカーマーク」と対応している。
なお右側に表示されているいる「楕円4」は、このスライド上で選択→図形で普通に作成したもの。

とはいえ、これらのことはパワーポイントに詳しくない、ぼくにとって、なかなか理解がむずかしかった。
さらに問題だったのは、ショートショートといっても「タイチ」の文章はとても長い。なので、字幕をすべてだしておくと、画面に入らない。字幕を1行おわったら、それを消して、次の行に行く、というようにできないと役に立たない。
だが、このPowerPointの「アニメーション」機能で1行ずつ出す、のが非常に大変。調べると下記のような方法で、可能だということだった。だが、実際に試していない。この時点で、この方法はあきらめ、(3)へと移行した。

(参考手順)
1️⃣ スライド上に「字幕」テキストボックスを配置(画面下あたり)
 例:「ママは、ある朝、仕事に行かなくてはいけないので…」
2️⃣ テキストを1文ごとに改行しておく
 例:
ママは、ある朝、仕事に行かなくてはいけないので、とても急いでいた。
そのせいで、ついうっかり一つの過ちを犯してしまった。
ママは、タイチを、たくさんたまった洗濯物と一緒に、洗濯機に投げ入れてしまったのだ。

3️⃣ 上メニューで
 [アニメーション] → [アニメーションの追加] → [フェード] を選択
4️⃣ 右側に「アニメーションウィンドウ」を表示
 ([アニメーションウィンドウ]をクリック)
5️⃣ 右ウィンドウの「効果のオプション」→
 「テキストのアニメーション → 段落ごとに表示」を選択
 これで、1文ずつフェードイン してくれます。

*ここで、音声と字幕(フェード)のタイミングを合わせる方法は、このやり方では。音声の時間を別個に測定メモしておき、アニメーション(フェード)の変化のタイミング時刻をひとつひとつ書きこんでいく方法となる。

(3) Powerpointを介さず、Pythonのみで、テキストから一気に.mp4を出力するmake_voice_video_auto_bg.pyの作成 (Moviepy、ImageMagick をインストール)
(注意)①やはり、python3.10 ⇒3.8 にして実行
    ②API_KEY = "YOUR_ELEVENLABS_API_KEY"、
     VOICE_ID = "YOUR_VOICE_ID"を使用

まずは、1画面で固定した状態で、音声にあわせ、長い字幕を1~数行に区切って次々ときりかわっていくようにする。

import requests, json, random, os
from moviepy.editor import *
from moviepy.config import change_settings
from PIL import Image, ImageDraw
from pathlib import Path

====== ImageMagick のパス ======
change_settings({"IMAGEMAGICK_BINARY": r"C:\Program Files\ImageMagick-7.1.

====== ElevenLabs 設定 ======
API_KEY = "sk_77ad082b76ba053d4473cdf06      "
VOICE_ID = "DaLB0nhXdwoL    "
OUTPUT_MP4 = "taichi_story_auto.mp4"

===== 字幕内容(1ページ8行分を下記のようにさらに13行に分割した) ======
lines = [
"ママは、ある朝、仕事に行かなくてはいけないので、",
"とても急いでいた。",
"そのせいで、ついうっかり一つの過ちを犯してしまった。",
"ママは、タイチを、たくさんたまった洗濯物と一緒に、",
"洗濯機に投げ入れてしまったのだ。",
"ママは、不注意にも、洗濯物を外に干すときに、",
"タイチも一緒につるしてしまったことにさえ気が付かなかった。",
"でもこのことでママを責めてはいけない。",
"母一人子一人の生活は大変なことなのだ。",
"ママは、タイチのための昼ごはんをテーブルに用意すると、",
"「行ってきます。夕方には帰ってくるからいい子にしてるのよ」",
"と家の奥に向かって声をかけると、",
"いそいそと出かけていった。"
]

image.png

make_voice_video_auto_bg.py (上記の拡張版)では、 8つの写真、8つの字幕にすることもできる。
背景音楽は、このスクリプトの実行結果アウトプットされた、taichi_story_auto.mp4をYoutubeにアップするときにつける予定である。

それにしても、今のYoutubeに、今回のような字幕が入っているの多いが、みなどうやっているのだろう?有料ソフトがあるのかな?あと、ElevenLabs でも、日本文の読み違い、散見する(そうすごく多くはないが、今のYoutubeで間違いがもっと多いのはたくさんある)。これは修正しようがない?あるいは修正大変?
上記については、次の②でさらに見ていく予定である。

とにかくも、ここでできた、make_voice_video_auto_bg.pyによって、ニュース原稿をAIに読ませることができたり、あるいは、AIが本を読むオーディオブックをつくったりすることが可能になった。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?