概要

video2pptx.py は、動画ファイルから定期的、または操作後の安定画面のスクリーンショットを作成し、自動的にPowerPointの各スライドに貼り付けて資料を生成するユーティリティプログラムです。

動作環境・依存ライブラリ

本プログラムを実行するには、以下の外部コマンドおよび非標準ライブラリがシステムにインストールされている必要があります。

  • 外部コマンド

    • ffmpeg

    • ffprobe

  • 非標準ライブラリ(Python)

    • Pillow (インポート名: PIL)

    • python-pptx (インポート名: pptx)

入出力仕様

  • 入力

    • 任意の動画ファイル(ffmpeg が対応している形式、MP4 など)

  • 出力

    • 抽出画像とタイムスタンプが配置されたPowerPointファイル(.pptx)

    • (オプション指定時)抽出された画像ファイル(.jpg)群を含むディレクトリ

CLIオプション仕様

実行時に指定可能なコマンドライン引数は以下の通りです。

  • input : 入力動画ファイルのパス

  • -o, --output : 出力する .pptx ファイルのパス(省略時は 入力ファイル名_SS.pptx)

  • --mode : 抽出方法の指定(interval, motion, both から選択、既定は interval)

  • --interval : 定期抽出モード時の間隔(単位: \(s\)、既定: \(10.0\))

  • --start : 抽出開始時刻(単位: \(s\)、既定: \(0.0\))

  • --end : 抽出終了時刻(単位: \(s\)、省略時は動画末尾まで)

  • --per-slide : 1スライドに配置する画像数(1, 2, 4 から選択、既定: 1)

  • --image-width : 抽出画像の最大幅(単位: \(px\)、既定: 1600)

  • --keep-images : 指定すると、抽出したJPEG画像を 出力ファイル名_frames ディレクトリに保存する

  • --pause : プログラム終了前にポーズ処理(Enterキー入力待ち)を行う

動き判定(motion モード)に関するオプション:

  • --sample-fps : 動き判定用のサンプリングフレームレート(単位: \(fps\)、既定: \(2.0\))

  • --motion-threshold : 操作開始とみなす平均画素差分(単位: %、既定: \(0.45\))

  • --stable-threshold : 静止とみなす平均画素差分(単位: %、既定: \(0.12\))

  • --settle-seconds : 操作終了から安定画面と判定するまでの待機時間(単位: \(s\)、既定: \(0.8\))

  • --min-interval : 動き判定抽出時の最小時間間隔(単位: \(s\)、既定: \(3.0\))

  • --include-first / --no-include-first : 開始画面を動き抽出の結果に含めるか(既定: --include-first)

動作原理

本プログラムは、動画ファイルの長さを ffprobe を用いて取得後、指定されたモードに従って抽出時刻のリストを作成します。

  • interval モード 指定された間隔(--interval)ごとに定期的な抽出時刻のリストを生成します。

  • motion モード ffmpeg を使用して動画から低解像度フレームを指定レート(--sample-fps)で抽出し、隣接するフレーム間でグレースケールの平均絶対差分を計算します。 差分が --motion-threshold を上回ると「動き(操作)あり」と判定します。その後、差分が --stable-threshold を下回る状態が一定時間(--settle-seconds)継続した場合に「安定画面」とみなし、その時刻を抽出リストに加えます。

  • both モード 上記の両方の時刻リストを生成し、重複を排除して統合します。

抽出時刻が決定した後、ffmpeg を利用して該当時刻の高解像度フレーム(.jpg)を抽出します。最後に python-pptx を用いて、指定されたレイアウト(1スライドあたり複数枚の配置など)に従い、抽出した画像とタイムスタンプを含むプレゼンテーションファイルを作成します。

実行例

interval モードで1スライドに2枚の画像を配置する実行例です。

python video2pptx.py sample_video.mp4 --mode interval --interval 15.0 --per-slide 2

motion モードで動きを検知し、抽出した画像をディレクトリにも保存する実行例です。出力ファイル名も指定しています。

python video2pptx.py input_operation.mp4 -o result_slides.pptx --mode motion --keep-images