スライドと音声、スライドと動画を連携させるのに、次の三つが必要だ。
- 音声・動画を保存
- スライドの切り替えタイミング
- PPTスライドファイル
この3つの内、2:スライド切り替えタイミングの保存が出来れば、市販のスライド連携ソフトが不要になる。
スライドの切り替えタイミングは、専用ソフトが無くても、COM/OLEで実現できるハズ。Rubyでプロトタイピング頑張ってみた。
スライドの切り替えタイミングを保存するRuby
#!/usr/bin/env ruby require 'win32ole' require 'singleton' class PresentationRecoder include Singleton def initialize @ppt = WIN32OLE.new('PowerPoint.Application' ) @evt = WIN32OLE_EVENT.new(@ppt,"EApplication") @evt.on_event('SlideShowBegin') do|arg| on_slide_show_begin(arg) end @evt.on_event('SlideShowEnd') do|arg| on_slide_show_end(arg) end end def start self.event_listening end def event_listening while (true) WIN32OLE_EVENT.message_loop end end ##EventHandlers def on_slide_show_begin(wnd) enable_record_event_dispatch() end def on_slide_show_end(wnd) disable_record_event_dispatch() end def on_slide_show_next(wnd) puts Time.now, wnd.Presentation.FullName, wnd.View.CurrentShowPosition end def on_slide_show_end(presentation) puts Time.now, presentation.FullName, 'LAST' end def on_slide_start(wnd) #スライド記録を有効にする。 enable_record_event_dispatch end def enable_record_event_dispatch @evt.on_event('SlideShowNextSlide') do|arg| on_slide_show_next(arg) end end def disable_record_event_dispatch @evt.on_event('SlideShowNextSlide') do|arg| #do nothing end end end def test_presentation print "test_start" pp = WIN32OLE.new 'PowerPoint.Application' view = pp.ActivePresentation.SlideShowSettings.Run().View 5.times do |i| view.Next; sleep 3 end view.Exit end #main #終了コマンド待ち。 #このRubyスクリプトの終了を待ち続ける Signal.trap(:INT){exit -1;} begin recorder = PresentationRecoder.instance while true #test_presentation recorder.start sleep 0.1 break end rescue Interrupt p "interrupt" end
使い方
イベント監視ループ実行
Windowsのシェルを起動して
ruby PresentationRecoder.rb
次にスライドを起動
C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt
スライドショー
F5を押して、プレゼン画面を起動する。
実行結果
Thu Dec 10 00:06:11 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt 13 Thu Dec 10 00:06:11 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt 12 Thu Dec 10 00:06:11 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt 11 Thu Dec 10 00:06:12 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt 10 Thu Dec 10 00:06:12 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt 9 Thu Dec 10 00:06:15 +0900 2009 C:\Users\takuya\MyProjects\..etc\Vim基礎編.ppt LAST
タイムスタンプを元に、スライドショーのタイミングを記録
タイムスタンプから、スライドの切り替えタイミング取得し、Mp3やAviを分割する。