Python入門トップページ


目次

  1. 仮想環境を構築し,watchdog をインストールする
  2. Watchdog でフォルダを監視する
  3. 新しいファイルを検知する
  4. 検知した新しいファイルを待ち行列フォルダに移動する
  5. 文字起こし処理用のワーカープログラムのひな形を作成する
  6. ワーカープログラムを常駐化する
  7. フォルダ監視とワーカープログラムでパイプライン処理する
  8. 処理用フォルダを設置してそこで処理を行う
  9. ファイルサイズの変化を監視する
  10. サイズの大きなファイルのコピーに対応する
  11. タイムスタンプを表示する
  12. Subprocess で外部コマンドを起動する
  13. WhisperX の設定を行う
  14. ワーカープログラムで音声データからの文字起こしを実行する
  15. 文字起こし結果を完了用フォルダに移動する
  16. ログを保存し例外を処理する
  17. サブフォルダに結果を格納する
  18. Ollama をインストールする
  19. Python から Ollama にプロンプトを送る
  20. Ollama 処理を関数化する
  21. 文字起こしデータから議事録を作成する
  22. サイズの大きなテキストファイルにも対応する
  23. ワーカープログラムで文字起こし結果から議事録を生成する
  24. 議事録をマークダウンファイルに出力する
  25. 文字コードを強制的に指定する

フォルダ監視により,音声ファイルから文字起こしと議事録生成を自動化しよう

ファイルサイズの変化を監視する

これまで監視用の watch フォルダに設置されたファイルは直ちに待ち行列用の queue フォルダに移動していました.これまでサイズの小さなマークダウンファイルで実験してきましたが,将来的には音声データなどサイズの大きなファイルを取り扱うことを考えます.ここで監視用フォルダに音声ファイルをダウンロードして保存しようとしたとき,音声ファイルの全てのダウンロードが完了する前に待ち行列用フォルダに移動する処理が動いてしまう可能性があります.ここではこうした問題に対応する方法を考えます.基本的な考え方はダウンロード中にファイルサイズの変化を監視し,その変化がなくなればコピーが完了したものと判断するものです.

では,テスト用のプログラム (movetest.py) で試してみます.具体的には次のとおり,sample/voice-sample01.m4a というファイルを準備し,そのファイルサイズを取得します.5秒後に再度ファイルサイズを取得したときにサイズが変わっていなければコピーが終了したと判断してプログラムを終了します.もしもファイルのダウンロードに時間がかかっているようであれば,while True のループがファイルサイズが変わらなくなるまで繰り返されることになります.

movetest.py
from pathlib import Path
import time

BASE_DIR = Path(__file__).parent
file = BASE_DIR / "sample" / "voice-sample01.m4a"

while True:
    size1 = file.stat().st_size
    time.sleep(5)
    size2 = file.stat().st_size
    print(size1, size2)
    if size1 == size2:
        print("コピー完了")
        break

このプログラムを実行すると次の結果になりました.

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> python movetest.py ⏎
329637 329637
コピー完了
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>

次のページではこの機能をフォルダ監視プログラム (watch.py) に導入します.

目次に戻る