1

C#.net で DirectshowLib2005.dll を使用してウェブカメラからビデオを録画しています。

try
        {
            IBaseFilter capFilter = null;
            IBaseFilter asfWriter = null;
            IFileSinkFilter pTmpSink = null;
            ICaptureGraphBuilder2 captureGraph = null;
            GetVideoDevice();
            if (availableVideoInputDevices.Count > 0)
            {
                //
                //init capture graph
                //
                graphBuilder = (IFilterGraph2)new FilterGraph();
                captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
                //
                //sets filter object from graph
                //
                captureGraph.SetFiltergraph(graphBuilder);
                //
                //which device will use graph setting
                //
                graphBuilder.AddSourceFilterForMoniker(AvailableVideoInputDevices.First().Mon, null, AvailableVideoInputDevices.First().Name, out capFilter);
                captureDeviceName = AvailableVideoInputDevices.First().Name;
                //
                //check saving path is exsist or not;if not then create
                //
                if (!Directory.Exists(ConstantHelper.RootDirectoryName + "\\Assets\\Video\\"))
                {
                    Directory.CreateDirectory(ConstantHelper.RootDirectoryName + "\\Assets\\Video\\");
                }
                #region WMV                   
                //
                //sets output file name,and file type
                //
                captureGraph.SetOutputFileName(MediaSubType.Asf, ConstantHelper.RootDirectoryName + "\\Assets\\Video\\" + videoFilename + ".wmv", out asfWriter, out pTmpSink);                    
                //
                //configure which video setting is used by graph
                //                
                IConfigAsfWriter lConfig = asfWriter as IConfigAsfWriter;
                Guid asfFilter = new Guid("8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF");
                lConfig.ConfigureFilterUsingProfileGuid(asfFilter);
                #endregion
                //
                //render the stram to output file using graph setting
                //
                captureGraph.RenderStream(null, null, capFilter, null, asfWriter);
                m_mediaCtrl = graphBuilder as IMediaControl;
                m_mediaCtrl.Run();
                isVideoRecordingStarted = true;
                VideoStarted(m_mediaCtrl, null);
            }
            else
            {
                isVideoRecordingStarted = false;
            }
        }
        catch (Exception Ex)
        {               
           ErrorLogging.WriteErrorLog(Ex);
        }

このコード行を観察した場合

//
                //configure which video setting is used by graph
                //                
                IConfigAsfWriter lConfig = asfWriter as IConfigAsfWriter;
                Guid asfFilter = new Guid("8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF");
                lConfig.ConfigureFilterUsingProfileGuid(asfFilter);

「C:\windows\WMSysPr9.prx」にあるファイルからこの GUID を取得した GUID に記述されているビデオ設定を適用します。

私の質問は、フォーマット、解像度、その他すべてを使用して独自のビデオ設定を作成する方法です。

白黒モードまたはグレースケールでウェブカメラを使用してビデオを録画する方法は?

4

1 に答える 1

1

私の質問は、フォーマット、解像度、その他すべてを使用して独自のビデオ設定を作成する方法です。

GUID ベースのプロファイルは非推奨ですが、引き続き使用できます。およびフレンドを使用して、コードでカスタム プロファイルを作成できますWMCreateProfileManager(空のプロファイルから始めて、自由にビデオやオーディオ ストリームを追加します)。これは C++ APIです。既に使用している DirectShowLib の姉妹プロジェクトであるWindowsMedia.NETが .NET コードへのインターフェイスを提供していると思います。

Windows SDKWMGenProfileサンプルは、プロファイルを手動で作成する方法を示し、プロファイルを対話的に作成.PRXしてアプリケーションで使用できるファイルに保存するためのツールを提供します。

$(WindowsSDK)\Samples\multimedia\windowsmediaformat\wmgenprofile

ここに画像の説明を入力

白黒モードまたはグレースケールでウェブカメラを使用してビデオを録画する方法は?

カメラが写真を提供し、パイプラインを通過して特定の処理を経て記録されます。グレースケールにする機能は固有のものではありません。

考えていただきたいことが 2 つあります。まず第一に、カメラがキャプチャ時に色情報を取り除くことができる場合、これを活用できます。確認してください - その設定に彩度スライダーがある場合、最小値の位置を入力するだけで、カメラはグレースケールを提供します。

コードでは、IAMVideoProcAmpこれにインターフェイスを使用します。

カメラに前述の機能がない場合を含む別のオプションは、グレースケールに変換する後処理フィルターまたは効果を適用することです。これに対するストック ソリューションはありません。それ以外の場合は、効果を達成する方法がいくつかあります。

  • 色を取り除くサードパーティのフィルターを使用する
  • Color Control Transform DSPDirectShow パイプラインからのエクスポート、 (Win Vista 以降で利用可能) または GDI 関数を使用してコード内のデータを変換する
  • ストリーミング パイプラインで Sample Grabber を使用し、イメージ ビットを直接更新する
于 2012-05-31T06:55:46.317 に答える