ようこそゲストさん

色々日記(ざ・めも)

メッセージ欄

2005年5月の日記

一覧で表示する

2005/05/25(水) Ruby execで*.rbを呼ぶとき

2005/05/25 5:00 PC(プログラミング)
execで*.rbのファイルが上手く動かなかった問題。
exec('test.rb')
としても

`exec': Exec format error

となってうまくいかない。

多分Rubyのexecは(たとえrubyのファイルであっても)関連づけを解決しないのだろう。

ということで、
exec('ruby test.rb')
が正解。

2005/05/25(水) ラジオを壊した

2005/05/24 26:00 家電
ものはPanasonic RF-ND250。

聞けなくなったとかいうことではなく、解体したときにロック用のスライドスイッチがもげてしまった。

何でこんなことをメモするかというと、どうもこの機種気に入らない点が多いので次回買い換えの時に気をつけようということ。

前に使っていたのが同じくPanasonicだったのだが、そちらは充分満足できる出来だった。

ところがこいつはそれに比べて、
・悪条件下でのノイズが酷い
・ボリューム変更でノイズだらけ
・中身がちゃちい

と所謂下位互換状態。

特にボリューム変更ノイズは以前の機種でもあったが、これは買った当初から酷く低ボリューム辺りで音量は定まらないわノイズが乗るわで使えない。余程酷い半固抵抗器使ってるのだろうか。前機種では、解体+掃除で若干状況が改善したので今回開けたところスライドスイッチをもいでしまったわけ。

ちゃちいというのは解体時にロックスライドつぶしてしまったから言っているので筋違いも良いところだが、これが1ミリ厚もない心細いプラで正直解体側の責任かどうかちょっと疑問で。組み上げるには問題ないだろうが……

いや当たり前の話だけど、解体を考えてない機械って修理を前提にしてないってことで作る側としてはアウトだと思う。

Pana云々ではなく次回買うときはデジタルボリュームにする。ラジオはSonyが評判良いようだけど…… やっぱSonyはちょと怖い。

1: ラジオ直した君 『当方もRF−ND250を2005年から使い始め、早10年。昨年暮れに、とうとうロック解除ができなくなりました。それ以前から不調が...』 (2017/02/07 18:21)

2005/05/22(日) 解体できない本のデジタルデータ化

2005/05/22 22:00 PC(全般)
もし諸事情により(借り物だとか)解体できないB5サイズの本があったらどうやってデジタルデータ化をするか。

B5の場合、
A4スキャナだと2回取り込みの上に位置合わせの問題が深刻。
A3スキャナを買うのもアリだが、100kコース。

そこでシンプルに、コピー機にかけた後、裁断してドキュメントスキャナに突っ込むのが正解かもしれない。

今回の想定は60pの本(てかパンフだけど)が30冊というアレですが、

お値段)
\300 * 30 = \9,000
30枚 * 30 * 6s = 1.5hour

ドキュメントスキャナに突っ込む時間や、紙を半分に切る作業はほとんど時間を考えなくて良いので、コピーさえ2〜3人で手分けすれば半日もかからないで完了する計算だ。

これだな。

2005/05/22(日) MPC でのコマ戻し

2005/05/22 21:00 PC(全般)
Media Player Classic6.4.8.3でDivXの映像なんかをコマ戻ししようとするとMPCが落ちていた問題。

出力のDirectShow Videoを

 Overlay Mixer

から

 System Default

に変えたところ、DivXやXviDをコマ戻ししたときにMPCが落ちることが無くなった。

原因も何で解決したかも不明。

またMPCは標準搭載(?)のフィルタでデインターレース処理などをしてくれるが、これだとコマ送りは出来てもコマ戻しが出来ない。

コマ戻しをしたいなら、フィルタから

 MEPG PS/TS/PVA

のチェックを外す。インターレースはバリバリでるがコマ戻しは出来るようになる。インタレに関しては新たに使われるようになったフィルタの設定で、いじれるかもしれない。

ただどちらにしろ我が家のPCでは重すぎでコマ戻しはまともに動かないわけですが。

いい加減、DirectShowだとかMetrix値だとかフィルタだとかVFWだとかffdshowだとかAVISynthだとかきっちり整理しないといかんですね。

2005/05/22(日) XviDとDivXの傾向

2005/05/22 20:00 PC(全般)
前の記事を書く上で気づいたことをいくつか。

まずバージョンを明記しておいた方が良いな。
DivX 5.2.1
XviD 1.1.0-beta2の( http://uk.geocities.com/xvid2ch/)の奴を使用(koepi版、nic版はともにファイルサイズが爆発して上手く動かず)

・DivXの使い方
設定窓出して、
DivX R Certified Profileの選択->DivXR Certifiedのチェックを外す->エンコードモード=質を基本とするワンパス

に設定。Certifiedの設定を外さないとQB=Quality Baseにならない(CBRになる)。最初QBに出来ないのかと思った……

以下、

ビットレート:4=90%
エンコードパフォーマンス:標準
心理視覚モデル:チェックして高速に
インターレーシング:プログレッシブソース(aviutlでインタレ解除する)
量子化タイプ:H.263

あとは弄っていないが、大きな間違いはないと思う。それとインストール時に日本語にしないと環境で設定窓のサイズがおかしくなることあり。

・XviDの使い方
Profile:AS@L5
Quantization type:H.263
Global Motion Compensation:checked
B-VOPs:off
Target quantizer:4.00
Motion Search precision:Medium
VHQ mode:Mode Decition
Trellis quantization:checked

書いてないチェックは外し、数字はデフォルトのまま。

さて、大まかな傾向から言うとDivXは連続した画面間で見た目が良くなるような絵作りで、XviDは1画面が綺麗になるような処理がされているように思える。

ある1フレームを見比べたときにはDivXよりXviDのほうがきれいで、DivXは輪郭部分に多くモスキート状のノイズが出る。ところが連続して何枚かの比較を行うと、XviDはシーンチェンジで大きめのブロックノイズが出ることがある。

動画になると初見ではDivXよりXviDが綺麗に見えるが、何度も見返すとDivXのモスキートノイズには目が慣れてしまうのに対して、XviDのブロックノイズは目につくようになっていく。多分、アナログの画質に近似することがDivXのロジックなのだろう。ここらへんDivXがどんなソースでもそこそこ無難にこなすといわれる所以だろうか。職人軍団が結局「DivXでいいや」になるのもそんな理由かもしれない。

おそらくソースも考えた上でXviDを細かく設定した方が綺麗だとは思うが、失敗してちょっとしたブロックノイズにストレスをためるより万人から文句が出ないような映像の方が安心は出来るかもしれない。でも良く考えてみればなんかの閾値で変わる気がするな。シーンチェンジの設定ってこれに影響するのだろうか。

圧縮速度はデフォルトではXviDの方が若干早いのだが、この設定ではXviDの方が多分時間がかかる。特にGlobal Motion Compensationは物体が画面に入ってくるごとに動き解析しているようなので、エンコード時間も読めなくなる(が、スクロールが多い映像には相当効く)し結構時間がかかったようだ。

まあこれでもうしばらくエンコードする機会もなくなりそうだ……
DivX6も控えているし。

[参考]
XviDの使い方はここが詳しい
http://www.losttechnology.jp/Movie/xvid.html

2005/05/22(日) アナログビデオのデジタル化を考えてみた

2005/05/21 26:00 PC(全般)
VHSのテープがほぼ100本程度あって、こいつらがカビたり劣化したりで結構危ない状況になっている。今すぐというわけではないが、体制を整えて早いうちにデジタル化したい。ということでその算段を練ってみる。

まず、録画形式はMPEG2で確定。

理由としては昨今のDVDメディアの価格下落(現在\75/枚)により、メディア代の心配が少なくなったことと、計算時間を無視してもMPEG4形式へのエンコードがあまり上手くいかなさそうだという結論に達したため。

これは、デインターレースが問題になるためだ。基本的にほとんどのMPEG4はインターレースを乗せたままでエンコードするようには出来ていない(可能ではあるが)。そこで前処理としてインターレースを解除することになるが、このビデオ群のほとんどが実写やアニメが混じっており、定性的な24fps化30fps化では上手くいかない。唯一2重化はそこそこの出来になるが、結局MPEG2は再生側でインターレースを解除する仕組みが整っておりそれには敵わなさそうだ。

ということでXviDかDivXに傾いていたのが一気にMPEG2に戻ってきた。とりあえずデジタルにしておいて、将来エンコーダーやコーデックがもっと強力になってきた時に処理すればいい話だ。数年間で状況が大きく変わる世界なので、今後2〜3年少なくとも劣化の恐怖から解放されればそれでよい。

さて、MPEG2にする場合のビットレートと形式をどうするかという問題がある。だいたい、アナログの汚いソースを元にすると、変な話だがデジタル側のビットレートは大きくしないと破綻しやすくなる。これはデジタル処理にとってアナログノイズが情報量として大きいためで、VHS3倍だからといってデジタル側の3倍相当で録画すると酷いことになる。

現在PCで録画しているのがPC-MV5DX/PCI(最近壊れたけど)の6Mbps/CBRでこの画質には基本的に満足。とはいえソースがそこそこ綺麗なので、これは何度かVHS3倍かなんかでソースを揃えてテストが必要になる。

平均4Mbpsだと4.3GBにテープの余裕分含む2時間超(4.3GB/4Mbps = 2.4hour)が入るのでちょうど良いところ。しかし、4Mbps/CBRだと破綻の不安もある。ので、

4Mbps/CBR
4Mbps(平均)-6Mbps(最高)/VBR
6Mbps/CBR

のそれぞれでテストが必要か。

仮にVHS 100本全てが120min/3倍だとすると、

600hour * 4Mbps = 1.02TB

と、ぴたり1テラバイト。

1.02TB / 4.3GB = 238.1(枚)
238 * \75 = \17,850

だが、うち半分程度は標準だと思われるので1万円弱程度だろう。つくづくメディアは安くなったものだ。

600hourはほぼ1月かかる計算になる。ハードウェアエンコ->DVDに焼くだけとはいえ、専用マシンがあった方が良いかもしれない。

これで頭の整理は終了。

2005/05/09(月) 華式バグも一個追加

2005/05/09 19:00 PC(全般)
タイトルに"->"と書くと二重化する。

気持ちはわかる……

2005/05/09(月) pochy → thunderbirdメール移行

2005/05/09 19:00 PC(全般)
結局一番簡単なのはOutlook Express(OE)を経由する方法らしい。

ファイラーでpochyの受信メールを全部選択して、OEに投げ込む。pochyの受信ファイルは.emlがついていないが、eml形式そのものなのでOEでちゃんと読んでくれるようだ。

そのあとthunderbirdでインポート。

確かに簡単だった。

とはいえ、.emlのインポートを拡張に頼ってるのはどうかと思うぞ、thunderbird。

2005/05/03(火) オーサリングあれこれ

2005/05/02 25:00 PC(全般)
MovieWriter4 体験版
TMPGEnc Editor 体験版
TMPGEnc Author 1.5体験版
TMPGEnc Author 2体験版
DVD Shrink

を使って録画した映画(2時間-5GB超)のオーサリングを1回やってみた。

まず総括! なんかおかしい!
色々なやり方が考えられるのだが、HDDの残り容量が足りないのか、マシンがおかしいのかプログラムがおかしいのかあっちこっちのルートが詰まる。最速、最簡単なルートを探したかったのだが、通るルートを探す羽目になった

やることは3つ。
・オーサリングそのもの
・先頭と尾っぽカット
・トランスエンコード(入りきらないので)

成功ルートは、
MovieWriter4(30min) -> DVD Shrink(25min)

オーサリング作業だけならMovieWriterが非常に早く、10minくらいで終わる。

こっから先は完了しなかったので見込み時間。

[MovieWriter4]
全部一遍に出来る。最も早そうなのだが途中で落ちる。25min?

[TMPGEnc Editor]
カットだけ。18min?

[TMPGEnc Author1.5]
カット(GOP)とオーサリング。20min? 不正なMPEGオーディオストリームです」と出て落ちる。

[TMPGEnc Author2]
全部一遍に出来る。1hour以上? 途中で「不正なサンプルフォーマットです」と出て落ちる。

備考。Author2は確実に1.5より遅い。

なんか色々致命的に過ぎるので、おそらくはうちの環境がおかしいのだと思う。まあ多分もうこれで、1年以上はオーサリングしない予感。少なくとももうちょっとCPUが速くないと……

2005/05/03(火) ハードウェアモニタ

2005/05/02 25:00 PC(Linux)
HDDが熱暴走に類似した症状を呈したので、今後が不安。

ハードウェアモニタを導入し、熱くなってきたらファンの回転を上げるという対処療法スクリプトを使って様子を見てみることにする。

[smartmontools]
すでにsmartsuiteというソフトが入っていて、
#smartctl /dev/hda
なんかでステータスが見られるのだが、温度に関しては87万度とか異常な値が出ている。調べてみると、smartsuiteはすでにメンテナンスされておらず、smartctlはsmartmontoolsというソフトに受け継がれたらしい。

smartmontoolsをインストールする。
smartmontoolsはtesting以降じゃないと無いので、
# apt-get install smartmontools/testing

# smartctl -A /dev/hda |grep -i temp
ほい正常動作。

[lm-sensors]
kernelが2.6系なので、testingじゃないとダメ。
# apt-get install lm-sensors/testing sysvinit/testing coreutils/testing libacl1/testing libattr1/testing
依存で引っかかると、
Sorry, but the following packages have unmet dependencies
などのメッセージが出る。依存関係は1つ1つで見てくのが普通? perlとlibc以外はこのやり方で大騒動は起こらないんだろうけど。今回は手動で全部見た。

さて入ったので、
# sensors-detect
で、使われているチップを見る。Ez!goはWinbondのW83627HFで確定(この後蓋開けて基盤上でも確認)。
モジュールがちゃんとロードされていれば、
# sensors
で見られるはずなのだが……
sensorが見つからないと怒られる。

カーネルフォルダに戻ってあれこれモジュールをコンパイル->ロードしてみる。
i2c-isa, i2c-810, i2c-algobit, i2c-sensor, i2c-chardev, w83781d(W83627HF互換)
とやってみたのだが、センサーはちゃんと見つけているようではあるものの
 "ERROR: Can't get IN0 data!"
 ……
と出てデータが出てこない。

色々調べて、最近のカーネルはW83627HF系の専用ドライバが出ているというのでカーネルアップ決断。
$ cd ~/kernel
$ wget     <a HREF="http://www.asahi-net.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.8.tar.gz" TARGET=_top>http://www.asahi-net.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.8.tar.gz</a>
$ tar -xvzf linux-2.6.11.8.tar.gz
$ cd linux-2.6.11.8
$ make menuconfig
で上記のもの(ただしw83781d->w83627hf)をモジュールではなくカーネル組み込みでごりごり追加し、
# make V=0
# make install
あーもう適当だ。ちょっとテンパってたのでカーネルの保存とか考えてないね。
再起動
# reboot

# sensors
w83627hf-isa-0290
Adapter: ISA adapter
VCore 1:   +1.50 V  (min =  +0.00 V, max =  +0.00 V)
VCore 2:   +1.28 V  (min =  +0.00 V, max =  +0.00 V)
 +3.3V:     +3.28 V  (min =  +3.14 V, max =  +3.47 V)
……
ちゃんと表示されました! やった。

さらに、/sys/devices/platform/i2c-2/2-0290/の中を書き換えることでいくらかのコントロールが出来る。
echo 255 > /sys/devices/platform/i2c-2/2-0290/pwm1
でファンの回転がアップ。echoの値が2で通常。0でストップ。ただし、このマシンはBIOSでファン制御が強いのか20secくらいですぐ元に戻る。

で、やりたいことはHDDの温度が高いときにファンの回転をアップさせることなのでcron用の制御スクリプトを書く。最近はシェルスクリプトで失敗することが多いので、もうRubyでいいや。

/etc/cron.hourly/fancontrol_forHDD.rb
を作成し、
#! /usr/bin/ruby

$MAXTEMP=40

temp = `/usr/sbin/smartctl -A /dev/hda | grep -i temp`
temp = temp[/\s+(\d+)\s+\(Lifetime/, 1]

if $MAXTEMP < temp.to_i then
  (1..600).each {
    `echo 255 > /sys/devices/platform/i2c-2/2-0290/pwm1`
    sleep 1
        }
end
とした。40度を超えていたら10分回転アップを打ち続ける。cron.dの中がなんかちゃんと動いてないんだよな。ということでhourlyにしました。

さてこれでちゃんと動くかテストです。

[本家]
http://www2.lm-sensors.nu/~lm78/