2006年05月15日

Keylightでクロマキー

SONYのHDVカム、HDR-HC3をお借りしたので、クロマキー撮影を試す。

HDR-HC3 B デジタルHDビデオカメラレコーダー ブラックHDR-HC3 B デジタルHDビデオカメラレコーダー ブラック


Amazonで詳しく見る
by G-Tools


部屋の中に、布屋さんで買ってきた適当なグリーンの布を張る。
窓の開口部が大きい部屋とはいえ、外は若干の曇り。
本当なら照明をきちんと焚くんだろうけど、あいにく手元に無かったので、そのまま強行。

撮影した素材は、Final Cut Proで取り込んで、取り込んだファイルをメディアマネージャーで、使いやすい場所に移動しておく。

Keylightでキーイング

クロマキーは、After Effects 6.0 Professionalにバンドルされていた、Keylightで行う。

今回は、最終的にプログレッシブのムービーを作成する。
撮影素材を読み込んで、「フッテージを変換」→「メイン...」にて、「フィールドを分割」で「奇数フィールドから」を選択。
あれ? 「偶数フィールドから」を選ぶべきか? まあいいや。

背景となる素材を下に引いて、その上のレイヤーに今回の撮影素材を配置。
で、「エフェクト」→「Keying」から、「Keylight」を適用。

Screen Colour

まずはこの項目から。
スポイトを選択して、背景となる部分(今回はグリーン)を選択する。
これだけで大体のところは抜け、初めて使ったときはびっくり仰天。

View

Viewの設定から「Status」を選ぶと、画面が、マットの作成具合をあらわす白黒表示に切り替わる。
作業中はこの「Status」と「Final Result」を、しょっちゅう往復することに。
最初にきれいに抜けたように見えても、この画面で確認すると、背景部分に結構グレーが残ってた。
次のScreen Strengthで調整する。

Screen Strength

Status Viewで背景部分が真っ黒になるよう、この項目の値を増やして調整。
ただし、やり過ぎないよう注意。
エッジ部分のグレーは残さないと、最終的にしっとりしない。

今回、グリーンスクリーンがたるんでいて、影になった部分がうまく抜けない。
泣く泣くマスクをアニメーションさせて、この部分は手作業で切ることに(涙

Despill Bias

エッジ部分に背景スクリーンの色(今回はグリーン)が乗ってしまう場合は、この値を増やして調整。
逆にエッジが細ってしまう場合は、減らして調整。

今回は、デフォルトの0のまま。

Alpha Bias

抜けて欲しくない被写体の中身まで透けてしまう場合、これで調整。
デフォルトでこの項目はDespill Biasと連動するようになっているので、「Lock Biases Together」のチェックを外し、マイナス方向に微調整。
あんまりやりすぎると、エッジの情報が損なわれてしまう。

今回、撮影がいいかげんなのでこれだけでは調整しきれず、次のInside Maskを頼る。

Inside Mask

被写体が透けてしまうところがあるので、Inside Maskを使ってみることに。
レイヤー上で、抜けて欲しくないところにマスクを描いて、このマスクのモードを「なし」にする。
KeylightのInside Maskの選択項目から、先ほどのマスクを選択。
こうすると、マスクの部分が抜けなくなる。

Inside Maskによって影響を受けた部分は、Status View上において青色で表示される。

Inside Maskがエッジを跨いだりしないよう、慎重にアニメーション(また涙

レンダリング

色の調整はFinal Cut Proのほうでしたいので、ここで一旦出力。

背景となるレイヤーを非表示にし、「コンポジション」→「レンダーキューに追加」。

「出力モジュール」から「ロスレス圧縮(アルファ付き)」を選択し、さらにその項目をクリック。
「カラー」の部分で「ストレート(マットなし)」を選択し、レンダリング。

カラコレ

レンダリングしたファイルをFinal Cut Pro上に読み込んで、背景素材の上に重ね、カラコレ。
うーん、一応出来た。

教訓:
素材が一番大事。


posted by Wait-and-See at 20:11 | Comment(0) | TrackBack(0) | 映像/グラフィック

2006年05月11日

PEAR::DB - mysql_insert_id()の代わり

最後に挿入したレコードの、auto_incrementされた値を取得するために、mysql_insert_id()関数に代わるメソッドがPEAR::DBにあるだろうと探すも、見当たらない。

ネットを検索すると、同じ問題の投稿が見つかる。

https://www.drive.ne.jp/iMA/showmdir.pl?PHP-users=2003-05&num=15154&link=BAE1B97F%2e4D59%25koga%2dy%40mcp%2dnet%2ecom

DB::nextId()関数で値を決めてから、INSERTするのがPEAR流?
うーん・・・、そのレベルで変わってしまうのはちょっときびしい(頭の切り替えが)。

あっさり、

SELECT LAST_INSERT_ID()


を実行してしまう。


posted by Wait-and-See at 21:51 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年05月10日

PEAR::DB - プレイスホルダ文字

以前書いたコードを、PEAR::DBを使用したコードに移植。

プレイスホルダなる機能があることを知り、せっかくなので、これまでsprintf()とmysql_real_escape_string()でやっていた部分を、置き換えた。
の・だ・が・・・

動かない!

うーん・・・何が悪いのか、わからない。

そこで、改めて説明をよく読んでいると・・・

あれ?
プレイスホルダ文字って、「?」マークだけじゃなくって、「!」マークとか「&」マークとかもあるの!?

クエリーの中のWHERE句の中で、不等号として「!=」を使っていて、これの「!」の部分がプレイスホルダとして認識されてたみたい。
「<>」に置き換えて解決。

うーん、不覚。


posted by Wait-and-See at 20:50 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年05月09日

アップロード後のパーミッション設定

前回の『ファイルアップロード』の続き。

アップロード後のファイルのオーナーが「wwwrun:www」で、パーミッションが「600」であることに気づく。

全ての操作をWEB経由で行うのであれば良いが、例えばアップロードされたファイルをFTP経由でアクセスしたい場合などに、これだと都合が悪い。
ので、move_uploaded_file()関数の直後に、chmod()を実行することに。

chmod('/srv/www/upload/' . $_FILES['file']['name'], 0666);


chmod()関数の第2引数は8進数で指定、つまり、頭に必ずゼロを付けて指定しないと、意図したとおりにならない。

恐らく、PHPユーザーの間では、常識となっている注意点なんだろうなぁ。
あぶないあぶない。


posted by Wait-and-See at 20:23 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年05月08日

ファイルアップロード

PHPでの、ファイルアップロードをテスト。

まずは、アップロードされたファイルの保管場所の準備。
今回は、WEBからは直接アクセスできないディレクトリに保存してみる。

# mkdir /srv/www/upload
# chown wwwrun /wrv/www/upload


アップロード用のフォームを作成。
enctypeは「multipart/form-data」に。
また、hidden属性で「MAX_FILE_SIZE」を埋めておくと、サイズ制限をバイト単位でかけられるのだとか。

<form enctype="multipart/form-data" method="post" action="upload.php">
<input type="hidden" name="MAX_FILE_SIZE" value="1024">
<input type="file" name="file">
<input type="submit" value="アップロード">
</form>


大きなサイズのアップロードを受け入れる場合、受け側のPHPでタイムアウト値を大きめにとっておく。

ini_set('max_execution_time', '300');


受け側のPHPでは、次の変数を受け取る。

$_FILES['file']['name']
 クライアント側のオリジナルのファイル名
$_FILES['file']['type']
 ファイルのMIMEタイプ
$_FILES['file']['tmp_name']
 テンポラリディレクトリ上にアップロードされたファイルの名前
$_FILES['file']['size']
 ファイルサイズ
$_FILES['file']['error']
 エラー

テンポラリディレクトリ上にアップロードされたファイルは、そのままではPHP実行終了時に削除されてしまうため、保存用のディレクトリに移動する。

move_uploaded_file($_FILES['file']['tmp_name'], '/srv/www/upload/' . $_FILES['file']['name']);


クライアント側の「MAX_FILE_SIZE」でのサイズ制限とは別に、サーバ側では/etc/php.iniで、サイズ制限が行われる。

upload_max_filesize = 2M


さらに、8MB以上のアップロードを許す場合、次の設定の変更も必要。

post_max_size = 8M



posted by Wait-and-See at 23:40 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年05月01日

PEAR::HTTP_Download

PEAR::HTTP_Downloadを使用して、zipファイルをダウンロードさせる。

contenttypeの記述を確認するために、参考サイトを探す。

HTTP_Downloadでファイルをクライアントへダウンロード - bnote

こちらのページを参考に、というか、このページが見つかった時点で、ほぼそのまんまだな、こりゃ。

<?php

require_once('HTTP/Download.php');

$filename = 'test.zip';

$params = array(
    'file'               => '/srv/www/download/' . $filename,
    'contenttype'        => 'application/zip',
    'contentdisposition' => array(HTTP_DOWNLOAD_ATTACHMENT, $filename)
);

HTTP_Download::staticSend($params);

?>



posted by Wait-and-See at 21:20 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年04月28日

TortoiseSVN

あるプロジェクトで、ファイルのバージョン管理にSubversionを使うことになる。
そこで、SubversionのWindows用クライアントとして、TortoiseSVNをインストールするように、との指示。

であれば、まずは、TortoiseSVNの読み方を調べなければならない

でなければ、いつまで経っても

「例の、ほら、あの、トートイス?ごにょごにょ・・・

と言わなければならない。

はてな - TortoiseSVNとは

幸い、上のサイトで読み方は、「とーたすえすぶいえぬ」であることが判明。
ていうか、トータスなら聞いたことがある。普通の英単語だったのね。
ひょんなことから、自分の無学を露呈する。

下記のサイトを参考に、インストール。

TortoiseSVNのインストールと設定

まずは、下記のパッケージをインストール。

TortoiseSVN-1.3.3.6219-svn-1.3.1.msi


再起動後、日本語パッケージもインストール。

LanguagePack_1.3.3_ja.exe


日本語化

メニューの表示などを、日本語化。
まず、デスクトップなどを右クリックし、[TortoiseSVN]→[Settings]。
[Language]のところで「日本語」を選択し、[OK]。

リポジトリブラウザのテスト

今回はすでに、リポジトリが用意されているので、それに接続してみる。
(とりあえず)デスクトップを右クリックして[TortoiseSVN]→[リポジトリブラウザ]。
URL欄に、教わったリポジトリへのURLを入力する。
おお、なんかそれらしいのが見えてる。
どうやら成功。

続く、下記のページを参考に、実際に使ってみる。

TortoiseSVNの使い方

チェックアウト

まずはチェックアウトを行い、ファイル一式をローカルディスクに取得する。

ローカルディスク上に、プロジェクト用のフォルダを作成。
そのフォルダを右クリックし、[SVN チェックアウト...]。
[リポジトリのURL]欄には、先ほどのリポジトリブラウザで、たまたま最後に選択したファイルが表示されている。右側の[...]ボタンで、リポジトリの中の任意のフォルダを選択できるのか。
目的のフォルダを選択し、[OK]。
進捗状況がウィンドウ内で表示され、無事終了。

なるほど、各ファイルの状態が、エクスプローラ内のアイコンで確認できるのか。
なかなかいい感じ。

コミット

ファイルを修正したあとは、コミットする、と。

おお! ファイルを変更すると、そのファイルを含むフォルダまでさかのぼって、びっくりマークが付くのか。 いい感じ。

コミットは、変更したファイルを直接右クリックしても、それを含むフォルダを右クリックしてもいいのだな。
フォルダをクリックした場合、新規に作成されたファイルも自動認識する、と。ふむふむ。

フォルダを右クリックして、[SVN コミット...]→[OK]。

更新

修正の衝突が発生した場合、問題となるファイルに「更新」を実行して、ローカルファイル上でマージして解決するのか。なるほど。

作業に取り掛かる前には、まずは必ず「更新」を実行した方が良さそうだな。

大体分かった。
なかなか良さそう。


posted by Wait-and-See at 23:37 | Comment(0) | TrackBack(1) | Windows

2006年04月27日

FLA魂

FLA魂

CATMANの作者さんのブログ。
確か、Flashでのビデオ・ストリーミングについて調べていて、偶然たどり着いた。

おお、これは面白そうなブログ。
じっくりと全部の記事を読みたいなぁ、と思っていたら。
先日のエントリーで、6月末でブログにキリをつけるのだとか。
うーん、残念!

CATMAN、かっこよかったなぁ。
posted by Wait-and-See at 23:35 | Comment(0) | TrackBack(0) | 日記

2006年04月26日

PEARパッケージのインストール

SUSE LINUX 10.0。

プロジェクトでPEARライブラリを使用することになり、手元のテストサーバ上にインストール。

はてな - PEARとは

まずは上記サイトで、読み方が「ぴあー」ではなく、「ぺあー」だと知る。

とりあえず、PEAR::Logを使用しているようなので、このパッケージのインストールを試みる。

# pear install Log


しかし、ならやら依存関係がどうのこうの、というか、sqliteが必要みたいなことを言われる。

うーん、、使っているPHPは4.3なのに、SQLiteが要るの?

とりあえず、現在入っているパッケージを一覧表示してみる。

# pear list


すると、何もパッケージはインストールされてないよ、との表示。
いくらなんでも、一番基本となるPEARが入ってないのはおかしいのでは?という話になり、PEAR自体のインストールを指定すると・・・

# pear install PEAR


今度は、PEARの1.3.3以上が必要とか言われる。
へ?
だからそのPEARが無いって言うから、インストールしようとしているのに!

この時点で半泣きになり、すがる様な思いでネットを検索すると、

PHP/基礎 - Joo's Hide

こちらのページを発見。
なるほど。まずは1.3系をインストールすると、うまくいくということかな?
ついでにこちらのページで、「-o」オプションを指定すると、依存関係が一度に解決されることを知る。便利!

# pear install -o http://pear.php.net/get/PEAR-1.3.6.tgz


インストール成功!
この後、アップグレードをかけると・・・

# pear upgrade PEAR


無事、アップグレードも成功して、最新の1.4.9となる。

気をよくして、再びPEAR::Logのインストール。

# pear install -o Log


インストールは成功したものの、なにやら「チャンネルアップデートを実行しろ」みたいな警告が表示された。ので、やってみる。

# pear channel-update pear.php.net


よく分からないけど、成功。
また、先ほどのPEAR::Logのインストール時に表示された内容を見ると、必ずしもsqliteは必要なくて、代わりにPEAR::DBでも良い、という風に見える。
ので、インストール。

# pear install DB


これで動くように・・・なったみたい。


posted by Wait-and-See at 22:14 | Comment(0) | TrackBack(0) | PHP/MySQL

2006年04月25日

IPアドレスの変更

Windows Server。

サーバーを移動することになり、それに伴って、IPアドレスが変更されることになる。
さらに、必要な設定の変更は、リモートから行うことになる。

大まかな作業の流れは、次のような感じ。

1) リモートからIPアドレス変更(追加)などの設定をし、シャットダウン。

2) 現地のスタッフが、サーバーを移動。配線。電源ON。

3) 必要に応じて、リモートから後処理、設定。

予め、変更後のIPアドレスを追加しておけば、つなぎ直した時にそのまま新しいIPで通信できるかなと安易な発想の元、リモートから接続し、IPアドレスを追加し、さらに新しいゲートウェイアドレスを追加してみると・・・

そのサーバーに、2度と外部から繋がらない

うわやべやっちまったどうしよう。
新しく追加したほうのゲートウェイアドレスが使われてしまっているのか?

激しくうろたえながら、そうだ!と思いついたのは、同じサブネット内にある別のマシンにリモート接続し、そのマシンを踏み台に通信できなくなったサーバーに繋げてみると・・・無事接続。
新しく追加したゲートウェイアドレスを外してみると、そのサーバーも復旧した。

うーん・・・アクセス元のIPに応じて、適切なゲートウェイが自動で選ばれるわけではないのか。
ていうかそういえば、昔、同じ事でハマった記憶があるな(がっくり)。

というわけで、これをスマートに解決できるよう、自分が成長するまで待ってもらう時間はない。
今回の方法を応用して、サーバー移動直前に、

1) 1台のマシンにリモート接続し、それを踏み台にして他のマシンに接続。新しいIPアドレスを追加し、ゲートウェイアドレスを書き換え、シャットダウン。

2) 踏み台に使用したマシンをシャットダウン。

で、サーバーを移動してもらうことに。
踏み台に使用したマシンは、移動後外部から接続できないが、

3) 移動後、別のマシンを踏み台にし、最初に踏み台に使ったマシンのゲートウェイを書き換えて、復旧。

うーん、なんとか無事終了。


posted by Wait-and-See at 22:48 | Comment(0) | TrackBack(0) | Windows


広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。