Amazon Web Services ブログ

AWS Elemental MediaConvert と Amazon Polly を使って記事を動画にする方法

デジタルメディアパブリッシャーは、顧客のニーズに応えるためにユーザーエクスペリエンスを改革しています。特に、マルチタスクや外出先、スマートデバイスを使用している場合、読者はコンテンツを利用する別の方法を探しています。

インフォグラフィックス、フォトストーリー、ポッドキャスト、オーディオブック、ビジュアルナレーション、ソーシャルメディアストーリーなどは、読者の高度な期待に適応する新しいコンテンツタイプのほんの一例に過ぎません。

AWS Machine Learning Blog の以前の投稿で、Trinity Audio の WordPress プラグインを使用してブログ記事を自動的に音声化する方法を紹介しました。このガイドでは、Amazon Web Services(AWS)を使用して、記事をビジュアルナレーションに変換し、ソーシャルメディアプラットフォームで共有可能なティーザーを提供する方法を紹介します。

記事からSNSで共有できるビジュアルナレーション付き動画を作成する

本デモで利用するサンプル記事

記事から作成された SNS ストーリーの GIF アニメーション

これは、記事を加工してソーシャルメディアのストーリーに変換した結果です(ここではアニメーション GIF として表示)。

この記事は、二部構成のシリーズの第一部です。この最初のパートでは、コンテンツがどのように取得、加工され、消費者に提供されるかを見ていきます。第二部では、AWS Elemental MediaTailor(チャンネル組み立てとパーソナライズド広告挿入サービス)を使用して、コンテンツを収益化するためにソリューションを拡張する方法について見ていきます。

使用するサービス

ソリューションの詳細に踏み込む前に、使用するサービスについて紹介します。

AWS CDK

AWS Cloud Development Kit (AWS CDK) は、使い慣れたプログラミング言語を使ってクラウドアプリケーションのリソースを定義するために使用できる、オープンソースのソフトウェア開発フレームワークです。このシリーズでは、AWS CDK で、TypeScript を使用したソリューションのインフラストラクチャを定義します。

Amazon Polly

Amazon Polly は、テキストをリアルな音声に変換するサービスで、音声アプリケーションを簡単に作成し、音声用に活性化された全く新しいカテゴリーの製品を構築することができます。Amazon Polly の音声合成サービスは、高度なディープラーニング技術を使用して、自然な響きを持つ人間の音声を合成します。幅広い言語セットに対応した何十ものリアルな音声により、さまざまな国で動作する音声起動アプリケーションを構築することができます。Amazon Polly を使用して、お客様のテキストをビジュアルナレーションで生き生きと表現します。

AWS Elemental MediaConvert

AWS Elemental MediaConvert は、放送品質の機能を持つ、ファイルベースのビデオトランスコードサービスです。これを使用することで、放送やマルチスクリーン配信用のビデオオンデマンドコンテンツを簡単に大規模に作成することができます。この例では、MediaConvert を使用して、Amazon Polly で生成された音声と映像コンテンツを組み合わせています。また、プレイリストブラウザーやアプリがストリーミングできるように、MediaConvert を使用して HTTP ライブストリームを生成し、コンテンツをストリーミング用に準備します。

Amazon Comprehend

Amazon Comprehend は、機械学習を利用してテキストから価値ある洞察や関連性を発見する自然言語処理サービスです。Amazon Comprehend を利用して、記事本文からキーワードやラベルを抽出し、広告判定サーバーに送り、文脈に応じた広告を提供します。

その他のコンポーネント

HLS

HTTP Live Streaming (HLS) は、HTTP Adaptive Bitrate (ABR) ストリーミング通信プロトコルです。HLS を使用してホストおよびストリーミングするのに必要なのは従来の Web サーバーだけです。メディアファイルはダウンロード可能なセグメントに分割され、プレイリスト (M3U8 ファイル) に整理されています。

ユーザーのプレイヤーは、まずプレイリストをダウンロードし、ユーザーがメディアを進行するにつれて、セグメントのダウンロードを進めていきます。HLS は、H.264 ビデオコーデックと、MPEG-2 ストリームでカプセル化された AAC、MP3、AC-3、EC-3 のオーディオをサポートしています。以下は、M3U8 ファイルの例です。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:11,
mediafile_00001.ts
#EXTINF:10,
mediafile_00002.ts
#EXTINF:11,
mediafile_00003.ts
#EXTINF:10,
mediafile_00004.ts
#EXTINF:11,
mediafile_00005.ts
...

HLS プレイリストを記述した M3U8 ファイルからの抜粋です。

WordPress コンテンツ

今回のコードサンプルでは、世界中のお客様に広く採用されているコンテンツ管理システム(CMS)である WordPress を使用してコンテンツを作成します。このサンプルではウェブページからコンテンツをスクレイピングしていますが、本番システムでは、より予測可能な方法で必要なコンテンツを収集するために、CMS の API を使用することをお勧めします。

FFmpeg

重要な法律上の注意事項:このソリューションは、アップロードされたメディアファイルの低レベルの視覚および音声機能を分析および操作するために FFmpeg を使用します。FFmpeg は、ビデオ、オーディオ、およびその他のマルチメディア ファイルとストリームを処理するための、フリーでオープンソースのソフトウェア スイートです。FFmpeg は GNU Lesser General Public License (LGPL) の下で配布されています。FFmpeg の詳細については、次のリンクを参照してください:https://www.ffmpeg.org/このソリューションを使用することは、FFmpeg を使用することを意味します。FFmpeg を使用したくない場合は、このソリューションを使用しないでください。

前提条件

この投稿の内容を実行するには、AWS アカウントが必要です。

AWS CDK、Python、JavaScript の経験があることが推奨されますが、必須ではありません。

ソリューションの概要

ソリューションのコレオグラフィ図

この投稿では、以下の方法で記事を取り込み、視覚的な物語を生成するイベント駆動型のコレオグラフィックワークフローを提案します。

  • Amazon Polly を使用して記事を音声化する
  • 記事に添付された画像を使って、動画スライドショーを作成する。

このワークフローは、Amazon Comprehend を利用して以下を実行します。

  • ワークフローは、Amazon Polly が記事を読むために使用する正しい音声を選択できるように、記事の言語を推論します。
  • ワークフローが VMAP マニフェスト(訳注:動画の広告挿入位置を指定するファイル。挿入する広告情報を含めることも可能)を作成するために使用するキーフレーズと単語を抽出し、コンテキストを考慮した広告を表示します。便宜上、プリロールとポストロールの広告挿入のみを使用しますが、ミッドロールの機会を見つける方法については、この前の投稿で学ぶことができます。このシリーズの第二部では、マネタイズの側面を深く掘り下げますので、お楽しみに!

このワークフローの入力は、WordPress の記事の URL です。ワークフローの出力は次のようになります。

  • ソーシャルメディアで共有できる、記事の 30 秒ティーザー動画:これは、業界最高レベルのスケーラビリティ、データの可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスである Amazon Simple Storage Service (Amazon S3) に保存された MP4 ファイルです。
  • Amazon S3 バケットに格納された HLS 形式(M3U8 マニフェスト ファイルと関連するセグメント)の長さが可変のフル ビデオナレーション(記事内のテキスト量に依存)。
  • Amazon S3 バケットに格納された、動画の作成に使用されたテキスト、メディア、および画像ファイルのセット(詳細は後述します)
  • Amazon DynamoDB(フルマネージド、サーバーレス、キーバリューの NoSQL データベース)のテーブルに格納された記事の取り込み時に生成されたメタデータ。生成されたメタデータは次のとおりです。
{
    "AssetId": "2af6fa09-078a-410e-a84b-969c0182119f.json",
    "Engine": "neural",
    "PreviewVideoFile": "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/output/preview/2af6fa09-078a-410e-a84b-969c0182119f.mp4",
    "ArticlePath": "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/text/2af6fa09-078a-410e-a84b-969c0182119f.json",
    "PostProducedImagesS3Paths": [
        "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/image/output/2af6fa09-078a-410e-a84b-969c0182119f.json/ferrari_01.jpg.tga",
        "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/image/output/2af6fa09-078a-410e-a84b-969c0182119f.json/ferrari_04.jpg.tga",
        "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/image/output/2af6fa09-078a-410e-a84b-969c0182119f.json/ferrari_02.jpg.tga",
        "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/image/output/2af6fa09-078a-410e-a84b-969c0182119f.json/ferrari_05.jpg.tga"
    ],
    "Bucket": "pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905",
    "Url": "https://giusedroid.wordpress.com/2021/04/29/a-brief-history-of-ferrari/amp/",
    "LanguageCode": "en-US",
    "FullVideoStream": "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/output/full/hls/2af6fa09-078a-410e-a84b-969c0182119f/template.m3u8",
    "FullNarration": "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/audio/full/2af6fa09-078a-410e-a84b-969c0182119f.json/.5678d4db-4116-4201-b5d7-529b6f2e42e0.mp3",
    "VoiceId": "Joanna",
    "FullNarrationDurationInSeconds": 212.297167,
    "AudioPreview": "s3://pollypreviewsimplestack-pollyassetstore920ee247-1pvn3ec82d905/audio/preview/2af6fa09-078a-410e-a84b-969c0182119f.json/.5678d4db-4116-4201-b5d7-529b6f2e42e0.wav",
    "ImagesURLs": [
        "https://giusedroid.files.wordpress.com/2021/04/ferrari_01.jpg",
        "https://giusedroid.files.wordpress.com/2021/04/ferrari_04.jpg",
        "https://giusedroid.files.wordpress.com/2021/04/ferrari_02.jpg",
        "https://giusedroid.files.wordpress.com/2021/04/ferrari_05.jpg"
    ]
}

記事のインジェストによって作成されたデータセットのサンプル。これは、ソリューションによってデプロイされる Amazon DynamoDB テーブルのアイテムとして格納されます。

コレオグラフィーパターン

今回は便宜上、コレオグラフィーパターンに従ったサーバーレス、イベント駆動型アーキテクチャを選択しました。ワークフローの起動には、Amazon S3 のイベント通知機能(S3 バケットで特定のイベントが発生したときに通知を受け取ることができる機能)を使用しています。アセットストアの特定のパス下にアップロードされた PUT イベントがトリガーとなって、コレオグラフィーの各ステップが呼び出されます。ワークフローを構成する関数は、ワークフローの最初に Amazon API Gateway から呼び出されるものを除いて、すべて非同期で呼び出されます。Amazon API Gateway は、開発者があらゆる規模の API を簡単に作成、公開、維持、監視、および保護できるようにするフルマネージドサービスです。以下は、イベントシーケンスを説明する図です。

コレオグラフィワークフローの図解

以下、ワークフローを説明します。

  • AWS Lambda 関数から始まり、記事を URL で取り込み、JSON ドキュメントを生成し、Amazon S3 にアップロードします。
  • このイベントは、別の AWS Lambda 関数を呼び出し、非同期に Amazon Polly を呼び出して、音声合成タスクを開始します。
  • 合成タスクが完了すると、Amazon Polly によって作成された MP3 ファイルが Amazon S3 にアップロードされ、専用の AWS Lambda 関数を通じて30秒間のプレビューの抽出が呼び出されます。
  • 次に呼び出されるステップは、記事に添付された画像のダウンロードと前処理で構成されています。
  • 次のステップでは、2つの並列 MediaConvert ジョブが起動されます。
  • 最後に、メディアアセットが MediaConvert によって Amazon S3 に書き込まれると、最後の AWS Lambda 関数が呼び出され、アセットのパスでメタデータストアが更新されます。

コレオグラフィーの各ステップでは、ソリューションによって展開された Amazon DynamoDB テーブルに更新が書き込まれます。このテーブルは、アセットメタデータ管理ストアとして使用され、一方、Amazon S3 バケットは、メディアファイルと複雑なメタデータのストレージのために利用されています。

ガイドを入手する

このコードサンプルの構築および運用方法に関する包括的なガイドは、ここからダウンロードできます。(英語資料)

まとめ

この記事では、AWS サービスを使用して構築された完全に自動化された編集ワークフローを利用して、記事を動画に変換する方法の概要を共有しました。

プレビュー結果のサンプルはこちらからダウンロードできます。これは、この記事から作られた出力です。

このリポジトリをクローンして、あなたの要件に合わせてソリューションを調整するために実験を開始することをお勧めします。このアプローチについてどう思うか、コメントで教えてください。また、リポジトリの issue セクションで要望や質問を自由に書いてください。次回は、このワークフローで作成されたアセットのいくつかを使って、自動生成されたコンテンツを収益化する予定です。

翻訳はソリューションアーキテクト 前川 泰毅 が担当しました。原文はこちらです。