ビデオサーバに大切な物
ビデオサーバの性能を左右する最大のものはマシンスペックではありません。アンテナです。前述した通り、Pentium II
233MHz程度でも解像度320x240
30fpsのキャプチャは可能であり、この程度のキャプチャができれば、十分ノーマルVHSに対抗することが可能です。もはやPentium
IIのマシンなどゴミでしょうし、今、ビデオサーバなんてものを考えてる人にとっては、すでにマシンスペックを気にする必要のない時代だと思われます。
し
か
し、どんなにハイスペックなマシンであってもアンテナがダメでは、ビデオサーバとしてまったく役に立ちません。残念ながらアンテナは非常に奥が深い代物
で、簡単にはどうこうできず、どうこうしようと思ったら、専門の知識が必要ですので、どうこうしようと思う人はそちらにあたってください。この
ビデオサー
バの場合は、ケーブルテレビのパススルーなので環境としては最高の部類だと思います。ビデオサーバを作ってみようと思い立った動機の一つです。
キャプチャ時のmencoderオ
プション
このビデオサーバでは、キャプチャはmjpegで行い、その後、適当に圧縮するのが通例です。リアルタイムで圧縮率の高いフォーマットにエンコードするの
は、フィルタ
処理に制限が出るし、必ずしも合理的ではないと思います。mjpegで単純にキャプチャし、各種のフィルタ処理はノンリアルでタラタラやるのがきれいな
ファイルを作るコツです。
そんなわけで、キャプチャ時のオプションは、そんなにありません(でも、けっこう長いな)。以下が、このビデオサーバの標準的オ
プションです。不要なパラメータもいくつかありますが、おまじないです。とくにひねったところはなく、これが素のキャプチャと言えるぐらいのものです。素
なので、コーミングも出るし、ノイズもあります。それらは圧縮時に取り除きます。
v4lctl setchannel 1
mencoder tv:// -tv
driver=v4l2:device=/dev/video0:normid=1:amode=1:fps=29.971:width=640:height=480\
-ofps 29.971 -ovc lavc -oac pcm -lavcopts vcodec=mjpeg:autoaspect
-o
$tm_f -endpos 1800
normidは単純に言えばチューナの種類で、日本では、NTSCかNTSC-JP、1か6です。どちらかはハードによるようです。amodeは音声多重
のステレオです。-ovcはキャプ
チャのコーデック、lavcを指定し、-lavcopts vcodecで指定しています。-oacは、audio
codecで、pcmで生録りしています。今どきのマシンなら、音声ぐらい圧縮しても屁でもないでしょうが、Pentium
IIが現役の我がLANにおける安全指向の保険です。
そう言えば、mencoder(mplayer)では、なぜかチャンネルを変えることができません、…バグ?他のv4l操作は普通にできるようなので、な
ん
かバグっぽいですね。ということで、チャンネルを変えるときは、直接、v4lctl setchannelを実行しています。
これで、およそ6GB/hくらいのファイルができあがります。例では、-endpos
1800、すなわち1800秒、30分なので、およそ3GBのファイルが作られます。
圧縮時のmencoderオプショ
ン
mjpegでキャプチャしたファイルを圧縮します。divxで1600kbpsぐらいに圧縮すれば、十分な画質が得られます。所詮、うちのキャプチャカー
ドはBt878であり、ソースのクオリティが限られているので、ビットレートを上げたところで画質はさほど向上しません。画質は、ビットレートよりむしろフィルタ処理の方が重要です。というわけで、ファイルサイズを
考えると、経験上、1600kbpsくらいがもっともコストパフォーマンスがいいんじゃないかと思います。一時間、800MB程度です。400x300で
キャプチャしたもの(ビデオサーバ、himawariの限界、と言うかPentium II
333MHzの限界)を適切なフィルタをかけ、1600kbpsでdivxにしたものは、ノーマルVHSに勝っていると思うし、640x480でキャプ
チャしたもの(ビデオサーバ、nadesico
fusion878Aの限界)を適切なフィルタをかけ、1600kbpsでdivxにしたものは、通常のHDDレコーダで録画したものに対抗しうると思っ
ています(さすがに勝つのは無理ですが)。
その半分の800kbpsくらいだと30分200MBくらいになり、非常に扱いやすくなるのですが、640x480のサイズにこだわると多少無理
を感じま
す。動きの少ないアニメとかだと、これでもなかなかの画質を見せるものの、条件が厳しくなるとブロックノイズ、その他で大変になってきます。でも、見れな
いほどではないのが微妙なところです。ここら辺は、個人差もあるところなので、やっぱり実際やってみるしかないというのが基本です。ちなみに、最初、
800kbpsにこだわっていたのは、800kbpsが我が家のADSL環境におけるアップロード速度の限界値であり、800kbpsならギリギリ、スト
リーミングが可能かもしれないと思われたからです。実際にはちょっときついですが。
mencoder -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3:mbd=1 \
-vf pp=lb,scale=640:480,pp=de,hqdn3d -o newfile originalfile
おおよそ、圧縮時もキャプチャ時のオプションとコーデック以外あまり変わりません。大きく異なるのが、-vfのフィルタオプションです。mbd=1も、
フィルタ
の一種みたいなものと思ってください。圧縮のクオリティが上がるそうです(ただし、wmvでは使えないようです。画像が乱れてしまいます
MEncoder 1.0pre6-3.3.2)。フィルタは大変複雑で、何が最適かは本当にわからないものです。そんな試行錯誤
の末、辿り着いた結論は、あまりいじっても意味がない、です。pp=lbでデインターレイス、scale=640:480でサイズを変更し
(640x480でない場合)、pp=deでブロックノイズの除去、リンギング等の一般的なフィルタをかけ、最後にhqdn3dで最終的なノイズリダク
ションを行うぐらいが妥当だと思います。
ちなみに、このhqdn3dは大変重い処理で、Pentium II
333MHzのマシンにこの処理をやらせると8~9倍の時間がかかってしまいます。しかたなく、pp=de,hqdn3dの変わりにpp=de/tnで済
ましてしまうこともしばしばです。tnよりhqdn3dの方が優秀なデノイズフィルタですが、重すぎます。もっとも、これぐらいのフィルタ処理をやらせる
と、デノイズフィルタを軽めなtnにしたところで、それでも6倍弱
かかってしまうので、変わらないと言えば変わらないのですが、悠長なことを言っていると次の日のキャプチャが始まってしまうので、そう悠長なことも言って
いられません。ちなみにこの圧縮処理を自慢のハイパワーマシン、Celeron
850MHzのnadesicoにやらせても、二倍強の時間がかかります。