PPTファイルに音声を自動で埋め込む その4 GUIを持つアプリ

授業

pptファイルのスライド切替えとアニメーションにオーディオデータを埋め込むアプリ(といっていいものか・・・)を作りました。初めに作ったAHKでPowerpointのGUIを操作してオーディオデータを設定するソフトは,動作に時間がかかり過ぎました。

そこで,直接pptxファイルにオーディオデータを埋め込む方法に変更しました。試行錯誤の末,何とか講義資料の作成に使えそうなコードができてきました。初めに動作確認のため使っていたものは,動かす度に3回もダイアログボックスを開いてファイルやフォルダを設定するものでした。使いにくいし時間もかかるので,勉強を兼ねてGUIで操作するものを作ることにしました。

アプリの概要

下が作りかけのアプリの操作画面です。必要な最低限の設定しかできないものです。

作成したアプリの操作画面

作成の目的

何回か説明しているので,くどいと怒られそうですが,おさらいします。このアプリの目的は講義用のPowerpointプレゼンテーションのスライド切替えとアニメーションに音声ナレーションを自動で挿入することです。1学期15週の講義のために毎週二,三十枚のスライドがあり,各スライドに数個~30個程度のクリック起動のアニメを使います。他に補足説明や演習用のスライドも必要です。とてもたくさんのオーディオ付加の作業が必要になります。

音声データを挿入するため,スライド切替えやクリックの操作と,操作毎に埋め込むナレーションを「台本」(スクリプトと呼んでいます。)として記述したテキストデータを作ります。このテキストデータから,音声合成ソフトのGUIを操作してオーディオデータのファイルを自動生成するAHKコードを作成しました。(スクリプトを作るのは,音声合成の自動実行のためでもありますが,もう1つは,講義の記録・アーカイブのためです。)

次にとりかかったのが,オーディオデータの生成に使ったのと同じスクリプトファイルを使って,pptxファイルにGUIを介せずオーディオデータを埋め込むPython コードの作成です。ある程度行けそうだ,という感触を得たので,GUIの操作コードを追加しました。

ここまで説明しましたように,元々は個人的な限定された目的のために作ったものです。でも,PPTファイルに音声を自動で埋め込む その2 Pythonによる実装の準備 やPPTファイルに音声を自動で埋め込む その3 Pythonによる実装 で紹介したPythonコードを組み合わせることで,様々な用途に合わせたアプリを作ることができるはずです。

現時点での機能

作りかけで,今後,変更していくことになりますが,以下のようにして使います。

GUIの操作

ⅰ)ファイルやフォルダを指定する
 対象となるファイルや,それらが格納されているフォルダ(ディレクトリ)を指定する。ファイルやフォルダはGUI画面上に①~③で示したテキストウインドウに表示される。
 ①対象となるpptxファイル
 ②音声ファイルを格納したフォルダのパス
 ③プレゼンのスクリプトファイル
  これらのファイルやフォルダは,
 ④ファイル/フォルダのセットボタン
  をクリックすることで,個別に設定できる。クリック1回で設定できるように,
 ⑤自動設定のON/OFF を設定するためのチェックボックスがある。
  ここにチェックマークを付けておくと,pptxファイルを指定するだけで,
  事前に決めたルールに従ったファイルやフォルダが自動で設定される。

ⅱ)スクリプトファイルの内容を確認
 スクリプトファイルが指定されると,その内容がテキストウインドウに表示されれる,
 (⑥スクリプトを表示)今のところ,表示するだけ・・・。編集や保存もできるようにしたい。

ⅲ)オーディオ付加の実行
 ⑦スタートボタン をクリックすることで,オーディオを埋め込む作業が開始する。元のpptxファイルの拡張子の前に”_A”が追加されたpptxファイルが同じフォルダ内に作られる。

自動設定用のファイルの配置とルール

pptxファイル,音声データのフォルダ,スクリプトファイルは,以下のようなルールで作っておくと,pptxファイルを1回セットするだけで,自動で設定される。

ファイルとフォルダの配置(朱書きしてあるのは生成されるフォルダとファイル)

  • 3つのファイルとフォルダはディレクトリの同一階層に配置する
    pptxファイル,音声データのフォルダ,スクリプトファイルは同一のフォルダの同一階層に配置する。
  • ファイルとフォルダの名前(pptxファイルの名前を仮にfilenameとする)
    pptxファイルの名前: filename.pptx,
    音声データのフォルダの名前: filename,
    スクリプトファイルの名前: filename.txt

生成されるファイルとフォルダ

音声データを埋め込んだpptxファイルと,元のpptxファイルを展開したフォルダが生成されます。

 生成されるpptxファイルの名前: filename_A.pptx
 展開されるフォルダ:      filename_zip
  このフォルダは削除しても問題ないが,検討のため現在の設定では残すようにしてある。

今後の予定

 実際の講義で使ったpptxファイルに対して使って,不具合や使いにくいところを修正していく予定です。最低限の機能が備わった後はあまり凝らないようにしますが,以下のような機能の追加を考えています。

  • 自動アニメーションへのオーディオデータの付加
    初めに考えた仕様には含まれているが,Pythonコードでは未実装になっている。必要性はそれほど感していないが検討はする。
  • スクリプト作成補助の機能
    pptxファイルのスライドデータからクリック起動や自動のアニメーションの情報を読み取り,スクリプトの基になるテキストを作る。(講義用pptファイルの処理を省力化するためには,この機能の実装を急いだ方がよいかもしれない。
  • pptのノート機能の利用
    スクリプトをテキストファイルではなく,pptのノートにも記述できるようにする。これができるとスライドの順番の変更が容易になる。
  • Pythonによる音声合成ソフトの制御
    AHKで実行している機能をPythonのPyAutoGUIに移行する。AHKで出来ているので,無理にPythonに移行しなくてもよいのだが,PyAutoGUIを試してみたい気持ちはある。

技術情報の調査

Pythonによる一連のコード作成の過程の中で,webを使って技術情報の検索を何度も繰り返しています。Pythonの使い方や文法に関する検索がメインで,たくさんのサイトのお世話になりました。

肝心のpptxファイルの内部構造についての調査は,不十分なままスタートし不十分なままでここまで来てしまいました。システム開発に関して「自分が働いている階層の少なくとも2階層上と2階層下までの知識が必要」なんて学生に言っていたのに,こんなことではダメですね。

pptxに関する技術情報は,初めにちょこっと調べて見つけた「pptxファイルはzip圧縮されている」という短い投稿しか参考にしていません。研究や技術開発では,こういうシンプルな情報が重要になることが多いようです。

<詳しく>

良く言われていることだと思いますが,研究や技術開発では「〇〇ができた」とか「××というやり方で〇〇ができた」という情報がとても重要になるみたいです。実際,複数の組織が競って研究・開発を進めているけれど未だ実現されていない目標があるとき,「できた」というニュースをきっかけに,どんどん成功例が報告されていく,ということがあります。何かの実現を目標にして,つきつめて考えている人がいるときは,具体的な方法に関する情報が無くても「それができる」ということを知るだけで,前に進めるのかもしれません。

<閉じる>

省力化のツールの自作として目途がついたと言える段階になったので,今一度調べてみました。すると,展開されたpptxファイルの中身を操作して数式を挿入するなど,いろいろ検討している方がいらっしゃることを知りました。やっぱり,ちゃんと調べないとダメだと思いました。

追記  処理時間について

実際に講義に使ったPPTファイルで動作確認すると,80個のオーディオファイルを埋め込むのに要した時間は2.6秒でした。Pythonのtime.time()関数を使って,オーディオデータを埋め込む関数の動作開始から終了までの時間を計測した値です。

一方,AHKを使いPPTアプリをGUIを介して操作する方法では,20分ほどかかっています。圧倒的な差です。(正確な時間を知るためには測り直す必要があるのですが,それをする気にもならないくらい時間がかかります。)

というわけで,今後はPythonを使った処理をメインにしていきます。コードの解説をするのは少しお待ちください。もともとお見せできるような出来のコードではないのですが,作っていく中で変更を繰り返していて,なかなか確定しません。

でも,自分の作ったものについて,ある程度の再現性を保って記録しておくためには,コードを残しておくことは必要です。ある程度安定してから解説記事を投稿していきます。

コメント