Pythonによるスクリーンキャプチャとオーディオ録音アプリケーション

プログラム概要

このプログラムは、フルスクリーンまたはカスタムエリアでのスクリーンキャプチャをサポートし、システムオーディオの同時録音が可能です。リアルタイムプレビュー機能やパフォーマンスモニタリングも提供します。長時間の録画に伴うメモリ使用量の問題を解決するため、ストリーミング方式で直接ファイルに書き込みます。

主な機能

  • 画面キャプチャ: 全画面および特定エリアの選択可能、フレームレート調整(1-60fps)、多様なビデオコーデック(mp4v、XVIDなど)
  • オーディオ録音: システムオーディオの録音、複数のオーディオデバイス対応、オーディオデバイステスト機能
  • 録画制御: 開始/一時停止/終了、リアルタイム状態表示、パフォーマンスモニタリング(実際のFPS、エラーカウント)
  • ファイル管理: 保存パスの指定、自動ファイル命名、ディスクスペースチェック
  • 高度な特性: 長時間録画最適化(自動セグメント)、エラーリカバリ機構、音声画像同期

技術詳細


def combine_audio_video(self):
    vid_duration = self.calc_video_time(video_path)
    aud_duration = self.calc_audio_time(audio_path)
    
    if abs(vid_duration - aud_duration) > 0.5:
        ratio = aud_duration / vid_duration
        cmd = [
            'ffmpeg', '-i', video_path, '-i', audio_path,
            '-filter:v', f'setpts={ratio:.6f}*PTS',
            '-c:v', 'libx264', '-c:a', 'aac', output_file
        ]
        subprocess.run(cmd)

オーディオデバイス検出


def detect_audio_devices(self):
    devices = sd.query_devices()
    for idx, dev in enumerate(devices):
        if 'virtual' in dev['name'].lower():
            self.audio_dev_idx = idx
            break

フレームレート制御


def record_screen_frame(self):
    target_fps = int(self.frame_rate_var.get())
    interval = 1.0 / target_fps
    
    while self.is_recording:
        start_time = time.time()
        
        frame = self.capture_current_frame()
        self.video_writer.write(frame)
        
        elapsed_time = time.time() - start_time
        sleep_duration = max(0, interval - elapsed_time)
        if sleep_duration > 0:
            time.sleep(sleep_duration)

依存ライブラリとインストール方法

以下のライブラリが必要です:

pip install opencv-python
pip install Pillow
pip install numpy
pip install sounddevice
pip install soundfile

FFmpegのインストール

FFmpegは、音声と映像の統合処理に必須です。以下のようにインストールしてください:

  1. 公式サイトからWindowsバージョンをダウンロード
  2. 解凍後、binフォルダのパスを環境変数PATHに追加
  3. コマンドプロンプトで`ffmpeg -version`を実行して確認

タグ: Python OpenCV tkinter FFmpeg sounddevice

6月30日 21:22 投稿