2007-07-10

シリアルポートを扱うのは簡単だ

 FPGAとVHDLの実習で、シリアルポートを使う練習で、ある値を送り続ける課題があった。果たしてさっぱりうまくいかなかった。ハイパーターミナルでは分かりづらいので、自前でCOMポートをモニタするツールを書くことにした。かねてより簡単にCOMポートに読み書きできるのは知っていたが、本当にあっさりと書くことができて拍子抜けした。それにしても、ボーレートやフロー制御の設定にまぎれて、1バイトが何ビットであるかを設定する項目があるのには、時代を感じた。    とりあえず、概略を書いておく。まず、CreateFileで開く。ファイル名は。"COMx"だ。xの部分に、開きたいCOMポートの数字を入れればいい。そして必要に応じてREADやWRITEのアクセス権を指定する。また、MSDNによれば、排他的アクセスで無ければならないとされている。セキュリティは無し。OPEN_EXISTINGで開く。オーバーラップもサポートされている。テンプレートは設定できない。
HANDLE com = CreateFile( L"COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
 現在の設定は、GetCommStateで設定できる。DCB構造体を適切に設定して、SetCommStateで変更できる。あとは、おなじみのReadFileやWriteFileで読み書きすればいい。  時代と言えば、昔はシリアルだから遅い、パラレルにしたほうが早いと言われていたものだ。  シリアルって早くね? 480Mボーぐらいでるんじゃね?

2007-07-04

iPhoneのrootアカウントのパスワードがクラックされた

2009年11月5日追記:二年前のこの記事が、にわかにPV数を得ている。何故かというと、こういう事があったからだ。間違えてここに飛んできた人の為の便宜を図るために、リンクしておく。
ロック解除のiPhoneを人質に、「身代金」の要求騒ぎ - ITmedia News

http://www.hackint0sh.org/forum/showthread.php?t=1323

rootアカウントのパスワードは、"alpine"
mobileアカウントのパスワードは、"dottie"

パスワードのセンスを褒め称えるべきだろうか? ちなみに、パスワードは古き良きDESでハッシュされているらしい。今となっては懐かしい暗号だ。クラックには、John the Ripperで15秒だったとか。

まあ、iPhoneは携帯である。マルチユーザなどといった使い方は想定していないし、そもそもiPhoneのシェル上から、rootにログインする方法がない。iPhoneにはターミナルなどないし、セキュリティ上の問題になることも無い。rootアカウントへのログインはまだ試みられていないようだが、そもそもUIが動くのかどうか疑問のようだ。

2007-07-01

FLV ファイル

 FLVファイルを処理するツールを作ろうとしたが、なかなか難しい。Dataタグには、完全なパーサを書かなければならない。いい加減に対応すると、泣きを見るだろう。  しかし、OnMetaDataの公式な規格書がないのはどういうことだろう。

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かかる。適当に言ったが、結構ありえそうだ。  そんなわけで、どの家にも電話回線を付けているように、どこでもネットに接続可能になると、ネットゲームが物凄く身近な存在になる。  そういう近い将来、我々は次のように言うだろう。 「私らが子供の時分には、皆、集まって誰かの家でゲームをしていたのに、近頃ときたら、皆ネットゲームばかり。まったく、最近の若い者はダメだ」と。  ところで、書名を失念したが、ある物書きの文章読本では、物書きの間では、「ペンで書くのと、キーボードで打つのでは、文章が違う。ペンで書こうとすると、じっくりと考えてから書くので、必然的に良い文章が出来上がる。従って、物書きを生業とする以上、まずペンで書くべきだ」と主張する人が居ると書いてあった。その著者はこれを皮肉って、「まったく馬鹿げた話だ。ひょっとしたら将来、『音声認識による入力と、キーボードからの入力では、出来上がる文章はどちらが優れているか』という論争でも繰り広げられるのだろうか。ペンとキーボードの争いよりは、多少ましな気はするが」と締めくくっていた。

2007-05-26

高部真規子裁判長のおかげで、日本国内においてネットワークストレージが違法と相成りました

http://headlines.yahoo.co.jp/hl?a=20070525-00000119-mai-soci

これはどんなサービスかというと、ユーザが、自分の持っているCDを、MYUTAの提供するサーバにアップロードでき、そのユーザの携帯電話に落とすことができるというものだ。記事やプレスリリースを見る限り、ユーザ個人だけで完結するサービスのようで、他のユーザの音楽を落とせるサービスではないようだ。

東京地裁の「高部真規子」裁判長がだした判決のようだ。こんなもので訴えるJASRACもJASRACだが、判決を出す高部真規子も高部真規子だ。もはやこれはJASRACがどうとかいう問題を通り越してあきれてしまう。なんという裁判長。

これはすばらしい。日本国内では、ネットストレージサービスが違法になってしまった。この解釈で行くと、Webサーバ、POP3サーバなどのレンタルは違法になってしまうだろう。

なんという判決だろう。これはまずい。

 しかし、ぐぐってみたところ、この高部真規子という人間、恐ろしくトンデモ判決を多数出しているようだ。  あの有名な、松下がヘルプの機能で一太郎を訴えた裁判も、この高部真規子が出したらしい。  裁判官ってどうやって罷免させられるのだろう。

2007-05-19

FLV file structure

 最近、ニコニコ動画にハマっているのだが、FLVファイルの構造について知りたくなったので、調べていた。いくつか参考になりそうな情報が見つかった。 まず、ファイルの構造については、大まかにhttp://www.osflash.org/flvで情報がある。  直接のコードで読めて、参考になりそうなソースは、まずFLV Extractだ。これは、C#のコードだ。C#にはなじみがないのだが、かなりC++に似ている、というよりも、そのままだ。FLV Extractについては、単純なGUIとファイルアクセスなので、これをC++に移植することは、優しいことだろう。詳細な構造についてのソースコードが見たければ、ffmpegのコードを参考になりそうだ。  で、何がしたいかというと、どこの馬の骨かもわからないあのツールでマージするのではなく、自前でFLVのマージツールを作ってみようかと。

2007-05-17

how to change console's font?

 old new thingは実に役に立つ。たまたまコンソールについて悩んでいたら、ちょうどいいタイミングで、コンソールのフォントについて解説してくれた。 http://blogs.msdn.com/oldnewthing/archive/2007/05/16/2659903.aspx  なるほど、フォントの仕組みについてはよく知らなかったのだが、はみ出す文字というのがあるのか。  それにしても、ABCなんて名前の構造体を定義しているPSDKもどうかとおもう。もちろん、そんな名前が実際に使われることは、まずないだろうとしても。  一応、スーパーギークのために、フォントを変える方法はある。http://support.microsoft.com/kb/247815 HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont 下に、00という名前の文字列を付け加えて、値をフォントフェイスにすればよい。複数のフォントを付け加えたい場合は、000, 0000,などというように、レジストリエントリの名前に、0を付け加えていく。

2007-05-13

一度生を受け、滅せぬ物のあるべきか

思へば、此世は常の住処にあらず。草葉に置く白露、水に宿る月より猶あやし。金谷に花を詠じ、栄花は先立て、無常の風に誘はるゝ。南楼の月をもてあそぶ輩も、月に先立つて、有為の雲に隠れり。人間五十年、化天の内を比ぶれば、夢幻のごとくなり。一度生を受け、滅せぬ物のあるべきか。これを菩提の種と思ひ定めざらんは、口惜しかりき次第ぞ

有名なところを超口語訳

つーか、人間ってせいぜい50年しか生きられねーよ。最下層の天使でさえも、八百年ぐらいはいきるっつーのによぅ。生まれたらそりゃ当然死ぬんだよ。これが定めか。なんつーこった

幸若舞『敦盛』(全文)
http://www.ikedakai.com/atsumori.html

2007-05-12

動画サイトの未来

ひろゆき氏、「ニコニコ」ヒットでも「動画は“来て”ない」

http://www.itmedia.co.jp/news/articles/0705/11/news117.html

まあ、PV数だけは無駄に稼いでいるが、大赤字だろう。トラフィックが膨大だからといって、広告料も上げてくれるわけではない。それもあるのだが、日本の動画の特徴が気になるところだ。ほとんどがアニメである。確かに、アニメといえば日本なのだが、それは所詮、作られたコンテンツである。自分で動画を作ってあげようという人が、あまりにも少ない。たとえば、YouTubeで最も人気の高い動画は何かというと。

つまり、個人が作った動画というのがほとんどない。たとえば有名なUnreal Gamer(キーボードクラッシャー)の動画は、狙って作られたものである。この少年が、別の動画でなにやら話しているものも、アップロードされている。こちらは普通に話しているだけなので、あまり人気はないが。

これは、誰でも作れるのだ。しかし、日本人はこういう動画を作ろうとしない。既存のアニメをいかに画質良くエンコードしてニコニコに上げるかにはこだわっても、自前でいかに面白い動画を作るかについては、まったく考慮しない。まあ、かく偉そうなことをいうからには、自分で作って見なければならない。そんなわけで一連の動画をここにリンクしておく。

http://www.nicovideo.jp/search/hito

2007-05-09

how do i use mencoder for two pass encoding

 さて、2パスエンコードを説明する。これまでのmencoderにはバグがあり、VP62の2パスエンコードがうまくいかなかった。.sstファイルが正常に出力されないのが原因である。これが、2chの有志により、直されたので、2パスエンコードができるようになった。ちなみに、CBRだと、バグがあってもできてしまったりする。公式にパッチは上げてくれるのだろうか。  それにしても、やはり、2パスはすばらしい。動き始めのブロックノイズが激減する。いままで2パスを敬遠してきたのは、mencoderだけで完結する方法がなかったからだ。
echo オーディオのビットレートを指定(kbps) 例:64 set Audiobitrate=64 REM ビデオフォーマット設定(出力拡張子で自動的に確定) set FORMAT=-of lavf set FOPT=-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames REM 一応入力側の名前に合わせてみる set OUTPUT=-o "%~n1.flv" set INPUT="%~1" REM ビデオコーデック設定 set VCODEC=-ovc vfw REM 音声コーデック設定 set ACODEC=-oac mp3lame set ACOPT=-lameopts abr:br=%Audiobitrate% -af resample=44100 REM その他フィルタオプション(現状は上下反転+LanczosResize512x384)-ffourcc VP6F set EXTOPT=-vf flip,scale=512:384 -sws 9 REM 2pass用 set VCOPT=-xvfwopts codec=codecs\vp6vfw.dll:compdata=firstpass.mcf mencoder %FORMAT% %FOPT% %VCODEC% %VCOPT% %ACODEC% %ACOPT% %EXTOPT% %OUTPUT% %INPUT% set VCOPT=-xvfwopts codec=codecs\vp6vfw.dll:compdata=secondpass.mcf mencoder %FORMAT% %FOPT% %VCODEC% %VCOPT% %ACODEC% %ACOPT% %EXTOPT% %OUTPUT% %INPUT% あとは各自試行錯誤でもしてくれってことで。
 これが、2パスに必要なバッチファイルである。例の如く、自分好みに変えてある。さて、とりあえず試したい場合は、コーデックの指定を、vp6vfw.dll:compdata=dialogにすれば良い。設定ダイアログが表示されるので、それぞれ、Two Pass - First Pass, Two Pass - Second Passを選べば良い。しかし、それでは人間が応答しなければならない。私の理想は、無人のまま自働エンコードである。そこで、コーデックの設定を、保存しておく必要がある。これには、.mcfというファイルを生成する必要がある。このバッチファイルに添う形では、firstpass.mcfと、secondpass.mcfである。.mcfファイルはどうやって生成するか。それには、vfw2menc.exeを使う。次のように呼び出せば良い。
vfw2menc -f VP62 -d codecs\vp6vfw.dll -s firstpass.mcf vfw2menc -f VP62 -d codecs\vp6vfw.dll -s secondpass.mcf
それぞれ、1パス目、2パス目を設定する。このようにしておけば、人間が応答することなく2パスエンコードができる。

what niconico wiki's mencoder batch file doing?

前回、mplayerとmencoderについての概要を説明した。今回は、ニコニコ動画のまとめWikiにある、mencoderのバッチファイルが何をしているかを説明してみる。なお、今回は、mencoderのドキュメントを参照しつつ、読んで欲しい。 http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html

echo オーディオのビットレートを指定(kbps) 例:64 set /p ABITRATE=AudioBitrate: set Audiobitrate=%ABITRATE% REM ビデオフォーマット設定(出力拡張子で自動的に確定) set FORMAT=-of lavf set FOPT=-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames REM 一応入力側の名前に合わせてみる set OUTPUT=-o "%~n1.flv" set INPUT="%~1" REM ビデオコーデック設定 set VCODEC=-ovc vfw set VCOPT=-xvfwopts codec=codecs\vp6vfw.dll:compdata=dialog REM 音声コーデック設定 set ACODEC=-oac mp3lame set ACOPT=-lameopts abr:br=%Audiobitrate% -afresample=44100 REM その他フィルタオプション(現状は上下反転+LanczosResize512x384)-ffourcc VP6F set EXTOPT=-vf flip,scale=512:384 -sws 9 mencoder %FORMAT% %FOPT% %VCODEC% %VCOPT% %ACODEC% %ACOPT%%EXTOPT% %OUTPUT% %INPUT% あとは各自試行錯誤でもしてくれってことで。

これが、FLV4enc_D&D.batの中身である。1パスの、重要な部分だけを抜き出してある。基本的に、最後のmencoderが重要なのだ。このバッチファイルは、FLVにエンコードして、ニコニコにうpするための、最小限のことだけをしている。これを理解して、自分で変更できるようになれば、さらに画質や音質を上げられるだろう。

まず最初のFORMAT変数には、-ofオプションを使い、どのフォーマットで出力するかが指定されている。明示的にflvを指定してもいいのだが、このバッチファイルではそれはしていない。次に、-lavfoptsオプションを使い、出力する動画が、Bフレームを使用していないことを明示している。現在、mencoderではBフレームの出力がサポートされていないからである。 VCODEC変数で、コーデックを指定している、これは、vfw(Video For Windows)を使う。つまり、vp6vfw.dllのことだ。次に続く-xvfwoptsオプションで、読み込むDLLファイルを指定している。また、コーデックの設定ダイアログを開くようにしている。コーデックの設定を自動化する方法があるのだが、それは2パスエンコードのときに説明するつもりだ。

余談だが、mencoderで、とうとう2パスエンコードができるようになったのだ。パッチがいつ、公式のMLに投げられるのか、不明ではあるが、diffは確保したので、いざとなればなんとでもなるだろう。私もUNIX環境のプログラミングを勉強すべきだろうか。

次は音声である。このバッチファイルは、いかなる動画ソースからでも、ニコニコに受け付けられるFLVを作成することを目的としているので、音声はエンコードされる。もし、自前でエンコードした音声がある場合、それを単にコピーすれば、再エンコードされずに、音質がよくなるだろう。FLVコンテナでは、無圧縮PCM、ADPCM、mp3をサポートしている。また、マイクで録音する際に、Nellymoser codecを使用しているようだが、このコーデックの仕様はよく分からない。現在のところ、オープンソースのデコーダーも見当たらない。 mp3へのエンコードは、-oacオプションで、mencoderに組み込まれているmp3lameを利用している。また、FLVコンテナは、 44.1kHz 22.05kHz 11.025kHzのいずれかのサンプリングレートでなければならないようなので、トラブルを防ぐために、-afオプションで、44.1kHzにリサンプルしている。ただし、このリサンプルは、次のEXTOPTで設定されている。ここが個人的に好きではないので、私の自前のバッチファイルでは、変更しているが。

さて、いよいよEXTOPT変数だ。ここにはまず、-vfオプションが指定されている。これは、ビデオフィルタという意味で、文字通りフィルタだ。 まず、flip、これは、VP6のデコーダであるVP6Fが上下反転した出力をするので、workaroundとして入れてある。最初から上下反転したフレームにしておけば、さらに上下反転して、意図通りにデコードされるという寸法だ。しかし、なぜこんなあまのじゃくな仕様なのだろう その次に、動画を512x384にスケーリングする。この解像度でなければ、SIMLEは再エンコードをしてしまうからだ。次に、-swsオプションで、スケーリングのアルゴリズムを設定してる。現在のところ11種類のアルゴリズムが実装されている。9というのは、lanczosアルゴリズムである。非常に品質のいいアルゴリズムとして有名だ。ほとんどの場合はこれでいいのだが、たとえばドット絵、ファミコンやスーパーファミコンなどの動画をエンコードするときは、4のnearest neighborがお勧めかもしれない。もちろん、エンコードする過程でかなり劣化するし、元ソースの画質にも影響されるので、どちらがいいかは、好みの問題ではある。また、先に説明したように、ここで音声リサンプルのための-afオプションが指定されている。 そのあとは、出力と入力のファイルを指定しているだけだ。

PS. やはり、バッチファイルを修正した。-afオプションと、%INPUT%にダブルクオーテーションがついているのを修正した。ダブルクオーテーションは、INPUT変数自体に含めるべき。

what is mplayer and mencoder and why i have to use them?

mplayerと、mencoderについて、説明を試みる。なお、これはニコニコ動画に動画をアップロードすることを前提に書いている。

mplayerとは、恐ろしく高機能な動画プレイヤーである。かなりの数の動画を再生できる。何がすごいのかというと、すべて自前でデコードしていることだ。しかし、もともとはLinux用のプログラムであり、Windowsで使う上では、必ずしも使い勝手や画質がいいとは言いがたい。基本はCUIである。ではなぜ、これがニコニコ動画にアップロードする上で、最適なのか。それは、mencoderの存在である。 mencoderは、mplayerとほぼおなじコマンドラインオプションを持っている。mplayerはプレイヤーであるし、mencoderはエンコーダーだ。 ニコニコ動画には、FLV形式の動画を直接アップロードできる。このとき、600kbpsで40MBの範囲に収まっていれば、再エンコードされずに、そのまま使われる。この制限は、かなり厳しい。

FLVというコンテナには、いくつかの動画形式を格納できるが、その中でも極めて、低ビットレートに置いても画質が優れているのが、On2 TecnologyのVP62だ。H263もそれなりにいいのだが、600kbps以下という厳しい制限では、VP62が圧勝してしまう。

さて、VP62にエンコードするには、ffmpegでエンコードするか、On2 Tecnologyのvfw(Video For Windows)コーデックである。vp6vfw.dllを使うしかない。ffmpegに実装されているエンコーダーはあまりよろしくないので、本家のvp6vfw.dllを使うことになる。mencoderは、それ自体で多数の動画形式へエンコードできるのだが、vfwコーデックを使うことも出来る。そのため、非常に使い勝手がいい。ちなみに、x86 Linuxで、Windowsのdllを使うために、非常に興味深いLoadLibraryの自前実装があるのだが、それはまた別の話。 それだけではない。mencoderは、その辺の安っぽい動画編集ソフトウェアよりも、よほど優れた動画編集能力を持っているのだ。まず、デコード、エンコードできる動画形式が多い。mpeg1/2/4はもちろんのこと、VOBなども問題ないし、ASF/WMA/WMV, QT/MOV/MP4, RealMedia, Matroska, NUT, NuppelVideo, FLI, YUV4MPEG, FILM, RoQ, PVAと、有名どころの形式は、余すところなくサポートしている。ffmepgに感謝すべきか。 また、基本的なフィルタも有しており、上下左右反転や回転はもちろんのこと、スケーリング、アスペクト比変更、ブラックバンドの追加、ノイズ除去、フレームレートの変更(単純な脱落から、フレームの合成まで)、テレシネ、逆テレシネ、シャープ、ブラー、インターレス解除ができる。とくにインターレス解除やスケーリングは、かなり多数のアルゴリズムを使うことが出来る。ロゴの削除なる機能もあるが、これをまともに使うのは難しそうだ。

と、ここまで説明すると、「おいおい、なぜCUIな貧弱ツールでフィルタなど使わなければならないんだ。この俺が使っているクールでイージーでGUIなツールでフィルタをかけたほうがいいじゃないか」と言う人がいるかもしれない。CUIであることの利点は、自分でコードを書いて、簡単にバッチ処理ができたりすることもあるのだが、なによりすばやいことだ。複雑なGUIでは、あるフィルタをかけるためには、メニューからフィルタの適用を選択し、ダイアログから目的のフィルタを選んで、パラメータを指定しなければならなかったりする。mencoderでは、-vfオプションを使うだけで、簡単に指定できる。たとえば、512x384にスケーリングしたければ、

mencoder -vf scale=512:384

とすれば良いし、400x300にスケーリングして、黒帯をいれて中央に表示し、512x384にしたい場合は、

mencoder -vf scale=400:300,expand=512:384

とすればよい。また、インターレスをLinear blendで解除しつつ、512x384にスケーリングするには、

mencoder -vf pp=li,scale=512:384

となる。非常に簡単だ。ちなみに、フィルタは並んでいる順番で適用される。インターレス解除は、一番最初に行っておかないと、泣きを見ることになる。

また、「俺のクールでイージーなGUIツールには、フィルタのプレビュー機能があるぜ」という人もいるかもしれない。この点も問題はない。なぜならば、mplayerとmencoderは一心同体、mencoderのフィルタは、mplayerでも同様に使える。だから、mplayerでリアルタイムにフィルタをかけつつ再生して、効果を確かめることもできる。 とはいっても、最高に高画質を目指す人から見れば、mencoderのフィルタは貧弱かもしれない。しかし、私のように、多数の動画にたいして、ある程度の画質を維持しつつ、寝ている間にエンコードしたいという人間には、最適なのだ。

次回は、ニコニコwikiで配布されている、mencoderを使うバッチファイルが何をしているかについて、解説する。タグ、mencoderで、一覧を見ることができる。

2007-05-08

what do we trust in the TBS

 時刻表示は信頼できるだろう。よほどのことがない限り、誤差はかなり低いと考えられる。  しかし、生放送を数分ずらしてリアルタイム編集しつつ放送とかやりそうだけど。

2007-05-04

プロセス終了時にメモリを解放すべからず

http://blogs.msdn.com/oldnewthing/archive/2007/05/03/2383346.aspx  よく、OSが解放してくれるから、プロセス終了時にはリソース解放などをしなくてもいいという意見に対して、「いや、できる限りすべきだ」という人が居るが、場合によりけりということらしい。いや、別にしてもいいのだけれど、DLL_PROCESS_DETACHの中でやるなということで。  プロセスが終了するとき、Windows XPがどのような処理をするか。ExitProcessが呼ばれたとき、ExitProcessを読んだスレッド以外のすべてのスレッドは、終了される。スレッドが何をしていようがお構いなしだ。つまりは、TerminateThreadに等しいということだ。MSDNではTerminateThreadは使うべきではないとしつこく警告されているが、一体何がまずいのか。実は、TerminateThreadとは、スレッドが何をしていようと、強制的に終了させるのだ。もし、強制終了されるスレッドが、クリティカルセクションに入っていた場合、そのクリティカルセクションはロックされたままになる。これの何がまずいのかというと、スレッド間で排他をとるヒープを使っていて、まさにヒープからメモリを確保、解放するときに終了されると、ヒープがロックされたままになる。  さて、ある「賢い」DLLは、DLL_PROCESS_DETACH通知が送られたときに、確保したリソースを解放しようとする。しかし、そのリソースに排他的にアクセス中のスレッドが強制終了された場合、リソースを解放しようとすると、例外を投げてこける。結果的にプロセスは終了するのだが、なんとも汚い終わり方になってしまう。  そこで、プロセス終了時のDLL_PROCESS_DETACHの中では、何もするな。何も「賢い」ことをするな。ただreturnせよ。リソースの解放はOSにまかせろ。  ただし、動的にDLLがアンロードされる場合は、この限りではない。まだプロセスは動き続けるのだから、リソースを解放しなければ、リソースリークになってしまう。なんともやっかいだ。

Time flies when you're enjoying yourself

 光陰矢のごとしとはよく言ったものだ。実際早い、早すぎる。私とて、もう二十歳なのだ。後せいぜい五十年ないしは六十年ぐらいしか生きられない定めなのだ。しかも50年とは、あくまで生存可能な時間であって、有意義に生きられる時間ではない。最新の技術にいつまでついていけるだろうか。あと20年、いや10年もないかも知れぬ。そう短い時間では、何も極めることができないだろう。  何ということだ。人間はたったの百年足らずしか生きられぬのか。いかに富や名声を得ようとも、歴史教科書の片隅に、「かくかくしかじかなる有名な男がいた」程度の扱いしかされぬのだ。今、各の如く、考え、悩み、先人のしたように、文に綴りてみんとするこの瞬間の思想は、決して伝えられないというのだろうか。

2007-05-03

High Quality Dressed Up Car

 車の免許を取るために、二段階技能で外を走っていたとき、ふと、前の車のリアウインドウにでかでかと張ってある、ステッカーが目に付いた。そこには、High Quality Dressed Up Car(超めかした車)と書いてあった。ああ、自画自賛ここにきわまれり。  あるいは、「大安売り」などと書いてあるTシャツを着ている外人と、似たような感覚なのだろうか。

2007-04-27

Boost 1.34.0 Beta was released

 Boostの1.34.0のベータ版が公開された。 http://lists.boost.org/Archives/boost/2007/04/120375.php  ダウンロードはここから http://sourceforge.net/project/showfiles.php?group_id=7586

車の話

 ようやく仮免を取り、何度か外を走ってみた。なかなか難しい。そういえば、車好きの友人が居たので聞いてみることに。  自分「いやぁ~、青信号で発進するとき、なかなかうまくいかないんだよね。ギアをトップまで持っていくのに10秒以上かかるし、すばやく加速もできない」  友人「は、俺なんかもっとかかるで。後ろからクラクション鳴らされるんやで」  自分「何と、そりゃまたどういうわけで。お前なら速攻で切り替えてさっさと行くものとばかり思っていたが」  友人「あのなぁ、ええか、急に加速したら、ガソリンを食う、タイヤが磨り減る、クラッチが痛む、環境にも悪い。まあ環境はともかく、何でそなことせなあかんねや。周りがいくら迷惑しようとも、俺はのんびりいくで。」  自分「ああ、そういえばお前はそういう奴だった……」  この友人は、現実で車をかっ飛ばすより、ゲーム中でかっ飛ばすのが好きなようだ。何しろ、ゲームではガソリン消費もタイヤの磨り減りも気にしなくていい。そういえば、レーシングゲームは数多くあれど、みなアクセルとブレーキ、ステアリングで操作するものになっている。何故だろう。MT車の方がいいと主張する車好きはたくさんいるし、クラッチ操作のあるゲームがあっても不思議はないのだが。  この疑問を友人にぶつけてみると、面白い答えが返ってきた。まず、ゲームパッドで操作しにくい。クラッチ操作というからには、ちゃんと半クラにしなければならないため、アナログ入力が必要である。しかし、Xbox360やPSのコントローラでは、クラッチを操作するのに必要なトリガーが足りない。左右に日本ついているだけだ。もし3本目のトリガーがあったとしても、一体どの指で操作するというのか。  また、かつてアーケードゲームで、クラッチペダルのあるゲームが存在したらしい。アーケードならば、現実に近いコントローラ、つまり本物のステアリングと、本物のペダルを用意できる。かのクラッチ操作を伴うゲームは、クラッチのアナログ入力や、回転数があっていなければエンストを起こすという本格仕様であったらしい。しかし流行らなかった。どうやら、ゲーマーというのは、そこまで極端に操作性の本物志向を求めないものらしい。そういう本物志向にこだわる人間は、本物の車に乗るものらしい。  ふーむ、そんなものなのかね。何はともかく、今のうちに車の免許は取っておかなければならない。どんな職に就くにせよ、働きながら免許を取るのはかなり面倒だからだ。

2007-04-21

酒を飲んだ話

 長い間バイトをしていた人がやめるというので、飲みに行くことのした。かなり人から好かれる性格をしている人だったので、最終的に15人もの人数になった。しかし、酒を飲んだときの、人の変わり様は極端すぎる。私が常々思っていることは、「京都の人は裏表ありすぎ」だ。酒が入ると、如実に現れる。私もだいぶ飲んで足がふらついていたが、宴会が終わる30分前から酒をやめて、酔いを醒ました。宴会が終わったのは、2時ごろであった。  その後、ある人の知り合いのスナックに行って、カラオケをした。皆まだ酔っているようだ。私はだいぶ醒めてしまった。ところで、私には歌える歌がない。あるにはあるが、マニアックすぎるものばかりだ。  酒は冷めていたが、たまたま入っていた歌が歌いたかったので、入れてみた。.hack//SIGNのObsessionである。案の定、誰も知らずに場がしらけた。おそらくは、私の他に歌える歌、真ゲッターのSTORMなども、しらけるのだろう。ところで、誰か創生のアクエリオンのShangri-Laを歌えるのだろうか。  3時半過ぎにスナックから出た。帰宅に際し、周りはタクシーの相乗りを勧めるが、まだ酒が抜けていそうにない二人と同乗するのは面倒だったので、徒歩にて帰ることのした。家に帰り、シャワーを浴びて就寝。  正午に起床する。かるい頭痛がしたが、いつものことだ。酒を飲んだ次の日は、必ず頭が痛くなる。不思議なことに、睡眠をとった後で痛くなるのだ。寝る前にも酒は抜けていたはずなのだが、どういうことなのだろう。まあ、3時間ぐらいで収まるので、問題はない。  昨日、アマゾンで注文したWindows Internalsの代金の支払いと、明日のひぐらしデイブレイク改のために、銀行から金を下ろしに行く。Windows Internalsは、かのMark Russinovich氏も書いている。これは読まねばならない。もっと早く気づくべきだった。  ついでに、コンビニで紙パックのジュースを買うことにした。そこのコンビニでは、一ヶ月ぐらいセールをやっていて、レモンティーは110円であった。ただし、もうセールが終わっていて、126円に戻っていたのだ。私は、頭痛と、Windows Internalsと、ひぐらしデイブレイク改と、ニコニコ動画に上げるゲーム動画の作成について、思いを巡らせていたので、店員の「126円になります」という声を聞き漏らした。つまり、まだ値段は110円であると思っていたのだ。財布の中の小銭を見ると、果たして500円玉がある。しかし100円玉はない。そこで私は、無意識に510円を出した。無論、100円玉4枚のお釣りをもらうためだ。しかし、実際の代金は126円であるため、これは誤りである。店員は一言も発せず、510円を受け取り、384円のお釣りを返してきた。  何かが間違っている気がする。10円玉の意味がない。

2007-04-16

チラシの裏

 South Parkの1106. D-Yikesだが、金の装身具を身につけた浅黒い人々はPersianだ。South Parkのスクリプトは、ここで見ることができる。  かねてから目をつけていた、ハッピーハッキングキーボードを買ってみた。なかなか使いやすい。今回は英語配列を買った。小さくて場所をとらないのがいい。  しかし、英語配列のキーボードはコードが書きやすい。なんといううらやましいことだ。問題は、日本語が入力しにくい。半角全角キーなどなく、IMEを有効にするには、歴史的なAlt+`を押し下げなければならない。しかし、一度に複数のキーボードを使うときは、キーボードごとに違ったレイアウトを使いたいものだ。何とかならないものか。  キャプチャデバイスについて一言、USBのものを買う場合、USBバスパワーだけで動作するものはお勧めしない。とくに、私が買ったものは酷かった。まず、ドライバが署名されていない。これだけでも酷いというのに、付属のソフトウェアも酷い。バッテリーで動作しているときは、キャプチャするときに確認を求めてくるのはいいのだが、何が酷いかといって、PCをスタンバイする際に、「PCがスタンバイされるが、よろしいか?」というダイアログを出す。もちろん、スタンバイを一時停止させてだ。これはひどい。普通のラップトップにとって、スタンバイするというのは、閉じた場合なのだ。すでに閉じているので、ダイアログが出ていることなど分かるわけもない。とうぜん、スタンバイはされず、バッテリーを消費しつくす。本当に腐ったソフトウェアだ。Vistaでは、もはやこのようなくだらないソフトウェアをわざわざ待ったりはしない。プログラムはスタンバイ通知から2秒間の猶予を与えられるのみである。OSは有無を言わさずスタンバイに取り掛かる。

2007-04-12

feed pigeons

 昨日、川辺でクラッカーを食べていたら、鳩がいたので、クラッカーを与えてみた。いったいどこにいたのか、見る間に数十羽も集まってきた。これには驚いた。そして、たまたまそこを通りがかった、散歩中の犬とも触れ合ってきた。なかなか癒された。

2007-04-06

定額定額定額

パケット定額です ただしPCのモデムとして使用した場合を除く  実際のカタログなどでは、もっとひどい記述になっている。モデムと書いてくれれば分かりやすいのに。「PCにケーブル接続して通信モードによってパケット通信をした場合は云々」などと、独自用語をふんだんに使って、実に分かりにくく解説している。しかも読むのにルーペが必要になるほど細かい字で書いてある。これを読んで理解するには、携帯をモデムとして使う際の説明を捜すという意図を持って、エスパー能力を駆使しつつ読み解かなければならない。  3年前から、各社ともこんな感じだ。はっきりいって、携帯は低機能過ぎる。まったく欲しいと思わない。PHSならば、少しは欲しいが。

2007-04-02

niconico video

 カノンをBGMにトレス疑惑の画像がいくつか流れたとおもったら、いきなりロック超になり、さまざまな似ている画像が表示される動画。これは笑わずにはいられない。それにしても、荒木先生と土方が似ていたとは。