動画をAVIファイルとして保存する

ビデオストリームをAVIファイルとして保存する方法を説明します。
別のフォーマットで動画を保存する方法については、 動画をキャプチャして保存するプログラマーズガイド>動画をAVIファイルとして保存するの例を参照ください。
今回のサンプルプログラムのVB.NET 、C#用のソースコードはMy Documents/IC Imaging Control 3.4内の以下ののディレクトリに格納されています。
samples\VB *\Capturing an AVI File
samples\C# *\Capturing an AVI File

プロジェクトの新規作成

新しいプロジェクトを作成し、IC imaging Controlをフォームに追加してください。プログラムを実行する前に、 はじめに: Visual Studio .NETプログラマーズガイド>Visual Studioでスタート にあるように映像デバイスの選択、入力方式、ビデオフォーマットを選択してください。もしくはデバイスを選択せずにプログラムを実行してください。その際はIC Imaging Controlによってデバイス選択のダイアログが出現します。選択をせずにダイアログを閉じた場合、プログラムはエラーメッセージを表示し、終了します。

フォームに3つのボタンを追加し、 CaptionプロパティをそれぞれStart LiveStop LiveCapture AVIとします。 またcmdStartLivecmdStopLivecmdCaptureVideoと名前を付けます。

まずはIC Imaging Controlの LiveStartクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStart MethodLiveStopクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStop Method メソッドへのコールを追加します。

[VB.NET]
Private Sub cmdStartLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
            Handles  cmdStartLive.Click
     IcImagingControl1.LiveStart()
End Sub
[C#]
private void cmdStartLive_Click(object sender, EventArgs e)
{
     icImagingControl1.LiveStart();
}

[VB.NET]
Private Sub cmdStopLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
              Handles cmdStopLive.Click
     IcImagingControl1.LiveStop()
End Sub
[C#]
private void cmdStopLive_Click(object sender, EventArgs e)
{
     icImagingControl1.LiveStop();
}

プログラムを実行してください。これでそれぞれのボタンをクリックすることでライブ画像のスタート、ストップなどの操作ができるようになります。 これでAVIファイルの作成はできませんが、ライブビデオストリーム用のプレビューを作るために必要なものです。 通常、録画を始める前にカメラをセットアップ する必要があります。

AVI 録画ダイアログ

プロジェクトに新たなフォームを追加し、frmWriteAVIと名前を付けてください。ビデオコーデックの選択用にコンボボックスを、AVIファイルネーム用にテキストボックスを追加します。そしてAVIキャプチャのスタートとストップボタンを作成します。(サンプルプロジェクトがありますので、そちらをロードすることをおすすめします。)

FormLoadイベント時、選択リストにはコンピューターにインストールされているビデオコーデック名が入ります。 これらはAVIコンプレッサーとして使用されます。

[VB.NET]
Private Sub  writeavi_Load(ByVal  sender As System.Object, ByVal  e As System.EventArgs) Handles  MyBase.Load
     'インストール済みのコーデックをcboVideoCodec コンボボックスに挿入。
     For Each Codec As TIS.Imaging.AviCompressor In ICControl.AviCompressors
        cboVideoCodec.Items.Add(Codec)
     Next
     ' コンボボックス内の最初のコーデックを表示。
     cboVideoCodec.SelectedIndex = 0
End Sub
[C#]
private void  WriteAvi_Load(object sender, EventArgs e)
{
     cboVideoCodec.DataSource = ICControl.AviCompressors;
     // コンボボックス内の最初のコーデックを表示。
     cboVideoCodec.SelectedIndex = 0;
     cmdStopCapture.Enabled = true;
     cmdStartCapture.Enabled = true;
}

Start CaptureボタンのClickイベントはファイル名とビデオコーデック名をパラメータとして AviStartCaptureクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.AviStartCapture Method メソッドを呼び出します。またCloseボタンを無効、Start Captureボタンを有効にすることでユーザーがコーデックとファイル名を選択したかどうかをチェックするコードもあります。

[VB.NET]
Private Sub  cmdStartCapture_Click(ByVal  sender As System.Object, ByVal  e As System.EventArgs) 
                Handles  cmdStartCapture.Click
     If txtFilename.Text = "" Then
        MsgBox("Please select an AVI filename first.", vbExclamation + vbOKOnly)
     Else
        ICControl.AviStartCapture(txtFilename.Text, cboVideoCodec.SelectedItem) 
        cmdStopCapture.Enabled = True
        cmdStartCapture.Enabled = False
     End If
End Sub
[C#]
private void  cmdStartCapture_Click(object sender, EventArgs e)
{
     if (txtFilename.Text == "")
     {
         MessageBox.Show("Please select an AVI filename first.");
     }
     else
     {
        ICControl.AviStartCapture(txtFilename.Text, cboVideoCodec.SelectedItem.ToString());
        cmdStopCapture.Enabled = true;
        cmdStartCapture.Enabled = true;
     }
}

Pauseボタンはチェックボックスとなっています。これはLiveCapturePauseクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveCapturePause Property プロパティのセット、リセットに使われます。LiveCapturePauseクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveCapturePause Property プロパティがTrueの場合, AVI キャプチャは停止します。これは画像ストリームのシンクパスのみが停止するということです。 ライブ画像は表示されますが、ビデオファイルとして保存はされません。 LiveCapturePauseクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveCapturePause Property プロパティがFalseである場合、 IC Imaging Control は即座にAVIキャプチャを再開します。 前に作成されたAVIファイルが引き続き使用されます。

[VB.NET]
Private Sub  chkPause_CheckedChanged(ByVal  sender As System.Object, ByVal  e As System.EventArgs) 
                Handles  chkPause.CheckedChanged
     ICControl.LiveCapturePause = chkPause.CheckState
End Sub
[C#]
private void  chkPause_CheckedChanged(object sender, EventArgs e)
{
     ICControl.LiveCapturePause = chkPause.Checked;
}

AVI キャプチャはAviStartCaptureクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.AviStartCapture Methodを呼び出すことで開始されます。LiveCapturePauseクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveCapturePause Property プロパティがTrueであったとしても、この場合は画像ストリームは初期化された後に開始され、ライブ 画像が表示されます。シンクパスは停止中のため 画像がAVI ファイルとしては保存されません。LiveCapturePauseクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveCapturePause Property プロパティがFalseに変わればシンクパスが再開し、画像がAVIファイルに書き込まれます。これによって AVI キャプチャをイベントに応じて開始、停止、再開と切り替えができるようになります。

以上でプログラムが実行可能になります。コーデックを選択しAVI ファイルを作成します。ビデオストリームの圧縮はCPUに高い負荷をかけることになる為、全てのコーデックで最大の解像度、フレームレート が保証されるというわけではありません。