« ファイルを分割・復元する | メイン | ファイル一覧を作成する »

動画を再生する

ストリーミング配信が手軽にできるようなこのご時世、
エクセルで動画を見られないものかと遊んでみました。

結論からいうとメディアプレイヤーコントロールを使用するのが簡単です。
WinXPの場合wmp.dllを、Win98ではmsdxm.ocxをそれぞれ使用します。
どちらもコントロールの追加では、WindowsMediaPlayerという同じ名前なのでちょっとややこしいです。
msdxm.gif
mwp.gif

Win98の場合

UserFormを作成して、MediaPlayerコントロールを配置します。 MediaPlayerコントロールは初期のツールボックスにないので追加します。 msdxm.ocxのMediaPlayerコントロールを選んでね

tb1.gif

msdxm.gif

ツールボックスに追加できたら、後は普通にユーザーフォームに貼り付けます。
tb2.gif
これで出来上がり。
uf1.gif

こ、これはっ、、、なつかしのMplayer2ではないか。。。いわゆるメディアプレーヤー6.4。

次はどんな振る舞いをさせるかですが、とにかく再生させたいってことで、簡単な仕様にしましょう。

仕様:
ワークシートにある動画ファイルのパスをクリックすると
メディアプレーヤーのフォームが表示され、動画を再生する。

ではコードをカリカリ書いちゃいましょう。
まずクリックをトラップしたいので、
ワークシート(sheet1)のSelectionChangeイベントを使います。
細かいですが、下の例では、UserForm1のオブジェクト名をPlayerFormと変更していますのでご注意ください。気分の問題です。
オブジェクト名の変更はプロパティボックスで変更できます。


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If Target.Count = 1 Then
If Target <> "" Then
With PlayerForm
.MediaPlayer1.FileName = Target
.MediaPlayer1.autoStart = True
.MediaPlayer1.volume = 0
.Height = _
.MediaPlayer1.Height + 23
.Width = _
.MediaPlayer1.Width + 12
.Show
End With
End If
End If

End Sub

コードの解説です。
.Targetというのがクリックしたセルです。
selectionということで複数のセルが選択される可能性がありますので、.countでセル数をチェックします。
さらにクリックしたセルがnullでないこともチェックします。
後はMediaPlayerの設定です。
.FileNameは再生したい動画ファイルのフルパスを指定します。ローカルファイルのみならず、URLでも指定OKです。
.AutoStart読んで字の通り自動再生です。
これをTrueにしておけば、FileNameで指定した動画を自動的に再生します。
(Falseの場合は.Playメソッドで再生します)
.volumeは音量です。因みにゼロは最大音量のことです。
.Height、.Widthを利用して、PlayerFormのサイズを動的に変更します。


もうひとつコードを用意します。こちらはPlayerFormに記述するコードです。
キチンと終了させるためのもので、再生が終了したらフォームを消します。
MediaPlayerのPlayStateChangeイベントでステータスが0に変わったら、フォームを消します。(停止ボタンを押した場合も同様にフォームが消えます)


Private Sub MediaPlayer1_PlayStateChange(ByVal OldState As Long, ByVal NewState As Long)

If NewState = 0 Then
PlayerForm.Hide
End If

End Sub

XPの場合

フォームではなくワークシートに埋め込んじゃいましょう。 (ワークシートへの埋め込みはwin98では駄目でした。) エクセルからVBのツールバーを表示させて、コントロールボックスをクリックします。 VBA同様にツールボックスが表示されますが、 MediaPlayerコントロールは初期のツールボックスにないので追加します。 xp1.gif xp2.gif あとは適当な大きさで貼り付ければできあがりです。 xp3.gif こんどはMP9ですね。


さて次はコードですが、Win98の場合と同様にワークシートにある動画ファイル名をクリックしたら、そのファイルを再生させるようにします。
ワークシート(sheet1)のSelectionChangeイベントを使いうのは98版と同じです。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
If Target <> "" Then

With Sheet1.WindowsMediaPlayer1.settings
.Volume = 100
End With

Sheet1.WindowsMediaPlayer1.URL = Target

End If

End Sub

Win98と同じ処理なのですが微妙に違いますね。
まずコントロールの名前がWindowsMediaPlayerです。MediaPlayerではありません。
次に、.VolumeはSettingsオブジェクトのプロパティっとなっていて、最大値が100です。
また.FileNameプロパティは.URLプロパティとなっています。
もちろん.URLプロパティにローカルファイル名をセットしてもOKです。
なんでこんなに違うのですかね。。


こちらも終了処理をつけます。
といってもワークシート埋め込み型ですので、フォーム型の時のように消す必要はありません。
終了時にURLをクリアして、次回エクセルを立ち上げたときに自動再生されるのを防ぎます。


Private Sub WindowsMediaPlayer1_StatusChange()

If Sheet1.WindowsMediaPlayer1.Status = "停止" Then
Sheet1.WindowsMediaPlayer1.URL = ""
End If

End Sub

ちょっと長い解説でしたが、サンプルです。
XP版(wmp.dll)と98版(msdxm.ocx)があります。
http://www.xillion.net/sample/wmp.dll.xls
http://www.xillion.net/sample/msdxm.ocx.xls


因みに、それぞれエクセルのサンプルムービーはTerragenのアニメーション機能で作成し、
MediaPlayer9エンコーダーでwmvファイルを作成しています。
サンプルムービーのURLです。

昇る太陽と流れる雲。湖を定点観測した動画です。
http://www.xillion.net/sample/kumo.wmv
40sec 391kbps

湖を飛んでいる鳥の視点の動画です。
http://www.xillion.net/sample/bird.wmv
10sec 391kbps
いまさらながらTerragenってすごいですね。

関連記事:動画をエンコードする

ひとつ前の投稿は「ファイルを分割・復元する」です。
次の投稿は「ファイル一覧を作成する」です。

トラックバック

このエントリーのトラックバックURL:
http://www.xillion.net/mova/mt-tb.cgi/89

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2005年05月07日 00:00に投稿されたエントリーのページです。

メインページアーカイブページも見てください。

Powered by
Movable Type 3.34