画面とオーディオ(コンピューターマイクから)を録音し、wmvファイルに出力するための.Netコードを書くのは簡単ですか?参照コードはありますか?
ところで:私はWME SDKからすべてのコードを検索しましたが、そのようなサンプルコードはありませんでした。
ありがとう!ジョージ
Microsoft とコンテンツ マフィア ^H^H^H^Hindustry は、これを不可能にしようと最善を尽くしています。公式に提供されたドキュメントやサンプル コードを閲覧するよりも、「オープン ソースのスクリーン オーディオ キャプチャ」を検索する方がはるかに優れています。
Techsmith Camtasia で利用可能な SDK を確認してください。
Camtasia は、さまざまなビデオおよびオーディオ ソース、コーデックなどをサポートするフルスクリーン デスクトップ録画アプリであり、その SDK はこれを ActiveX コントロールとして公開します (これは .NET から簡単に呼び出すことができます)。
画面キャプチャ用の DirectShow 互換フィルターがあります。これにより、任意の記録プログラムを使用して画面の内容をキャプチャしたり、.NET で自分でアプリケーションを作成したりできます (ただし、簡単ではありません)。
私が使用するものは次のとおりです。 http://www.hmelyoff.com/index.php?section=9
編集: WME SDK のサンプルや経験はありません。ただし、ホスト システムに WME を搭載しなければならないという要件や、そのサポートの欠如を回避するために、DirectShow ルートを使用することをお勧めします。
Hmelyoff フィルターを使用するには、Web カメラと同じように機能します。これは、ビデオ入力を必要とするあらゆるアプリケーションで利用できるもう 1 つのビデオ キャプチャ ソースです。これは、各フレームで viedo バッファーの一部をその出力ピンにコピーするだけで機能します (BitBlt などの API 関数を使用)。
サンプルコードはこちらです。
または、DirectShow へのインターフェイスだけを使用する場合は、ライブラリを使用して COM との対話を行うのが最も簡単な方法です。http://directshownet.sourceforge.net/は良いものです。
再度編集:ビデオとしてキャプチャすることは、フレームをキャプチャすることと同じです。1 秒間に 30 回フレームをキャプチャするだけです。CPUホグ?完全なフレームレートを期待しないでください。
フレームをビデオとして保存する方法を求めている場合は、データをビデオ エンコーダーに渡す必要があります。これを行うには、DirectShow に接続する必要があります。
はい、それはWMEで完全に実行可能です: http://www.c-sharpcorner.com/UploadFile/armoghanasif/CaptureDesktopActivities11122005013755AM/CaptureDesktopActivities.aspx
私は過去にそれを行いました、そしてあなたがエンコーディング設定を微調整し始めるとあなたは非常に良い品質のビデオを得ることができます。特にWMVが実行可能なオプションである場合。そうでない場合は、別のアプリケーションを使用して別の形式に再エンコードする必要があります。
微調整する最も簡単な方法は、WMEデスクトップアプリケーションを使用してさまざまな設定でテストおよび記録し、それらの構成ファイルを保存することでした。これらの構成ファイルは、後でアプリケーションからプログラムでロードしました。
Microsoft Expression Encoder 4 を使用して、ビデオとオーディオの両方を記録できます。C#でうまくいきました。次のコードは見覚えがあるはずです。
void Encode(string jobPath)
{
using (Job j = new Job())
{
MediaItem mediaItem = new MediaItem(jobPath);
var size = mediaItem.OriginalVideoSize;
WindowsMediaOutputFormat WMV_Format = new WindowsMediaOutputFormat();
WMV_Format.VideoProfile = new Microsoft.Expression.Encoder.Profiles.AdvancedVC1VideoProfile();
WMV_Format.AudioProfile = new Microsoft.Expression.Encoder.Profiles.WmaAudioProfile();
WMV_Format.VideoProfile.AspectRatio = new System.Windows.Size(16, 9);
WMV_Format.VideoProfile.AutoFit = true;
if (size.Width >= 1920 && size.Height >= 1080)
{
WMV_Format.VideoProfile.Size = new System.Drawing.Size(1920, 1080);
WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(6000);
}
else if (size.Width >= 1280 && size.Height >= 720)
{
WMV_Format.VideoProfile.Size = new System.Drawing.Size(1280, 720);
WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(4000);
}
else
{
WMV_Format.VideoProfile.Size = new System.Drawing.Size(size.Width, size.Height);
WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(2000);
}
mediaItem.VideoResizeMode = VideoResizeMode.Letterbox;
mediaItem.OutputFormat = WMV_Format;
j.MediaItems.Add(mediaItem);
j.CreateSubfolder = false;
j.OutputDirectory = @"D:\output";
j.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(j_EncodeProgress);
j.Encode();
}
}
Windows Media エンコーダー ライブラリを .net アプリケーションの com インターフェイスとしてインポートし、それをアプリケーションで使用することをお勧めします。