Webカメラから動画を撮影するアプリを作成 ~Delphiソースコード集
DelphiにDSPackをインストールしていることが前提
DSPackのインストールはhttps://mam-mam.net/delphi/dspack_install.html を参照してください。新規アプリケーションの準備
Delphiを起動し「ファイル」→「新規作成「→「VCLフォームアプリケーション - Delphi」を選択します。
以下のようにフォームに配置します。
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(0); 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カメラをパソコンに取り付けましょう。
取り付けたら、実行ボタンを押して実行します。
「撮影」ボタンを押すと、保存ファイル名を聞いてきますので、デスクトップ等に適当なファイル名を入れて「保存」ボタンを押します。
短いソースコードで動画撮影アプリケーションが完成しました。