3行で要約
やってみたら、正直すごすぎました。
- 57枚の PowerPoint ノートを Azure Speech で一括音声化
- 音声を各スライドに埋め込み、自動再生+自動ページ送りまで設定
- 冒頭欠けは「WAVへの物理パディング」で解消、コストも実用範囲
先に成果を見たい方向け
今回作成した内容の動画はこちらです。
https://1drv.ms/v/c/84dc8493dd457045/IQAU2fgsfSUfSatHBQoX8f0eAZEd63SAQqT3G85HfgmhiyM?e=0zxTPw
この記事でわかること
この記事は、次をまとめた実践ログです。
- スライドノートを使った Azure Speech での一括 Text to Speech
- 作成した音声の PowerPoint 埋め込み
- 自動再生・自動ページ送りの設定
- 冒頭欠けトラブルの原因と対策
- 実際にかかったコスト感
なぜやろうと思ったか
配信用の動画を作る機会は多いのですが、毎回いちばん詰まるのが「ナレーション収録の時間」でした。
スライド修正のたびに録り直しが発生し、完成までのリードタイムが伸びてしまいます。
そこで「Microsoft Scout なら、この流れをまとめて自動化できるのでは?」と考え、試したのが今回です。
結果として、自然言語で指示するだけで Azure CLI 実行、TTS、音声加工、埋め込み設定まで一気通貫で進められました。
実行に使ったコードやスクリプトは、すべて Scout 側の自動生成です。
Microsoft Scout とは何か?
Microsoft公式の Learn ドキュメント(Frontier)では、Scout は
「Windows / macOS 向けのデスクトップAIアプリで、ファイル操作・シェル実行・ブラウザー操作・Microsoft 365 データ連携を、自然言語指示で実行する」 と説明されています。
(出典: https://learn.microsoft.com/en-us/microsoft-scout/overview)
また同ドキュメントでは、Scout は Frontier preview の事前提供機能(プレビュー) と明記されており、
機能や提供形態は今後変更される可能性がある点も案内されています。
(出典: https://learn.microsoft.com/en-us/microsoft-scout/get-started)
実行環境
- Azure CLI(Windows)
- Azure Speech(eastus / SpeechServices)
- PowerPoint COM(Windows)
- 音声:
ja-JP-Nanami:DragonHDLatestNeural - 出力フォーマット:
riff-24khz-16bit-mono-pcm
実施スタイル(今回のポイント)
今回の実施フローは、すべて Microsoft Scout に自然言語で依頼しています。
また、実行に必要なコードは すべて Scout が開発(自動生成) したものです。
実施フロー
1. Azure CLI で Speech リソースキーを取得
Scoutへの指示例:
「eastus の Speech リソースキーを Azure CLI で取得して」
az cognitiveservices account keys list `
-g rg-speech-eastus-XXXXXXXXX `
-n speechhdXXXXXXXXXXXXXX `
--query key1 -o tsv
2. 「Copilot研修(学生編).pptx」のノートに書かれている文書を使用して Azure Speech で Text to Speech してファイルに保存
Scoutへの指示例:
「
Copilot研修(学生編).pptxのノートを使って、DragonHDLatestNeural で全スライドを音声化してslide-XX.wavで保存して」
各スライドのノートを抽出し、Azure Speech REST API に投げて slide-XX.wav を生成します。
$ttsUrl = "https://eastus.tts.speech.microsoft.com/cognitiveservices/v1"
$headers = @{
"Ocp-Apim-Subscription-Key" = $key
"Content-Type" = "application/ssml+xml"
"X-Microsoft-OutputFormat" = "riff-24khz-16bit-mono-pcm"
}
$ssml = "<speak version='1.0' xml:lang='ja-JP'><voice name='ja-JP-Nanami:DragonHDLatestNeural'>$escaped</voice></speak>"
Invoke-WebRequest -Uri $ttsUrl -Method Post -Headers $headers -Body $ssml -OutFile $tmp
3. 冒頭欠け対策(重要)
Scoutへの指示例:
「冒頭が欠けるので、各WAVに前後1秒の無音を物理的に追加して。スライド1は先頭3秒にして」
ここが今回のハイライトでした。
SSML だけで無音を指定しても、再生時に先頭が欠けるケースが発生。
対策として、生成後WAVに対して物理的に無音を付与しました。
- 通常スライド: 先頭1秒 + 末尾1秒
- スライド1のみ: 先頭3秒(導入安定化のため)
この方法で、冒頭欠けは安定して解消できました。
4. 差分再生成(修正スライドのみ)
Scoutへの指示例:
「ノートを修正したので、スライド15と16だけ再生成して上書きして」
ノート修正が入った場合、全再生成ではなく差分だけ更新できるようにしました。
実際には slide-15.wav と slide-16.wav を再生成して上書きしています。
5. 作成した音声ファイルを PowerPoint に埋め込んで、自動再生、自動ページ送りできるようにして
Scoutへの指示例:
「作成済みの
slide-XX.wavをPPTXに埋め込んで、自動再生と自動ページ送りを設定して」
slide-XX.wav を対応スライドへ埋め込み、以下を設定。
PlayOnEntry = trueAdvanceOnTime = trueAdvanceTime = 音声長 + 0.2秒AdvanceOnClick = true
結果として、57枚すべてで自動再生+自動ページ送りを実現しました。
6. プレゼンモード起動と動画保存
Scoutへの指示例:
「PPTXをプレゼンモードで起動して、動画として保存して」
最終確認として、作成PPTXをプレゼンモードで起動し、そのまま動画保存まで実施。
スライド資料だけでなく、動画コンテンツとしても活用できる状態にしました。
コスト試算(今回分)
読み上げ文字数(再生成分含む推定)は 15,268文字。
Cost(USD) = 15,268 / 1,000,000 × 単価(USD/100万文字)
例として単価 $30/100万文字 の場合、$0.458。
為替 1ドル=160円 なら 約73.3円 です。
57枚+差分再生成込みでも数十円レベルだったので、
このワークフローはコスト面でも実用的だと感じました。
まとめ
今回のポイントは次の3つです。
- 自然言語指示だけで、TTS~埋め込みまで自動化できた
- 冒頭欠けは SSML 任せでなく WAV 物理パディングが効いた
- 枚数が多くても差分再生成で十分運用できる
「音声付きスライドを短時間で作りたい」ケースには、かなり相性が良い構成でした。