カメラ制御をコマンドラインプログラムから行う

Cameralibを使えます

Cameralibは、

から。起動後にちゃちゃっと仕事をこなして終了するようなコマンドラインプログラムが必要な場面がありますが、上記のCameralibはそういう場合にも使えます。C++ Builder CEのVCLやらFMXなGUIプログラムに使用が限定されるわけではありません。とりあえず、

起動したらコマンドラインで与えられた秒数だけ動画を記録し、その動画をダウンロードする

というようなものを作ってみましょう。CameralibはCanonのEOS(Powershot含む)とNikonのDなにがしの両対応ですし、簡便に使えますので、是非使ってください。さて、main.cppは、

#include <iostream>
#include <tchar.h>
#include <windows.h>

#include "cameralib.h"

Camera* camera;
int Live=0;
bool movie=true;
extern int filecount;


EdsError EDSCALLBACK ProgressFunc(EdsUInt32 inPercent, EdsVoid* inContext, EdsBool* outCancel)
{
	return EDS_ERR_OK;
}

void UpdateProgressBar(unsigned long value)
{

}




int _tmain(int argc, _TCHAR* argv[])
{
    int duration = 5;

    if( argc == 2 )
        duration = atoi(argv[1]);

    filecount = 1;

    camera = new Camera();

    camera->RecordMovie();

    Sleep(duration*1000);

    camera->StopMovie();

    delete camera;

}

コマンドラインから録画の長さ(秒数)を拾って、その間だけRecordMovie()するだけです。ごちゃごちゃした準備やら後始末は要りません。すべてCameraクラスのコンストラクタとデストラクタが担当してくれます。唯一紛らわしいのは、

EdsError EDSCALLBACK ProgressFunc(EdsUInt32 inPercent, EdsVoid* inContext, EdsBool* outCancel)
{
	return EDS_ERR_OK;
}

void UpdateProgressBar(unsigned long value)
{

}

という部分ですが、イメージ転送のプログレスバーを出さないので、両方空です。が、EDS_ERR_OKは返す必要があります。プロジェクトの構成を示しておきましょう。

Cameralibを

“Cameralib 64” をダウンロード cameralib-1.zip 55.42 KB

からダウンロードして、解凍した下記を上に組み込んであります。

header内部の全てのファイルをプロジェクトに既存ファイルとして足して、ライブラリファイルx2を足して作ります。これで完成です。64bit版限定なので、下記のような状態で“F9”ですね。

実行例は、

$ ./project1
Getting camera list...
temppath is C:\Users\jakeb\OneDrive\Documents\Embarcadero\Studio\Projects\take-movie-using-cameralib\Win64\Release
The value of Capability(CapID=0x8113) was changed.
The value of Capability(CapID=0x8120) was changed.
The value of Capability(CapID=0x8112) was changed.
The value of Capability(CapID=0x8111) was changed.
The value of Capability(CapID=0x818D) was changed.
The value of Capability(CapID=0x8334) was changed.
The value of Capability(CapID=0x8336) was changed.
The value of Capability(CapID=0x8339) was changed.
The value of Capability(CapID=0x8485) was changed.
The value of Capability(CapID=0x8295) was changed.
The value of Capability(CapID=0x35) was changed.
The value of Capability(CapID=0x81D0) was changed.
The value of Capability(CapID=0x8272) was changed.
The value of Capability(CapID=0x8299) was changed.
The value of Capability(CapID=0x8175) was changed.
The value of Capability(CapID=0x847F) was changed.
The value of Capability(CapID=0x8120) was changed.
The value of Capability(CapID=0x8111) was changed.
The value of Capability(CapID=0x818D) was changed.
The value of Capability(CapID=0x8299) was changed.
The value of Capability(CapID=0x8336) was changed.
The value of Capability(CapID=0x8339) was changed.
The value of Capability(CapID=0x8295) was changed.
The value of Capability(CapID=0x35) was changed.
a Video object(ID=0x611A010E) added in card.
1. Internal ID = 611A010E
0. Exit
Select (1, 0)
>Item object is opened.

これはNikon D7500の場合で、VCLでは黙殺されいたコンソール出力が”漏れて”ますね。結果は、

となり、録画ファイルが生成されています。ちなみにNikonのカメラでは、カメラ側にも録画ファイルが生成されていますが、それをこちらから消すことはできません。(仕様)

写ってまずいものは無いはずだけど……。以上です。コマンドラインからのプログラムは後々使う予定です。

コメント