0

Webカメラビデオを入力として受け取るコンピュータビジョンアルゴリズムを開発したいと考えています。このためには、私が制作中のイメージと同じフォーマットのビデオのトレーニングデータセットを記録する必要があります。H.264ビデオソースをWindows.Media.Captureのファイルに直接記録する方法

私はトレーニングのためにそれらをデコードし、その後、非可逆形式でビデオファイルをエンコードすると分解し、そうでない場合、彼らは私が生産に表示されます画像とまったく同じではありませんので、トレーニング画像を変更することが心配。

は今、私は私のウェブカメラは、(表面Pro 3の上で実行されている)H264ビデオソースとYUY2のビデオソースを持っていることがわかります。

私はH264が画像のソースであり、YUY2はおそらくデコードされた画像であると考えます。 H264をファイルに直接記録し、後でそのファイルをデコードすると、デコードされた画像はYUY2ビデオソースから得られるものと同等になります。私は新しいビデオをエンコードしてそれを変更するのではなく、既にエンコードされたソースH264を使用しました。

私の質問は以下のとおりです。

  1. は、この仮定が本当ですか? H264フィードはソースであり、YUY2はそのソースの製品ですか?どうすれば確認できますか?

  2. はどのようにしてデコードし、再エンコードせずにファイルに直接H264のビデオソースから録音できますか?

私は新しいWindows.Media.Capture APIを使用していますが、必要に応じて他のAPIを使用します。

+0

メモを記入してください。x64上にあります。.NET。 Windows.Media.CaptureはUWPだけではありません。 –

答えて

1

Surface Pro 3は、H.264 hardware compressionが可能なカメラを搭載しています。これは、YUY2とH264の両方を利用できるオプションとして表示している理由です。

ビデオを圧縮するのはカメラなので、YUY2は生のフィード、H264はその派生物です。

この仮定は本当ですか? H264フィードはソースであり、YUY2はそのソースの製品ですか?どうすれば確認できますか?

いいえ、それは逆です。

H264ビデオソースからデコードや再エンコードを行わずにファイルに直接記録するにはどうすればよいですか?

H264を読み込んでマルチプレクサにルーティングし、H264ビデオトラックでMP4ファイルを生成します。間違いなくWindows Media FoundationのSource ReaderとSink Writerで、おそらくMedia Session APIでも可能です.Windows.Media.Captureについてはわかりませんが、おそらく上記のレイヤーの上にレイヤーがあります。

+0

にはエフェクトを追加できません。 H.264がデリバティブの場合、元のデータを失うので、ソフトウェアでエンコードされたコードをカメラで再エンコードして使用する利点はありません。 –

+0

利点は圧縮のCPU負荷がゼロであることがあります(ハードウェアのH.264圧縮を使用してRawをキャプチャし、多くの場合圧縮するオプションがありますが)が、カメラは次のような特定のパラメータ/モードで圧縮できる可能性があります。 SVC。最後に、多くの場合、H.264でキャプチャを行うと、より高い解像度とレートの組み合わせを実現できます。 –

+0

これはすべて真です。再エンコードせずにMediaCaptureでそのストリームを記録する方法は私には分かりません。私はそれが起こっていることを示すことなく、「卑劣なことに」再エンコードする能力に悩まされています。あなたのアドバイスに従ってWindows Media Foundationを使用し、ストリームを直接記録したいと考えています。 –

0

あなたはUWP SDKからCameraFramesサンプルを確認することができます。https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraFrames

を基本的には、ウェブカメラのためのMediaFrameReaderを作成し、それがFrameArrivedのイベントをサブスクライブします。そこにあるH264フレームにアクセスして、たとえばSink Writerにフィードする必要があります。または、MediaCapture.StartRecordToCustomSinkAsyncを使用して、カスタムIMediaExtensionメディアシンクを提供する必要があります。 SimpleCommunicationサンプルを確認してください:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SimpleCommunication

+0

私は、MediaCapture.StartRecordToStorageFileAsyncで保存ファイルに録音しています。なぜ私はCustomSinkが必要なのですか? 問題は、ファイルが再エンコードされたことを示す入力解像度**に関係なく、ファイルが640幅の解像度**を取得することです。
[MediaCapture API](https://docs.microsoft.com/en-us/uwp/api/windows.media.capture.mediacapture)によると:*ネイティブタイプがH.264の場合は、ネイティブタイプと同じタイプのビデオメディアタイプを使用します。 H.264ネイティブタイプストリーム* –

1

あなたが正しく理解しているとすれば、あなたが持っているWebカメラは、H.264エンコードストリームとYUY2エンコードストリームの2つの異なるストリームを公開していると言います。 Webカメラは、h.264フィードをプライマリ形式として公開し、次にそれをYUY2形式に圧縮解除することを前提としています。これは最も確かにそうではない

、YUY2形式は、ウェブカメラと264飼料に取り込まれた生データは、そのデータの圧縮形式です。だから、それは損失ではないことを安心することができます。

データをファイルに書き込む方法を説明するいくつかの例があります。

関連する問題