Amazon Web Services ブログ

simpleshow が Amazon Polly を使って解説動画のストーリーを音声化する方法

simpleshow は 10 数年前に、3 分間のアニメーション解説動画を使用することによって、お客様がそれぞれの素材、アイデア、および製品を説明できるように援助し始めました。これらの解説動画は、ふたつの手とシンプルな白黒のイラストを使って視聴者にストーリーを伝えます。現在 simpleshow では、誰もがほぼすべてのトピックに関する高品質の解説動画を作成できるプラットフォーム、mysimpleshow.com も提供しています。このプラットフォームは Amazon Polly と統合されているため、台本が提供されていれば、誰でも解説動画に自然な発音の音声を使用できます。

最初に、simpleshow についてもう少しお話ししてから、mysimpleshow がどのように Amazon Polly と統合されているかについて説明したいと思います。

過去 10 年の間、simpleshow は解説動画フォーマットの有効性を科学的に証明し、simpleshow の専門家は、何千にも及ぶ解説動画において、シンプルかつ楽しい方法でそれぞれのトピックを紹介できるようにお客様を助けてきました。

これらの動画の制作には、チーム内に多くの才能が必要です。

  • ストーリーテリング: 認定された simpleshow のコンセプトライターが基本的な事実を中心にストーリーを創り出します。
  • イラストレーション: 才能豊かなアーティストが適切な抽象化レベルで対象物とコンセプトをイラストにします。
  • ビジュアル化: ストーリーボードアーティストとモーションデザイナーがストーリーをビジュアル化してアニメーションにします。
  • 音声: プロの話し手のネットワークが、ふさわしい口調であることを確実にします。

解説動画が極めて幅広い用途を持つフォーマットであることに気付いた simpleshow のチームは、さらに多くの分野におけるさらに多くのユーザーがリソースを使用できるようにしたいと考えました。これが、simpleshow のチームが mysimpleshow.com を作った理由です。このプラットフォームは、誰もがほぼすべてのトピックに関する高品質の解説動画を作成できるようにするものです。mysimpleshow は人口知能 (AI) を使用し、使いやすいユーザーインターフェイスを備えています。

mysimpleshow でのプロセスはとてもシンプルです。

  • まず、ユーザーがストーリーを書きます。mysimpleshow は、幅広いトピックを対象とするサンプルストーリーを使ったテンプレートとインスピレーションでユーザーをガイドします。
  • ストーリーのテキストは、次に mysimpleshow の中核にある人工知能、Explainer Engine によって分析されます。Explainer Engine は、意味のあるキーワード、人物、および場所を認識するために自然言語処理 (NLP) を使用します。その後、Wikipedia の背景にあるナレッジベース、Wikidata を使ってキーワードの用語を一般化します。例えば、テニスやバスケットボールの選手の名前がストーリー内にある場合、Explainer Engine は Wikidata を使ってその人物の専門分野を特定し、その結果、テニスのラケットやバスケットボールが適切なイラストとして提案されます。

    これは、イラストがストーリー内の人物用に作成されていない場合でも、ストーリーが極めて適切な方法でビジュアル化されることを意味します。ストーリー内の地名については、Explainer Engine が人口を調べ出し、それに合ったスカイラインをイラストとして提供します。
  • Explainer Engine は、ボタンをクリックするだけで、すべてのイラストの simpleshow データベースで正しい画像を検索します。イラストは、多層システムを使ってすべてタグ付けされています。

Amazon Polly とチームを組む simpleshow

音声は、解説動画にある知識を伝えるために必要不可欠です。情報のほとんどは、声によって伝えられます。イラストとアニメーションはユーザーの注意を引き、より良い理解のためのストーリーテリングをサポートします。結果として、多感覚コンテンツは、声またはアニメーションだけの場合よりも記憶によく残ります。

mysimpleshow は、解説動画のもうひとつの重要な要素についてもユーザーをサポートします。ユーザーのストーリーを読み上げるコンピューターで合成した音声を提供するのです。mysimpleshow は、ストーリーの読み上げに Amazon Polly を使用しています。

simpleshow が Amazon Polly を使用する理由

simpleshow が解説動画の自動音声として Amazon Polly を使用することにはいくつかの理由があります。

  • mysimpleshow は AWS ベースの SaaS (Software as a Service) で、AWS Elastic Beanstalk、Amazon DynamoDB、Amazon Simple Workflow Service (SWF)、Amazon Simple Queue Service (SQS)、および AWS のその他サービスをフル活用している。mysimpleshow と Amazon Polly の統合は簡単でした。
  • Amazon Polly の使用によって、simpleshow はテキスト読み上げのコストを最適化することができた。チームは、メンテナンスと運用を大幅にシンプル化し、拡張性を向上させることができました。
  • Amazon Polly は多数の言語をサポートする。mysimpleshow には、英語版とドイツ語版がすでに存在しています。Amazon Polly の音声は、その他多くの言語に拡張する可能性のために利用できます。
  • Amazon Polly の音声の品質が高い。
  • Amazon Polly では、言葉のカスタマイズされた発音を使用できる。

これらの理由はすべて大切なものですが、最後の理由が特に傑出していました。Amazon Polly の発音辞書は、mysimpleshow が言葉の発音をカスタマイズすることを可能にします。

例えば、ドイツ語では既存の言葉を組み合わせることで新しい言葉が作られることがよくあります。Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz (文字どおり、「牛肉表示監視業務委託法」を意味します)[1] は非常に長い複合ドイツ語です。Amazon Polly は、これらの言語的な複合語を単独で非常にうまく処理することができます。しかし、ドイツ語では、このタイプの語形成が他の言語から取り入れられた言葉にも及んでいます。例えば、mysimpleshow という製品名は、my、simple、および show という言葉の組み合わせです。ドイツ語を話すユーザーには、英語の言葉に由来する複合語を個々の言葉に分割することが推奨されています。これは通常、これらの言葉の発音を大幅に向上させます。

コード例

以下のコード例は、mysimpleshow が Amazon Polly を使用する方法を表しています。

mysimpleshow は、Amazon Polly へのリクエストに音声合成マークアップ言語 (SSML) を使用します。SSML は、音声がどのようにレンダリングされるかに対する最高レベルのコントロールを提供します。さらに、SSML の表現形式はデバッグ目的にも非常に便利です。

SSML

<speak><prosody volume="+20dB" rate="100%"><break time="500.0ms"/>This is Tom.He wants to buy a used car.So he starts browsing the internet.</prosody></speak>

最初のステップでは、Amazon Polly から音声単語のタイミングがリクエストされます。キーワードのタイミングは、キーワードに関連するイラストがそのシーンにいつ置かれるかを定義します。動画のタイムラインを定義するのは、基本的に音声単語です。これは Amazon Polly に固有であるとも言えます。他の TTS サービスは、MP3 とタイミングを一緒に提供する場合があります。

TTS のタイミングの呼び出し

import com.amazonaws.services.polly.AmazonPolly;
import com.amazonaws.services.polly.model.OutputFormat;
import com.amazonaws.services.polly.model.SynthesizeSpeechRequest;
import com.amazonaws.services.polly.model.SynthesizeSpeechResult;
import com.amazonaws.services.polly.model.TextType;
import com.mysimpleshow.backend.common.enums.Voice;
import com.mysimpleshow.backend.common.service.DictionaryService;

class TTSService {

    private DictionaryService dictionaryService;

    private AmazonPolly polly;

    public SynthesizeSpeechResult synthesizePolly(final String text, final Voice voice) {
        final SynthesizeSpeechRequest request = new SynthesizeSpeechRequest()
                .withOutputFormat(OutputFormat.Json)
                .withText(text)
                .withTextType(TextType.Ssml)
                .withVoiceId(voice.getVoiceId())
                .withLexiconNames(dictionaryService.getDictionaryNameForLocale(voice.getLocale());

        return polly.synthesizeSpeech(request);
    }
}

2 番目のステップでは、音声単語のための MP3 が生成されます。これは前の呼び出しとほとんど同じもので、ここでは結果が前のタイミングでの JSON ではなく MP3 になるだけです。

TTS の MP3 の呼び出し

import com.amazonaws.services.polly.AmazonPolly;
import com.amazonaws.services.polly.model.OutputFormat;
import com.amazonaws.services.polly.model.SynthesizeSpeechRequest;
import com.amazonaws.services.polly.model.SynthesizeSpeechResult;
import com.amazonaws.services.polly.model.TextType;
import com.mysimpleshow.backend.common.enums.Voice;
import com.mysimpleshow.backend.common.service.DictionaryService;

class TTSService {

    private DictionaryService dictionaryService;

    private AmazonPolly polly;

    public SynthesizeSpeechResult synthesizePolly(final String text, final Voice voice) {
        final SynthesizeSpeechRequest request = new SynthesizeSpeechRequest()
            .withOutputFormat(OutputFormat.Mp3)
            .withText(text)
            .withTextType(TextType.Ssml)
            .withVoiceId(voice.getVoiceId())
            .withLexiconNames(dictionaryService.getDictionaryNameForLocale(voice.getLocale()));

        return polly.synthesizeSpeech(request);
    }
}

3 番目の最後のステップでは、ffmpeg を使用して、Amazon Polly の音声、バックグラウンド・ミュージック、さらに多くの音響、そしてアニメーションが完成された動画にまとめられます。

ffmpeg -y -i <video-path> -i <sound-path> <output-path> -shortest

mysimpleshow は、Amazon Polly が提供する多種多様な人声を使用することによって、お客様に素晴らしい経験を提供することができます。さらに、Amazon Polly の使用は低コストで、その API を使った簡単な統合を提供し、音声をカスタマイズする機能も備えています。Amazon Polly は mysimpleshow にとって欠かせない AI サービスで、私たちはこれを使ってさらなるイノベーションを行っていくことを楽しみにしています。


著者について

Hans-Christian Pahlig は simpleshow 社 IT 部門の部長です。Hans-Christian は開発チームと IT インフラストラクチャチームを指揮しており、国際的な経験を積んだメディア業界における IT 専門家です。大学で数学を学んだ Hans-Christian は、ニューラルネットワークが考案された学派の出身です。仕事をしていないときは、風景写真の美学と禅からインスピレーションを得ています。