2007-06-30

久しぶりにアニメ

ニコニコでこの動画を見たついでに、うたわれるものを4話まで観たら、なかなか面白かった。

2007-06-27

mencoder doesn't support vp7 well

mencoderでVP7のエンコードをしてみようと思ったのだが、どうもうまくいかない。

まず、vfw2mencでエンコードの設定を保存しようとしたのだが、保存したファイルを、mencoderで読み込ませようとすると失敗する。設定ダイアログを開くことはできるので、手動でエンコードしようとしたが、これもうまくいかない。エンコードはできるのだが、再生できない。不思議に思って出力されたAVIファイルを調べてみると、どうもFourCCの値がおかしい。VP70であるべきなのに、変な値になっている。そもそも、可読域ではない値だ。バイナリエディタでVP70に修正してみると、あっさりと再生できた。

問題は、ffourccオプションが働かないとはどういうことだろう。何のためのfourcc強制オプションだ。

肝心のVP7の画質だが、かなりのっぺりとした結果になる。ウェーブレットでもかけたような感じだ。恐らくアニメなどをエンコードするにはいいと思われる。FLVの動画コーデックの指定には4ビットが使われており、現在6種類のコーデックをサポートしている。つまり、まだ10個分空きがあるのだ。もし、FLVでサポートして欲しいとしたら、何を望むだろう。H264、VP7などだろうか。

 なお、今回思わぬ発見をした。mplayerでVP6を再生するとやけにブロックノイズが目立つが、これはffmpegのVP6の独自実装のデコーダのためである。vp6vfw.dllでデコードするためには、-vc vp6 と指定してやれば良い。

2007-06-25

平生の主張

 タバコという合法ドラッグをやる人間は今すぐ死滅せよ。

2007-06-20

危険なセキュリティソフトウェア

 http://blogs.technet.com/markrussinovich/archive/2007/06/19/1256677.aspx  たとえば、あるコンピュータにインストールされているWindowsに、二つのアカウントが設定されているとする。お互いに、相手から読み書きができないようなパーミッションを付けたファイルを持っている。ところで、一方のアカウントは、かなり頻繁に、あるソフトウェアを実行していると分かっている。もし、もう一方のアカウントから、そのソフトウェア(.exeファイル)を差し替えられれば、自分にとって秘密のファイルの読み書きができてしまう。  まあ、Windowsというのは、たいていの場合、ユーザが管理者であり、それほど問題にはならない。いくらVistaでマルチユーザーを歌おうとも、個人的には、これはそれほど問題にはならないかと思う。問題なのは、このようにセキュリティがずさんなことだ。  というのも、何もこれはファイルに限った話ではないからだ。他のカーネルオブジェクトが危険なのだ。たとえばミューテックスオブジェクトだ。あるセキュリティソフトウェアが、名前付きミューテックスオブジェクトを使ってスレッド、あるいはプロセス間の同期を取っていたとする。このセキュリティソフトウェアを無効にしたい、悪意あるプログラムは、単にそのミューテックスを開いて、自分で所有してしまえばいい。セキュリティソフトウェアは、いつまでたっても解放されないミューテックスオブジェクトを永遠に待ち続けることになるだろう。たったそれだけのことで、セキュリティソフトウェアを無効にできてしまうかもしれない。  また、セキュリティソフトウェアはその性質上、Local Systemで動作することもある。あるセキュリティソフトウェアは、Local Systemで動作させているプロセスと、他のプロセス(恐らくはユーザへのUIなどか)と共有メモリを使って通信している。何と皮肉なことに、この共有メモリのセキュリティが設定されていないのだ。つまりどのプロセスからでも、この共有メモリにアクセスすることができるのだ。マルウェアは、この共有メモリをいじってやれば、Local Systemで動作しているプロセスに何らかのメッセージを送ることができる。ひょっとしたら、自分の望み通りの動作をさせることができるかもしれない。これをセキュリティホールと言わずして何という。皮肉にも、セキュリティソフトウェアと名乗るプログラムに、これが非常に多いらしい。もちろん、他のプログラムも、それほど違いはなく、かなりいい加減なのだが。  Mark氏は、これは9x時代には、シングルユーザであることが当たり前だったから、このようになっているのだと推測している。時代は変わったから、そろそろプログラマも頭を切り替えなければいけないようだ。

2007-06-17

How do i encode ローゼンメイデン風アンパンマン

 恐らくは、いくらかの需要があるだろうと思い、ローゼンメイデン風アンパンマンを、高画質にエンコードする方法について書いてみる。  まず、この元ソースは、Flashだ。とりあえずソースを入手する。http://www.omosiro-flash.com/flash/anpanman.html  さて、これを何とかして、動画にしなければならない。Swf2Aviを使い、動画にする。FPSは12だ。さて、動画を得られたら、次は音声である。幸いにして、このFlashは単一のBGMを流しているだけなので、単にFlashを分解して、音声ファイルを取り出せばよろしい。ADPCMなので、mp3にエンコードする必要がある。  さて、動画のエンコードだ。動画を吟味すると、これは一見簡単そうに見える。なにしろ、ベタ塗りであるし、輪郭もはっきりしている。ところが、普通にエンコードすると、なぜか物凄く画質が悪くなってしまう。ビットレートが、指定したよりも大幅に下がってしまうのだ。これは、動画が12FPSだからだ。動画圧縮というのは、物凄く大雑把に言ってしまえば、キーフレームとその差分であるインターフレームで構成されるので、FPSが低いと、逆に不利になる。とくにVP6の場合、顕著である。従って、フレームレートを上げなければならない。ここは単純に、フレームを重複させるだけでいい。  つまり、mencoderでは、 -vf (いろんなフィルタ),harddup -fps 12 -ofps 24  としてやればいい。このharddupというフィルタは、単純かつ非常に役に立つ。フレームを重複させなければならないとき、nullフレームを挿入するのではなく、単純に前のフレームをそのまま使う。こうすれば、十分なFPSを確保でき、きれいにエンコードできる。

2007-06-11

Human's ear is stupid

 人間の耳というのは、本当にいい加減なものだ。この動画は、超高音質と銘打っているものの、実際のところ、それほど音質がいいわけではない。それどころか、恐ろしく劣化している。にもかかわらず、多くの人が、音質がいいと錯覚している。  さて、このFLVファイルを落とし、調べてみると、まず音声部分は、128kbpsのmp3であった。注意深く聞いてみると、低音と高温がやけに強調された音であることが分かる。いわゆるドンシャリだ。  まあ思うに、ドンシャリの方が、音質がよくなったと感じる人間が多いのだから、ドンシャリの方が好いのではないかと思う。あくまで、人間がよい音だと認識することが重要なのだから。  CreativeのX-Fiシリーズは、Crystalizerという名称の、いわばプリセット済みイコライザーがある。これは低音と高音を強調し、注音を抑えるという、まさにドンシャリフィルタだ。使ってみると、確かにいくつかの音に関しては、良くなったと錯覚してしまう。こういう機能があるのも、ひとえに人間の耳がいい加減なものだからだろう。

2007-06-05

how do i get rid of disgusting interlace

追記:自動改行に頼っていた古い記事を整形。内容は結構古いので、今はどうなっているか分からない。

ソー、ディスタイム、ウィーアーゴーイングトゥトークアバウトデインターレース。

さて、インターレス解除の方法であるが、その前にひとつ、どうしても言わなければならないことがある。

曰く、「完璧を求めるならば、アナログなディスプレイで見ればいい」

本当に、これに尽きる。完璧なデインターレス方法などない。最良の方法とは、最初からインターレスなソースを用いないことだ。とは言え、入手可能な最良のソースがインターレスを含んでいることは往々にしてあることだ。なんとかして、インターレスは除かねばならない。

さて、mencoderに詳しくない者は、ひょっとしたら、mencoder以外でインターレスを解除しているかも知れぬ。ところが、mencoderには、最強のインターレス解除方法も備わっているのだ。早速見ていこう。

インターレスを解除するには、vf 引数、つまりビデオフィルタを使う。最も単純なのは、ppから始まる一連のフィルタだ。たとえば、pp=lbはLinear Blendであるし、pp=liはLinear Interpolationだ。基本的にこれらを使う。個人的には、PP系の中では、Cublic Interpolationがお勧めだ。これらは組み合わせて使うことも出来る。たとえば、pp=ci,pp=l5は、キューブリックインターポレーションの後に、ローパスフィルタをかけている。

PP以外のデインターレスフィルタはどうかというと、こちらはより賢い方法を採用している。たとえば、動画が実際より3/2フレーム数の多い、テレシネであった場合、逆テレシネを利用して、実に効果的にインターレスの解除が行える、pullupやfilmdintなどだ。もちろん、このフィルタを利用するには、テレシネ動画で無ければならないのだが。

さて、テレシネ動画でない場合、どうすればいいのか。ここで、かなり汎用的に使えて、性能のいいフィルタがある。yadif(Yet Another DeInterlace Filterの略)というフィルタだ。この性能はすばらしい。たいていの場合で、困ることはない。使い方だが、1フレーム毎に処理したいならば、yadif=0を使う。1フィールド毎に処理したいならば、yadif=1を使う。2や3は、spatial interlacingを行わない、0や1のことだ。yadif=1を使う場合は、framestep等を使い、フレームを脱落させるか、あるいは出力するFPSを倍にしないと、泣きを見ることになる。フレームがフィールド単位に分離されているからだ。単純に2倍になる。

さて、更なる高みを目指したい人は続きを読んで欲しい。最強のフィルタがある。その名はmcdeintだ。これは、動き補正をしつつインターレスを解除を行うという、恐ろしいフィルタだ。何が恐ろしいといって、物凄く遅い。現状のどんなCPUを使っても、エンコードのFPSは一桁を切るだろう。0.1、0.01の世界にまで落ち込む。

使い方は次の通り、

yadif=3,mcdeint=2,framestep=2

mcdeintは、それ自体でフィールド分離機能を持っていないので、フィールドを分離する、tfields=1や、yadif=1, yadif=3などを一緒に使わなければならない。そして、FPSが倍になっているので、単純にフレームを脱落させ、元のFPSに戻すか、FPSを倍にしなければならない。なお、mcdeint=3ならば、さらに遅くなる。これは劇的に遅いが、最強だ。

2007-06-04

ふと思った

 よく、「私らが子供の時分には、皆、外で遊んでいたのに、近頃ときたら、皆で集まってもゲームばかり。まったく、最近の若い者はダメだ」などと言われる。  まあ、そうは言っても、その時分にはゲームなどないし、今は遊べるような所も少ない。もちろんこういうことは、四千年前のエジプトのパピルスにも書いてあるそうだ。因みに、このエジプトのパピルスについて調べたが、どうも一次ソースが見当たらない。わが国では、柳田国男が、「Archibald Henry Sayceがそんなことを言っていた」と、著書「木綿以前の事」に書いている。そして、このArchibald Henry Sayceは、いくつかの本を書いている。この中に、恐らくはあるだろうと思われる。しかし、こんなマイナーな本は、国内では国会図書館か、有名な大学の図書室にでも行かなければ見つからないだろう。  さて、そこでふと思った。もし我々が親の世代になったとき、一体なんと言われているのだろう。既にゲームはある。外で遊べる場所は今より増えることはないだろう。さて何と言う。  思うに、ネット対戦ではないかと思う。最近、ようやくインターネットも普通になってきた。帯域は、現在でもゲームには十分すぎるぐらいだし、遅延も、恐らく将来は、日本国内は最高でも10ms程度の遅延でpingが通るだろう。Google Mapで日本列島の全長を測ると、だいたい1500kmぐらいであった。沖縄を無視すればだが。1500kmを光の速さで進むと、5msかかる。適当に言ったが、結構ありえそうだ。  そんなわけで、どの家にも電話回線を付けているように、どこでもネットに接続可能になると、ネットゲームが物凄く身近な存在になる。  そういう近い将来、我々は次のように言うだろう。 「私らが子供の時分には、皆、集まって誰かの家でゲームをしていたのに、近頃ときたら、皆ネットゲームばかり。まったく、最近の若い者はダメだ」と。  ところで、書名を失念したが、ある物書きの文章読本では、物書きの間では、「ペンで書くのと、キーボードで打つのでは、文章が違う。ペンで書こうとすると、じっくりと考えてから書くので、必然的に良い文章が出来上がる。従って、物書きを生業とする以上、まずペンで書くべきだ」と主張する人が居ると書いてあった。その著者はこれを皮肉って、「まったく馬鹿げた話だ。ひょっとしたら将来、『音声認識による入力と、キーボードからの入力では、出来上がる文章はどちらが優れているか』という論争でも繰り広げられるのだろうか。ペンとキーボードの争いよりは、多少ましな気はするが」と締めくくっていた。