Mam's WebSite
Delphiでお手軽プログラミング

トップページ⇒DelphiでUSBカメラから動画を撮影するアプリを作成する(DSpackを使用)

DelphiでUSBカメラから動画を撮影するアプリを作成する(DSpackを使用)


DelphiにDSPackをインストールしていることが前提です。

DSPackのインストールはhttp://mam-mam.net/delphi/dspack_install.htmlを参照してください。

新規アプリケーションの準備

Delphiを起動し
「ファイル」→「新規作成「→「VCLフォームアプリケーション - Delphi」を選択します。
以下のようにフォームに配置します。

TVideoWindow(名前はデフォルトのままのVideoWindow1)をドラッグ&ドロップでフォーム上に配置しします。
TFilterGraph(名前はデフォルトのままのFilterGraph1)、TFilter(名前はデフォルトのままのFilter1)、TASFWriter(名前はデフォルトのままASFWriter1)をドラッグ&ドロップします。
TSaveDialog(名前はデフォルトのままのSaviDialog1、DefaultExtプロパティをwmvに、Filterプロパティを wmv|*.wmv にします)、TButton(名前はデフォルトのままのButton1、Captionを「撮影」にするとよいでしょう)、もう1つTButton(名前はデフォルトのButton2、EnabledプロパティをFalseに、Captionを「停止」にするとよいでしょう。)をドラッグ&ドロップで配置します。

ソースコードの記述1

F12キー、または下部にあるタブ「コード」を選択してデザインモードからコードモードに切り替えます。
ソースコードの上部5行目あたりにあるuses部分を以下のようにします。
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, DSPack
  , DXSUtil, DirectShow9;

ソースコードの記述2

F12キー、または下部にあるタブ「デザイン」を選択し、Button1(撮影)をダブルクリックして以下のソースを入力します。
procedure TForm1.Button1Click(Sender: TObject);
var ICapB:ICaptureGraphBuilder2;
    VideoDevices:TSysDevEnum;
begin
  VideoDevices:=TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  if VideoDevices.CountFilters=0 then
  begin
    showmessage('有効なUSBカメラがありません');
    VideoDevices.Free;
    exit;
  end;
  if not SaveDialog1.Execute then exit;

  Filter1.FilterGraph:=FilterGraph1;
  Filter1.BaseFilter.Moniker:=VideoDevices.GetMoniker(2);
  VideoWindow1.FilterGraph:=FilterGraph1;
  ASFWriter1.FilterGraph:=FilterGraph1;
  ASFWriter1.FileName:=SaveDialog1.FileName;
  ASFWriter1.Profile:=wmp_V80_288VideoOnly;

  FilterGraph1.Mode:=gmCapture;
  FilterGraph1.Active:=True;

  ICapB:=FilterGraph1 as ICaptureGraphBuilder2;
  ICapB.RenderStream(@PIN_CATEGORY_PREVIEW,nil,Filter1 as IBaseFilter,
    nil,VideoWindow1 as IBaseFilter);
  ICapB.RenderStream(@PIN_CATEGORY_CAPTURE,nil,Filter1 as IBaseFilter,
    nil,ASFWriter1 as IBaseFilter);

  FilterGraph1.Play;
  Button1.Enabled:=False;
  Button2.Enabled:=True;
  VideoDevices.Free;
end;

ソースコードの記述3

F12キー、または下部にあるタブ「デザイン」を選択し、Button2(停止)をダブルクリックして以下のソースを入力します。
procedure TForm1.Button2Click(Sender: TObject);
begin
  if FilterGraph1.Active then
  begin
    FilterGraph1.Stop;
    FilterGraph1.Active:=False;
    FilterGraph1.ClearGraph;
    showmessage('停止しました。');
    Button1.Enabled:=True;
    Button2.Enabled:=False;
  end;
end;

USBカメラを接続して実行する

念のため「すべて保存」なり、SHIFT+Ctrl+Sを押すなりして保存しましょう。(しなくても動きますが)
そろそろ実行しますので、USBカメラをパソコンに取り付けましょう。
取り付けたら、実行ボタンを押して実行します。
「撮影」ボタンを押すと、保存ファイル名を聞いてきますので、デスクトップ等に適当なファイル名を入れて「保存」ボタンを押します。

「停止」ボタンを押すと停止します。動画ファイルがWMV形式で保存されます。

こんなに短いソースコードで動画撮影できるアプリケーションを作成できるのは凄いですね。

Mam's WebSite