Skip to main content

triggercam

Tests

Thread-safe webcam capture for Python with on-demand start/stop recording, built on OpenCV.

OpenCVベースの、スレッドセーフなWebカメラキャプチャライブラリです。プレビューを表示し続けたまま、録画の開始・停止を好きなタイミングでトリガーできます。

import time
from triggercam import Camera

with Camera() as cam:
    time.sleep(10)
    cam.start_recording("clip")   # clip.mp4 に書き込み開始
    time.sleep(10)
    cam.stop_recording()          # clip_20260101-120000.mp4 にリネーム

なぜtriggercamなのか

よくある録画系のサンプルは「プログラム起動と同時に録画開始、qキーで終了」という一発勝負の構成がほとんどです。

カメラのプレビューは動かし続けたまま、録画のON/OFFだけを自分のコードから好きなタイミング(センサーのトリガー、スケジュール、ボタン操作、検知イベントなど)で切り替えたい、というケース向けの例はあまり見かけませんでした。

triggercam(本プログラム)では、それができます。

現状、単純な録画ON/OFFのみの機能となっています。 複数カメラ対応・動体検知・NVR的なUIが欲しい場合は、他の本格的なアプリケーションについても検討してください。

インストール

pip install triggercam

PyPIで公開しています。

API

  • Camera(index=0, width=1280, height=720, fps=30, show_preview=True) — カメラを開き、即座にバックグラウンドのキャプチャスレッドを開始します。
  • cam.start_recording(filename) — <filename>.mp4への書き込みを開始します。Writerが開けなかった場合(非対応コーデックなど)はRuntimeErrorを送出します。すでに録画中の場合は何もしません。
  • cam.stop_recording() — 録画を停止し、ファイル名を<filename>_<タイムスタンプ>.mp4にリネームします。最終的なパスを返します(録画していなかった場合はNone)。
  • cam.running — キャプチャスレッドが停止するとFalseになります(カメラが切断された場合、プレビューウィンドウでqが押された場合など)。
  • cam.close() — スレッドを停止し、カメラ・Writerのリソースを解放します。プログラムが中断されても録画ファイルが壊れた状態で残らないよう、必ず呼び出してください(with Camera() as cam:を使えば自動的に呼ばれます)。

一通りの流れと、Ctrl+Cでの安全な終了方法はexamples/basic_recording.pyを参照してください。

動作検証

検証環境(2026-08-21)

項目 内容
OS Windows 11 Pro
Python 3.10.6(プロジェクト専用のvenv)
インストール方法 pip install -e .
依存パッケージ opencv-python 5.0.0.93
カメラ Logi C270 HD WebCam(USB UVCカメラ)

確認できたこと

  • カメラが正しく認識され、プレビューウィンドウに実際の映像が表示されることを確認(起動してからプレビューウィンドウが表示されるまで少し時間がかかる)。
  • start_recording() → stop_recording() の一連の流れが正常に動作し、clip.mp4 が clip_<タイムスタンプ>.mp4 に正しくリネームされることを確認。
  • 録画サイクル(10秒待機→録画→待機→停止)が問題なく動作することを確認。
  • 録画中にCtrl+Cで強制中断した際、そのファイルが正しくstop_recording()まで処理された状態で残ることを確認(未リネームの壊れたファイルが残らない)。
  • 生成された動画ファイルはメディアプレイヤーで正常に再生可能なことを確認。

未検証

  • Linux / macOSでの動作(カメラインデックスでのキャプチャのため動作するはずだが、実機未確認)

ライセンス

MIT — LICENSEを参照してください。

背景

このライブラリは、Qiitaに投稿した元のプログラム ( https://qiita.com/tuo170/items/ca1933a88f3255792214 ) を土台に、バグ修正・API設計・パッケージ化を行って作られています。

実装のコーディングやレビュー、設計の壁打ち相手としてClaude Codeを使用しました。

Metadata

Release files for triggercam 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for triggercam 0.1.1
File Size Uploaded
triggercam-0.1.1.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for triggercam 0.1.1
File Interpreter ABI Platform
triggercam-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 14.3 kB

Release files / triggercam-0.1.1.tar.gz

Download URL triggercam-0.1.1.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
034d59b7f62fcdbd4fc14aac9d0aadddea41cd0b5fd23887ac33cff2ba147cd7
BLAKE2b-256 checksum
How to use checksums
a5e454d1633c411264ddd757cc8322dcd6a438d9aaf504352c625711ec2f7ca3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6

Release files / triggercam-0.1.1-py3-none-any.whl

Download URL triggercam-0.1.1-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2c314ea40cbffaf5de7efcbb75126fe1db6b86492ab1d4c632476322677e6d1
BLAKE2b-256 checksum
How to use checksums
23ff8da1a8d2ba7bbf6336ee3ef160009a7278fc59d1979687300cd0410e6c09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page