add_notes_pptx_lib.py

プログラムの動作

このプログラム add_notes_pptx_lib.py は、指定されたPowerPointプレゼンテーションファイル(.pptx)内の各スライドに、そのスライドに記述されたスピーカーノート(発表者ノート)の内容を字幕として追加することを目的としています。

主な機能:

  • 入力されたPowerPointファイルを読み込みます。

  • 各スライドにアクセスし、関連付けられたスピーカーノートのテキストを抽出します。

  • ノートテキストが存在する場合、そのテキストをスライドの下部に新しいテキストボックスとして追加します。

  • 追加される字幕のスタイル(フォント、サイズ、色、背景色、配置)を統一的に設定します。具体的には、メイリオ、20pt、白色テキスト、黒色背景、左揃えです。

  • 変更されたプレゼンテーションを新しいファイル名で保存します。

解決する課題:

発表者がプレゼンテーション中にスピーカーノートを画面に表示しない場合でも、視聴者がノートの内容を視覚的に参照できるようにすることで、情報共有を促進します。また、アクセシビリティの向上(例:聴覚障がいのある視聴者への情報提供)にも寄与します。

原理

このプログラムは、python-pptx ライブラリを使用してPowerPointファイルを操作します。

  1. 引数解析: 標準ライブラリの argparse を用いて、入力PowerPointファイル名と、オプションで出力PowerPointファイル名をコマンドライン引数から受け取ります。出力ファイル名が省略された場合、入力ファイル名に -note-added.pptx を付加した名前を自動的に生成します。

  2. プレゼンテーションの読み込み: pptx.Presentation(infile) を使用して、指定された入力PowerPointファイルを開き、Presentation オブジェクトとしてメモリにロードします。

  3. スライドの反復処理とノートの抽出: prs.slides プロパティを介して、プレゼンテーション内の各スライドを順に処理します。各 slide オブジェクトから slide.notes_slide.notes_text_frame.text.strip() を使って、関連するスピーカーノートのテキストコンテンツを取得します。.strip() メソッドで前後の空白文字を削除します。

  4. 字幕テキストボックスの追加: ノートテキストが空でない場合、以下のステップでスライドにテキストボックスを追加します。

    • スライドの幅 (slide_width) と高さ (slide_height) を取得します。これは、字幕の位置とサイズを決定するために必要です。

    • 字幕テキストボックスの位置とサイズを計算します。

      • left: スライドの左端 (Pt(0))。

      • top: スライドの下部から 60pt 上がった位置 (slide_height - Pt(60))。

      • width: スライドの幅全体 (slide_width)。

      • height: 60pt

    • slide.shapes.add_textbox(left, top, width, height) メソッドを呼び出し、計算された位置とサイズでスライドに新しいテキストボックスを追加します。

    • テキストボックスの背景色を黒色 (RGBColor(0, 0, 0)) に設定し、textbox.fill.solid() で塗りつぶしを有効にします。

    • テキストボックスの text_frame に抽出したノートテキストを設定し、text_frame.word_wrap = True でワードラップを有効にします。

    • テキストフレームの左右に 10pt のマージンを設定し、テキストの配置を左揃え (PP_ALIGN.LEFT) にします。

    • テキストのフォントを「メイリオ」、フォントサイズを 20pt、フォント色を白色 (RGBColor(255, 255, 255)) に設定します。

  5. プレゼンテーションの保存: 全ての処理が完了した後、prs.save(outfile) を使用して、変更が加えられたプレゼンテーションを新しいファイル名で保存します。

必要な非標準ライブラリとインストール方法

このプログラムは、PowerPointファイルを操作するために python-pptx ライブラリを使用します。

インストール方法:

pip コマンドを使用してインストールできます。

pip install python-pptx

必要な入力ファイル

  • ファイル名: infile (コマンドライン引数で指定)

  • 形式: Microsoft PowerPointプレゼンテーションファイル(.pptx 拡張子)

  • データ構造: 各スライドには、字幕として表示したい内容がスピーカーノートとして記述されていることを想定しています。ノートが空のスライドには、字幕は追加されません。

生成される出力ファイル

  • ファイル名: outfile (コマンドライン引数で指定、または自動生成)

  • 形式: Microsoft PowerPointプレゼンテーションファイル(.pptx 拡張子)

  • 内容: 入力ファイルとほぼ同じ内容ですが、各スライドの下部に元のスピーカーノートのテキストが以下のスタイルで字幕として追加されています。

    • 背景色: 黒

    • フォント色: 白

    • フォント名: メイリオ

    • フォントサイズ: 20pt

    • 配置: 左揃え

    • 位置: スライド下部、高さ60ptの領域に収まるように配置

  • 自動生成されるファイル名のルール: 出力ファイル名がコマンドラインで指定されなかった場合、入力ファイル名(例: original.pptx)に -note-added.pptx を付加した名前(例: original-note-added.pptx)が自動的に使用されます。

コマンドラインでの使用例 (Usage)

基本的なコマンドラインの書式は以下の通りです。

python add_notes_pptx_lib.py <infile> [-o <outfile>]
  • <infile>: 入力となるPowerPointプレゼンテーションファイル(.pptx)のパスを指定します。この引数は必須です。

  • -o <outfile>, --outfile <outfile>: 出力するPowerPointプレゼンテーションファイル(.pptx)のパスを指定します。この引数は省略可能です。省略した場合、入力ファイル名に基づいて自動的にファイル名が生成されます。

コマンドラインでの具体的な使用例

例1: 出力ファイル名を指定しない場合

入力ファイル presentation.pptx を処理し、自動生成されるファイル名で保存します。

仮定される入力ファイル presentation.pptx の状態:

  • スライド1に「このスライドは導入部分です。」というノートがある。

  • スライド2に「重要なポイントを3つ説明します。」というノートがある。

  • スライド3にノートがない。

コマンド:

python add_notes_pptx_lib.py presentation.pptx

実行結果:

presentation-note-added.pptx という名前の新しいPowerPointファイルが生成されます。 このファイルのスライド1とスライド2の下部には、それぞれ対応するノートテキストが字幕として表示されます。スライド3には字幕は追加されません。

コンソール出力例:

保存しました: presentation-note-added.pptx

例2: 出力ファイル名を指定する場合

入力ファイル report.pptx を処理し、report_with_subtitles.pptx という名前で保存します。

仮定される入力ファイル report.pptx の状態:

  • スライド1に「月次報告の概要。」というノートがある。

  • スライド2に「売上実績は好調でした。」というノートがある。

コマンド:

python add_notes_pptx_lib.py report.pptx -o report_with_subtitles.pptx

実行結果:

report_with_subtitles.pptx という名前の新しいPowerPointファイルが生成されます。 このファイルの各スライドの下部には、元のノートテキストが字幕として表示されます。

コンソール出力例:

保存しました: report_with_subtitles.pptx