Skip to main content

ログ取得ツール

Category: Windows

字幕つきDVD

Windowsに標準添付のWindows DVDメーカーを使って悪くない印象を持ったんですが、字幕もつけたいなということは思っていた。単なるホームビデオですが。いろいろ探したらこういう比較表を見つけたんで、半分くらいを試してみました。

自宅の環境では動くもの動かないものいろいろありましたが、DVD Flick(sf.netのproject summary)が最も使い勝手が良いという印象。落ちることもあるが、操作が単純で、ビデオクリップをどんどんDrag&DropしていくとそれなりのDVDになる。そこでついに字幕をつけてみようと。字幕編集ソフトはSubtitle Workshopが定番っぽい印象を受けたので、それを使って作成。

しかしDVD FlickはANSI/ASCIIの字幕(つまり英語字幕)しか受け付けてくれない。しょうがないので英語の字幕を適当につけてやってみたけど、できたDVDイメージをメディアプレイヤーやDVD再生ソフトで見てみると、字幕を入れたクリップが再生されない。これは何かがおかしいな…何度かいろいろ試してみたら、なんとか英語字幕はつけることができた。

ノートPCに付属していたUlead DVD MovieWriterもそれなりに使いやすいとは思った。Drag&Dropでビデオクリップを追加できないのはちょっと痛いけど、任意のタイミングで文字を入れていくことができる。Subtitle Workshopで編集した字幕データを指定する、といったやり方はできないが、けっこう自由に字幕の座標やフォントを指定できるという利点も。しかし実際にやってみると、入った文字は字幕の状態ではなくビデオの映像の中に埋め込まれているため、字幕なしで再生、という再生方法は選べなくなってしまうようだ。これは困るかな。

Windows DVDメーカー

便利ですね。Windowsだから有料のソフトになるのかなぁと思ってダメモトでスタートメニューの検索に「dvd」と入れてみたら、まさかの標準添付。操作も単純すぎるところがなかなか良い。

入力の動画フォーマットはcodecがインストールされていれば(メディアプレイヤーで再生できれば)、勝手にDVDで使う形式に変換して、適当なメニュー(いくつかの中から選べる)をつけて焼いてくれる。ということでH.264に変換した後の動画でも、デジカメにありがちなmotion jpegのままでも問題ない。どんどん放り込めばよいという。

クリップごとにタイトルが表示されるのかなぁと勝手に思って、タイトルのつもりで中身を見ながらファイル名を変更していったのだが、タイトルは表示されないので無駄な作業だった。単純に、これまで日付と時刻を組み合わせたディレクトリ構造の中に、コンパクトデジカメで撮ったjpgや動画が入っていたので、動画をまとめて放り込めばよいだけだった。

WLWのAPI

WLWにはAPIが用意されている。どうにかしてこれを呼べないかなぁと思った。ファイルは「C:\Program Files\Windows Live\Writer\WindowsLive.Writer.Api.dll」だということはわかっている。状況から考えて、たぶん.NETのライブラリなんじゃないかな。

まずはPythonに付属のctypesだが、ctypes自体は状況によっては異常に便利な、ものすごいものではあるが、、、

>>> import ctypes
>>> wlapi=ctypes.cdll.LoadLibrary(r"C:\Program Files\Windows Live\Writer\WindowsLive.Writer.Api.dll")

ここから先が続かないんだよね。何の関数を呼べばいいんだろう…そもそも.NETのdllってctypesから呼べるのかどうか…

.NETだからIronPythonだろう、ということでipyを入れてやってみると、当たりっぽいのが出てきた。

>>> import sys
>>> import clr
>>> sys.path.append(r"C:\Program Files\Windows Live\Writer")
>>> clr.AddReference("WindowsLive.Writer.Api.dll")
>>> import WindowsLive.Writer.Api as wlapi
>>> help(wlapi)
 :(大量のテキスト)
>>> dir(wlapi)
['AdaptiveHtmlObject', 'Alignment', 'ContentCreationException', 'ContentResizedEventHandler',
 'ContentSource', 'HtmlDocumentAvailableEventArgs', 'HtmlDocumentAvailableHandler',
 'HtmlScreenCapture', 'HtmlScreenCaptureAvailableEventArgs', 'HtmlScreenCaptureAvailableHandler',
 'HtmlServices', 'HtmlType', 'HttpRequestCacheLevel', 'ILayoutStyle', 'IProperties', 'IPublishingContext',
 'ISmartContent', 'ISmartContentEditorSite', 'ISupportingFiles', 'InsertableContentSourceAttribute',
 'LiveClipboardContentSourceAttribute', 'PluginDiagnostics', 'PluginHttpRequest', 'ResizeCapabilities',
 'ResizeOptions', 'SmartContentEditor', 'SmartContentSource', 'SupportsFeature',
 'UrlContentSourceAttribute', 'WriterApplication', 'WriterPlugin', 'WriterPluginAttribute',
 '__builtins__', '__dict__', '__name__']

なんかぐぐりながらやっていけば、少しは見当がつきそうな感じ。でもプラグインの呼び出しの口はDLLで作らなきゃいけないはずだから、Pythonで作るのは無理かなぁ。プラグインのDLLを別から呼んで遊ぶなんてことはできるかもしれない。WriterPluginではなくWriterApplicationクラスを使えば、自分のスクリプトからWLW経由で投稿、というのは可能か。

ルビ

rubyところで、WLWでは略語(やタグ)についてはプラグインがあって、勝手に略語の定義を探してきてくれたりするのだけど、漢字(かんじ)のルビのプラグインはまだないようだ。なら作ってしまえ、と思ったのだけど、Windowsでプログラムを書くなんてことに恐怖を覚えてしまうし、果たして書けるものかどうかも分からない。あまり大げさにしたくもないので、wxPythonで書いてみた。

一応、ルビ()と略語(と)を作ってクリップボードに送るように書いてある。これをWLWで「形式を選択して貼り付け → HTML」を選べば、そこそこうまいことやってくれる。ただルビはうまく処理できておらず、ルビの外側に書き続けたいのにルビの内側に書き加える形になってしまったり。

勢いで書いてしまいましたが、自分で使うかどうかはわかりません。あと「TAB」キーでフォーカスが移動しないのはなんでだろう…