ホームページ: http://www.unixuser.org/~euske/vnc2swf/
メーリングリスト: http://lists.sourceforge.net/lists/listinfo/vnc2swf-users
$Id: pyvnc2swf-j.html,v 1.2 2008/11/16 02:39:40 euske Exp $
Pyvnc2swf はクロスプラットフォームの画面録画ツールです。 これは VNC プロトコルを経由して画面の動きを記録し、Shockwave Flash (SWF) ムービーを生成します。 Pyvnc2swf は 3つの Python プログラムから構成されています:
vnc2swf.py
- 録画ツール
edit.py
- 編集ツール
(これは vnc2swf によって生成された SWF のみをサポートしており、一般的な SWFエディタではありません)
play.py
- 再生ツール
ご質問がある方は、作者にメールを送る前にまず FAQ および メーリングリストのアーカイブ をご覧ください。
ライセンス: Pyvnc2swf は無保証のソフトウェアです。 これは GNU 一般公衆利用許諾契約書 (GPL) に従って配布されます。
すべてのプラットフォームで、以下のパッケージがあらかじめ必要です:
ほとんどの Linux ディストリビューションでは、 これらのパッケージはすぐにインストールできます。 Mac OS X では、Python はすでにインストールされていますが、 OS X 版の Pygame を インストールする必要があります。
また、VNC サーバが最低 1種類必要になります:
vnc2swf.py
プログラムは
VNC のセッションを記録し、これを SWF または VNCLog 形式で記録します。
これは VNC クライアントであり、VNC サーバと直接通信します。
ユーザはこのプログラムに先立って VNCサーバを開始させておく必要があります。
vnc2swf.py
には 2つのモードがあります:
GUI (グラフィカル・インターフェイス) モードと
CLI (コマンドライン・インターフェイス) モードです。
GUI モードの場合、 "Start" ボタンを押すと録画が始まります。
その後 "File" メニューから "Save as..." を選び録画したムービーを保存します。
CLI モードの場合、ユーザは SWFムービーを保存するファイル名を
コマンドラインから指定し、録画はすぐに始まります。
どちらの場合も、ユーザはサーバが要求した場合 (パスワードファイルを指定していない限り)
VNCパスワードの入力が求められます。CLIモードでは、
録画を中止するにはControl-C を押してください。この後あらかじめ指定されたファイル名で
.swf
と .html
の 2つのファイルが生成されます。
この .html
には適切な HTMLタグと、シークバー機能を提供する javascript コードが
含まれています。
vnc2swf.py
では画像をエンコードするために 3つの方式が選べます:
"swf5
", "swf7
" および "vnc
" です。
最初の swf5
エンコーディング (デフォルト) では、そこそこの大きさのムービーを生成します。
2番目の swf7
エンコーディングは、より小さな SWF ムービーが生成できますが、
vnc2swf.py
の中ではこの方式はおすすめできません。なぜなら、
1) このエンコーディングは Flash Player version 7以降でしかサポートされていない。
また、2) swf7
エンコーディングのムービー生成は遅いので、
フレーム落ちすることがある、といった理由からです。実際には、ムービーを録画したあとに
edit.py
コマンドを使って swf5
方式のムービーを swf7
方式の
ムービーに変換できるので、どのみち録画時にはこの方法は必要ありません。
3番目のエンコーディング方法は vnc
です。
これは vncrec と互換である
.vnc
ファイル (VNCLogファイル) を生成します。このファイル自体は
SWFムービーではありませんが、生成する速度はいちばん速く、
edit.py
コマンドによって SWFムービーに変換することができます。
NOTE:
Cバージョンの vnc2swf とは異なり、vnc2swf.py
では
実際のクライアント画面を表示しません。VNC サーバのデスクトップを
制御したい場合は、vncviewer のようなものを個別に起動する必要があります。
$ vnc2swf.py [-o ファイル名] [オプション] [ホスト[:display] [ポート番号]]
$ vnc2swf.py -n -o ファイル名 [オプション] [ホスト[:display] [ポート番号]]
(仮想スクリーンを録画する) $ vncserver -geometry 640x480 ... $ vnc2swf.py -o out.swf localhost:1 (現在の X11画面を録画する) $ x11vnc -localhost -viewonly -wait 10 -defer 10 & ... $ vnc2swf.py -o out.swf -S "arecord -r 22050 voice.wav" localhost:0
x11vnc を使っている場合は recordwin の説明もごらんください。 これはある特定のウィンドウだけを録画する簡素なスクリプトです。
edit.py
でフレームを間引くか、
画像を縮小してみてください。
swf5
または swf7
ファイルには制限があって、
最大16000フレーム (約22分) までの動画にしか使えません。
x11vnc
を使っている場合は -wait 10 -defer 10
を追加します。
flv
動画では、出力ファイル名として '-
' を指定することにより
動画ストリームを標準出力に送ることができます。(なんに使うんだ?)
-n
-o 生成ファイル名
.swf
" または ".vnc
" のどちらかである必要があります。
それ以外の拡張子の場合、ユーザはムービーのエンコーディング方式を -t
オプション (下記参照)
で指定する必要があります。
-C クリッピング
widthxheight+left+top
" のような形式で指定します
(e.g. "400x300+120+0
")。
他の X11アプリケーションと違い、すべての値を指定する必要があります。負の値はサポートされていません。
-r フレームレート
-t エンコーディング
swf5
" または "swf7
" または "vnc
")。
省略された場合、エンコーディング方式は生成するファイル名から自動的に決定されます
(*.swf
= swf5, *.vnc
= vnc)。
-N
-P パスワードファイル
vncpasswd
を使って作ることができます。
ユーザはローカルな vnc サーバのパスワードを含んでいる
~/.vnc/passwd
を直接指定することもできます。
-e vncエンコーディング
-S サブプロセス
(Un*x でのみサポート、要Python 2.4 以上)
-d
edit.py
プログラムは、vnc2swf.py
で
生成したムービーファイル (ひとつまたは複数) を編集したり再構築するためのツールです。
このプログラムはまた .vnc
ファイルを .swf
ムービーに変換したり、
エンコーディング方式を変えたり (swf5->swf7)、MP3音声ファイルを画像にのせたり、
ムービーからイメージを抽出したり、ムービーの画像を間引く/縮小/クリップする、などの操作ができます。
現在のところ、edit.py
がサポートするのはコマンドラインのみです。
ユーザはひとつ以上の入力ファイル名と、ひとつの出力ファイル名を指定する必要があります。
入力されるムービーは指定された順に連結され、その後要求された操作が実行されます。
$ edit.py -o 出力ファイル.swf [オプション] 入力ファイル ...
(圧縮つき swf7 形式で、.vnc を .swf に変換する) $ edit.py -o out.swf -c -t swf7 input.vnc (mp3ファイルを .swf に添加する) $ edit.py -o out.swf -a voice.mp3 in.swf (2つのムービーを連結し、一部のフレームをとりだして別のムービーをつくる) $ edit.py -o out.swf -f 100-200,350- movie1.swf movie2.swf (ムービーの左上部分をとりだし、それを半分のサイズに縮小したムービーをつくる) $ edit.py -o small.swf -C 320x240+0+0 -s 0.5 in.swf (.swf 形式を MPEG に変換する) $ edit.py -o out.mpg input.swf (.swf 形式を FLV に変換する) $ edit.py -o out.flv input.swf
-o 出力ファイル
-c
swf5
または swf7
形式のエンコーディングで使えますが、
これは swf7
エンコーディングに適用されたときにもっとも効率的に圧縮されます。
-t エンコーディング
エンコーディング | 拡張子 | 説明 |
---|---|---|
swf5 | .swf | SWF ムービー (デフォルト) |
swf7 | SWFムービー (video エンコーディングをサポートしているプレイヤー向け) | |
flv | .flv | FLV ムービー |
mpeg | .mpg | MPEG ムービー (要PyMedia) |
bmp | .bmp | BMP 画像の列 |
png | .png | PNG 画像の列 |
注意: swf7
方式は Flash Player version 7 以上でのみサポートされています。
-f フレーム
or
-F フレーム
-
(ハイフン) を使います。
たとえば、10,200,300-400
はフレーム番号 10 と 200 に加えて、
フレーム番号 300 から 400 までのすべてのフレームを指定します。
開始フレーム番号あるいは終了フレーム番号は省略することができます
(e.g. -100
or 300-
)。この場合、最初のフレーム (あるいは最後のフレーム) が
もう一方の終端として使用されます。
-F
オプションと -f
オプションの違いは、-F
が
音声を切り取らないのに対して、 -f
は音声も分断することです。
音声ファイルをムービーにのせたい場合、もし -f
オプションと
-a
オプションを同時に使うと、これは与えられた mp3 ファイルを
選ばれたフレームに応じて自動的に切り分けます。しかし連続した音 (音楽など) をムービーに
載せたいときは、これは意図した結果とは違うことがあります。このような場合は -f
のかわりに
-F
を使ってください。
-a mp3ファイル
-s 比率
-C クリッピング
widthxheight+left+top
" のようにして指定します
(例: "400x300+120+0
")。
-K キーフレーム間隔
-K 500
)。
-r フレームレート
edit.py
は
元のムービーのフレームレートを使用します。
-R フレーム再サンプル頻度
-S mp3フレームスキップ
s
をつけた場合 (1.0s
など)、これは
フレーム数ではなく秒数を表します。
このオプションは録画された画像と音声の間にタイムラグがあるときに有用です。
-B ブロックサイズ
swf7
およびflv
エンコーディング方式における
ブロックサイズを指定します (default=32)。この値は 16の倍数である必要があります。
-b
-l
-d
play.py
は、.swf
ファイルまたは .vnc
ファイルのための
単純なプレイヤーです。これは生成されたムービーのフレーム番号を見るのに有用です。
しかし、まだこのバージョンでは動きがぎこちないうえに、音声の出力ができません。
またこれは vnc2swfが生成したムービーだけを扱っており、一般的な SWF プレイヤーとしては使えません。
以下のようなキー操作を受け付けます:
q
" キーまたは Escキー: 終了する。
s
": スナップショットを取る。
このときの画像は "inputfile-frameno.bmp
"
のような名前で保存されます。
$ play.py [オプション] ムービーファイル ...
-r フレームレート
-s 比率
-C クリッピング
widthxheight+left+top
" のようにして指定します
(例: "400x300+120+0
").
-d
vnc2swf.py
または edit.py
ファイルが生成した HTMLファイルを使ってください。
edit.py
の -a
オプションをつかってムービーに添加します。
edit.py
の -K
オプションを使います。
ふつう、500フレームに 1枚 (-K 500
) ほどキーフレームを入れるとそこそこましな結果になるようです。
このプログラムの動きを学習あるいは拡張したい方のために、 pyvnc2swf のオブジェクト間のデータの流れを説明する簡単な図 を描きました。
<yusuke at cs dot nyu dot edu>