PowerPointを使用したゆっくり動画の作成
■目的
PowerPointでのプレゼンをうp主のきもい声でなく、ゆっくりにしてもらう。
そしてそれを動画ファイルとしてうpする。

■環境
Windows7 64bit
Microsoft PowerPoint2010
Soft Talk


■動画


・mdlAddSoftTalk.bas
→このファイルの「mSoftTalkPath」に記述しているファイルパスにSoftTalkwのパスを入力してください。

'* 以下にSoftTalkのExeの場所を指定してください。
Const mSoftTalkPath As String = "C:\tool\softalk\SofTalkw.exe"


・動画で使用したファイル
 






■解説
今回、外部から実行できるマクロは2つです。
(1)AddSoftTalk
 →全てのスライドに対してノートに記述してある、台詞をWAVとして挿入する
(2)AddSoftTalkToSelectedSlide
 →選択中のスライドに対してノートに記述してある、台詞をWAVとして挿入する

●SoftTalkの実行方法
 SoftTalkを実行してWAVファイルを作成している間、VBAはその完了をまたなくてはいけません。
 ここでは下記のようにWaitForSingleObjectを使用して、起動したSoftTalkの終了を待ちます。

Windows APIの宣言

Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Public Const INFINITE As Long = &HFFFF



'**
'* SoftTalkによるWavファイルの作成
'* @param[in] msg しゃべる内容
'* @param[in] wavPath 作成するwavファイルのパス
'**
Private Sub CreateWavFile(ByVal msg As String, ByVal wavPath As String)
Dim procId As Long
Dim hProc As Variant
Dim doExe As String
doExe = mSoftTalkPath & " /R:""" & wavPath & """ /T:3 /Q:0 /U:0 /W:" & msg
procId = Shell(doExe)

hProc = OpenProcess(PROCESS_ALL_ACCESS, False, procId)
If hProc > 0 Then
Call WaitForSingleObject(hProc, INFINITE)
CloseHandle hProc
End If

End Sub


●現在選択中のスライドの取得方法
現在選択中のスライドは下記のようにして取得します。
ちょっとくせのある取得方法です。


Dim sld As Slide
Set sld = ActivePresentation.Slides.Item(ActiveWindow.Selection.SlideRange.SlideIndex)



●ノートの内容の取得方法
各スライドのノートのテキストの取得は以下のようになります。
Slide.NotesPage(1).Shapes.Item(2).TextEffect.Text

NotesPageで取得できる型はSlide型になっており、そこのShapesにノートに記述してある文字情報があります。
ノート中のShapeは3つあり、以下のようになっているようです。

Slide.NotesPage(1).Shapes.Item(1)
→ヘッダ
Slide.NotesPage(1).Shapes.Item(2)
→本文

Slide.NotesPage(1).Shapes.Item(3)
→フッタ

●音声の再生
音声の再生方法には2種類あります。
・スライド切り替え時に音声を再生する。
・スライドに音声を組み込んで、クリック時に再生する。

前者は下記のコードで行えます。

Slide.SlideShowTransition.SoundEffect.ImportFromFile(wavPath)


しかし、これには致命的な弱点があります。WMVで出力した場合に、この音声は再生されません。これは仕様のようです。

ビデオを PowerPoint 2010 スライド切り替えのサウンドはエクスポートされません。


下記はその代替として、スライドに音声を埋め込むコードです。
WMV変換後も音声を出力するために、AddMediaObjectでなく、AddMediaObject2を使ってください。


Private Sub ApeendWavFile(ByRef sld As Slide, ByVal wavPath As String)
' 重複チェック & 削除
Dim shp As Shape
Dim rmIndex As Long
rmIndex = 0
Dim i As Long
i = 1
For Each shp In sld.Shapes
If shp.Type = msoMedia Then
If shp.MediaType = ppMediaTypeSound Then
If Dir(wavPath) = shp.Name Then
rmIndex = i
Exit For
End If
End If
End If
i = i + 1
Next
If rmIndex <> 0 Then
sld.Shapes.Item(rmIndex).Delete
End If

Set shp = sld.Shapes.AddMediaObject2(wavPath)
shp.AnimationSettings.PlaySettings.PlayOnEntry = msoTrue
shp.AnimationSettings.PlaySettings.HideWhileNotPlaying = msoTrue


End Sub




■感想
PowerPointのオブジェクトの操作はちょっと癖がありました。あと、日本語の文献は期待しないほうがいいようです。

このままだと、音声のパターンが1つしかないので、ノートにどんな音声を出力するか記述できるようにしたほうがいいかもしれません。このあたりは課題になると思います。

あと、ニコニコとかにあげると想像以上に見づらいので、大きな文字で書いたほうがいいようです。

■参考文献
PowerPoint Object Model Reference
 
Working with Slide Objects
 

以上
[PR]
by mima_ita | 2012-09-01 23:30 | VBA
<< Powerpointを使用した... 人に仕事をふるからといって責任... >>



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ