AVIファイル保存
概要
AVIファイル保存する方法について説明します。
H.264/H.265のコーデックを使用する場合には【動画保存(MediaStreamSink コーデック:H.264)】をご覧ください。
サンプルプログラム
サンプル(Python) | capture_avi_file_python.zip |
---|
サンプルツールの出力
サンプルフォルダにtest.aviファイルが保存されます。
※使用しているPCにインストールされているコーデックに依存しますので上記の例の通り表示されないこともあります。
コード全体
import ctypes
import tisgrabber as tis
#tisgrabber_x64.dllをインポートする
ic = ctypes.cdll.LoadLibrary("./tisgrabber_x64.dll")
tis.declareFunctions(ic)
def enumCodecCallback(codecname, userdata):
"""
コーデックを列挙するためのコールバック関数です。
:param codecname:コーデックの名前
:param userdata:Pythonオブジェクト、コーデック名を受け取るためのリスト
:return:0は続行、1は列挙を停止します。
"""
userdata.append(codecname.decode("utf-8"))
return 0
enumCodecCallbackfunc = ic.ENUMCODECCB(enumCodecCallback)
#ICImagingControlクラスライブラリを初期化します。
#この関数は、このライブラリの他の関数が呼び出される前に1回だけ呼び出す必要があります。
ic.IC_InitLibrary(0)
codecs = []
#ダイアログ画面を表示
hGrabber = tis.openDevice(ic)
#コーデック一覧を表示
ic.IC_enumCodecs(enumCodecCallbackfunc, codecs)
print("利用可能なコーデック:")
for codec in codecs:
print(codec)
#デバイスが有効か確認
if(ic.IC_IsDevValid(hGrabber)):
#コーデックを選択
#コーデック一覧を表示で表示されたコーデックをセットします。
codec = ic.IC_Codec_Create(tis.T("MJPEG Compressor"))
#コーデックのプロパティページがある場合は表示します。
if ic.IC_Codec_hasDialog(codec):
ic.IC_Codec_showDialog(codec)
ic.IC_SetCodec(hGrabber, codec) # コーデックをセット
ic.IC_SetAVIFileName(hGrabber, tis.T("test.avi")) # ファイル名をセット
# Aviキャプチャの一時停止
ic.IC_enableAVICapturePause(hGrabber, 1) # Aviキャプチャの一時停止
#ライブスタート開始 引数:0の時非表示、引数:1の時表示
if ic.IC_StartLive(hGrabber, 1) == tis.IC_SUCCESS:
ic.IC_MsgBox(tis.T("OKでAVIファイル保存を開始します。"), tis.T("AVI Capture"))
# Aviキャプチャの再開
ic.IC_enableAVICapturePause(hGrabber, 0)
ic.IC_MsgBox(tis.T("OKでAVIファイル保存を停止します。"), tis.T("AVI Capture"))
ic.IC_StopLive(hGrabber)
else:
ic.IC_MsgBox(tis.T("ライブストリーミングに失敗しました。"), tis.T("AVI Capture"))
ic.IC_Codec_Release(codec)
else:
ic.IC_MsgBox(tis.T("No device opened"), tis.T("Simple Live Video"))
ic.IC_ReleaseGrabber(hGrabber)
解説
AVIファイルを保存する手順は下記の通りです。
- IC_Codec_Createで使用するコーデックを指定
- IC_Codec_hasDialogでコーデックのプロパティ圧縮率などを指定
- IC_SetCodecでコーデックをセット
- IC_SetAVIFileNameでファイル名をセット
- IC_enableAVICapturePause(hGrabber, 1)でavi保存の一時停止(準備)
- IC_StartLiveでライブスタート開始
- IC_enableAVICapturePause(hGrabber, 0)でavi保存開始
- IC_StopLiveでavi録画停止
- IC_Codec_Releaseでコーデックオブジェクトを解放
カメラから送られてくる映像を動画として保存するにはコーデックを指定しIC_enableAVICapturePauseメソッドを呼び出すだけでaviファイル保存をすることができるようになっています。録画の一時停止/再開もIC_enableAVICapturePauseを使うことで、簡単に一時停止/再開機能を実装することができます。