困ったー

WIN10・アプリ・ゲームで困ったことを調べてみた

「こまったー」は困ったことを調べたブログです。

ARK |  7 Days To Die |  フォートナイト |  マイクラ |   

スポンサーリンク


【Visual Studio 2019】C#で動画を制御するには?ビデオ入力表示は?

Visual StudioでCシャープを使って動画を表示させる方法の紹介です。単純に見せるだけならWindows Mediaを貼り付ければよいでしょう。細かい制御をしようとするとOpenCVライブラリを利用する必要があるかもしれません。

C#で動画を表示する

UBER Greed

Winndows Mediaを利用する

動画再生で手っ取り早いのはWindwos Media Playerコンポーネントを使うことです。

ツールボックスで右クリックし「アイテムの選択」を実行。

次に「COMコンポーネント」のタブで「Windwos Media Player」にチェックを入れます。

  

するとツールボックスにWindwos Media Playerのコンポーネントができますので、選択後にフォーム上でドラッグして配置します。 

 

プログラムでは

using AxWMPLib;

としたうえで

 

axWindowsMediaPlayer1.URL= "c:/_work/sample.mp4";
axWindowsMediaPlayer1.Ctlcontrols.play();

のように記述すると、再生ファイルを選んで動画が開始します。

 

外観のユーザインタフェースを消すには「axWindowsMediaPlayer1.uiMode = "none";」という記述を追加します。

自動開始をオンにするには「axWindowsMediaPlayer1.settings.autoStart = true;」のように記述します。
 

OpenCV

動画でゴルフスイングや振り付けなどをコマ送りで確認するためのプログラムを作ろうと思ったのですが、ウィンドウズメディアではうまく制御できませんでした。

 

具体的には、再生位置を変更はできるのですが画面がリフレッシュされません。リフレッシュのために動画の再生コマンドを使うと、指定フレームから先へ進んでしまうため、思い通りに動かせませんでした。

 

OpenCVは顔認識用ライブラリですが、動画再生の機能もあります。

 

まずNuGetを使って「OpenCVSharp4」「OpenCVSharp4.runtime.win」をインストールします。

 

プログラムでは

using OpenCvSharp;
using OpenCvSharp.Extensions;

として宣言をしておきます。

 

動画の初期化では、pathい動画の降るパスを設定しておきます。

VideoCaptureを作り、「IsOpened」でチェックします。

他の方の参考プログラムを見てみるとWhileでループで回していますが、インタフェースをいろいろつけたいのでTimerを使ってみました。

Timerのインターバルを動画のFPS(フレームパーセカンド)の値から算出するようにしました。スレッドで処理してもいいかもしれません。

 

VideoCapture vcap;

string path = "動画パス";

 

private void videoOpen(){

vcap = new VideoCapture(path);
if (!vcap.IsOpened())
{
MessageBox.Show("読み込めません!すんません");
return;
}

timer1.Interval = (int)(1000 / vcap.Fps);

}

 

 

動画の表示部は以下のような感じです。タイマーでのイベント処理で、Mat形式のデータを作成。

vcapでreadで画像データを読み込ませた後、フォームに張ったpictureBoxへ転送するような感じになります。

private void timer1_Tick(object sender, EventArgs e)
{

Mat mat = new Mat();

if (vcap.Read(mat))
{
if (mat.IsContinuous())
{
bmp = BitmapConverter.ToBitmap(mat);
pictureBox1.Image = bmp;
mat.Dispose();//Memory release

}

}

}

 

動画全体のフレーム数は「vcap.FrameCount」で取得できます。

再生位置を指定するには「vcap.PosFrame」へフレーム番号を入れます。

 

 

C#でUSBカメラ入力を表示する

カメラを利用する場合「NuGet」から「aForge.Video」「aForge.Video.DirectShow」「aForge.Video.Control」をインストールします。

 

最も手軽に表示するには、ツールボックスから「アイテムの選択」を実行。

ソリューション内にある「aForge.Video.Control」の「AForge.Controls.dll」を参照すると、ツールボックスに「VideoSourcePlayer」ができるのでフォームに追加します。

 

Form起動時などに、選択ダイアログを表示して選ばれたらそのカメラをソースにする設定だけで表示がすぐできます。

「using AForge.Video;」として置いたうえで、

 

var form = new VideoCaptureDeviceForm();
if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
videoSourcePlayer1.VideoSource = form.VideoDevice;
videoSourcePlayer1.Start();
}

 のように記述します。

f:id:apicode:20190712103028p:plain

 

キャプチャも以下のようなソースで行えます。

var bmp = videoSourcePlayer1.GetCurrentVideoFrame();
bmp.Save("temp.bmp");

 

デバイス一覧を取得する場合にはコンボボックスを用意して

「private FilterInfoCollection videoDevices;」を宣言したのち、

 

videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count == 0)
{
MessageBox.Show("カメラがみつかりませんYO");
return;
}
comboBox1.Items.Clear();
foreach (FilterInfo device in videoDevices)
{
comboBox1.Items.Add(device.Name); 
}

のように記述します。 

 

 

[C#関連記事]

  1. 【Visual Studio 2019】C#の始め方 - 困ったー
  2. 【Visual Studio 2019】C#のエラーと対策 - 困ったー
  3. 【C#】ツールボックス 一覧 - 困ったー
  4. 【Visual Studio】C#でフォームの使い方 フル画面?半透明?バーを消す?
  5. 【VisualStudio】C#のボタンとは?使い方は?
  6. 【VisualStudio】C#のパネルとは?使い方は?
  7. 【Visual Studio】C#で表・テーブルを使うには?
  8. 【Visual Studio】C#でスクレイピング
  9. 【Visual Studio】C#で文字やファイルを扱うには? - 困ったー
  10. 【Visual Studio】C#で画像やサウンドを扱うには? - 困ったー
  11. 【Visual Studio】C#で動画を制御するには?ビデオ入力表示は?
  12. 【Visual Studio】C#でインターネット関数の使い方 - 困ったー
  13. 【Visual Studio】C#で顔認識や日本語解析のサンプル - 困ったー
  14. 【Visual Studio】C#からMySqlの使い方 接続するには?SQL文を実行するには?

 

[Visual Studio 2019関連記事]

  1. Visual Studio 2019 無料で使うには?ダウンロードするには?
  2. インストーラ作成のまとめ アイコンは?.NET Frameworkを含めるには?
  3. Visual Source Codeとは?Visual Studio 2019との違いは?

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

利用規約・プライバシーポリシー |〇問い合わせ