IE9ピン留め
2005年 12月 22日
とある目的のために「Windows Media エンコーダ 9」を使う
 マイクロソフトのソフトウェア「Windows Media エンコーダ 9」には、画面の内容を(マウスポインタなども含めて)そのまま取り込む機能があります。同時にオーディオデバイスからの録音もサポートしています。
 そこで、この機能を使ってQVGAサイズで30fpsの画面の取り込み(キャプチャ)を実現できないか試してみました。なおかつ、低スペックCPU(Celeron 1.7GHz)上で、ビデオトラックは圧縮しオーディオトラックはPCM録音とします。
 実行する場合はすべて自己責任でお願いします。

●オーバーレイについて
 ハードウェアに無知なので説明できないのですが、GPUの再生支援機能でビデオチップがデータを処理することでCPU負荷を下げる機能?らしい。しかしこの機能を使うとCPUがVRAMからデータを取得できないので真っ黒な画面が録画されてしまいます。
 これを解除するには2つあって、1つは設定でオーバーレイを使わないようにする方法です。Windows Media Playerの場合は<オプション-パフォーマンス-詳細-オーバーレイを使うのチェックをはずす>。
 もう1つはほかのウィンドウであらかじめオーバーレイを使っておくようにする方法です。Program FilesのWindows Media Playerフォルダには「mplayer2.exe」があると思いますので、このソフトを先に起動して適当な真っ黒なファイルを再生し一時停止にしておく方法です。
 この辺の事情はビデオチップによっても変わってくると思います。

●録音について
 サウンドバッファのデータを録音する方法は、まず「ボリュームコントロール」を起動し、<オプション-プロパティ-録音-表示するコントロールをとりあえず全部チェックする>。表示された中から“WAVE 出力ミックス”もしくは“Stereo Out”などの選択をチェックします。この名前はサウンドデバイスによって変わるようです。音量についてですが、なぜかこのパソコンでは“0”にしないと音割れしてしまいました。

●Windows Media Playerの設定
 再生負荷を下げるためにいろいろ試したのですが、なぜか“Corporate”スキンモードを使ったほうがCPU負荷が下がるようです(気のせい?)。
 さらにタスクマネージャから「wmplayer.exe」の優先度を「通常以上」にしておきます。こうするともしコマ落ちしたときのひどさが幾分緩和されるようです(これも気のせい?)。

●取り込む領域を求める
 Windows Media Playerのウィンドウの位置とサイズを取り込む時と同じにします。もし640×480のビデオなら50%表示にします。
 領域はスクリーンキャプチャで見て求めてもいいのですが、Windows Media Playerは再生する領域に専用の子ウィンドウ<WMPVideoWindow>を持っているようなので、こちらのソフト
(http://www.forest.impress.co.jp/lib/dktp/desktop/dktpcptr/cajamarcaeye.html)<窓の杜>
を使うと正確な領域を知ることができます。

●Windows Media エンコーダ 9の設定
 ここではビデオは圧縮しオーディオは非圧縮にしたいのですが、そのように設定すると「混在できません」と怒られてしまいます。もし両方が非圧縮だと、ビデオはIYUVで320×240×(12/8)バイト×30フレームで3.3MB。オーディオはPCMで44100×(16/8)バイト×2チャンネルで172KB。1秒当たりおよそ3.46MBにもなってしまいます。どうにかならないものかといろいろ調べたら、とりあえず制限を回避する方法を見つけました。

参考:http://hp.vector.co.jp/authors/VA033749/azwm9sf/faq.html

 レジストリを変更するので注意してください。こちらの「WME で音声コーデックに WMA 以外の ACM コーデックを指定するにはどうしたらよいか」を参考にしました。PCMの「AcmId」を調べて「AudioEncode」キーにその値を追加します。バグっているのかこのパソコンでは「Microsoft IMA ADPCM」と表示されますが、実際はPCMになっているようです。

さてエンコーダの設定を始めます。「新しいセッション」をクリックしてウィザードを始めましょう。
1.画面の取り込み
2.取り込む対象は画面の領域
3.既定のオーディオデバイスからオーディオを取り込む
4.先ほど求めた座標を入力(例:6, 65, 320, 240)
5.出力ファイル名を指定
6.エンコードの設定:高(これは後で変更します)
7.確認してから完了をクリックしてウィザードを終了させる

次にプロパティでの設定です。
1.「プロパティ」をクリック
2.「圧縮タブ」から「編集」をクリック
3.「オーディオ CBR Microsoft IMA ADPCM」(先ほどのレジストリ操作で出てきたもの)
4.「ビデオ CBR ISO MPEG-4 Video V1」(たぶん最も軽いコーデックだから)
5.「対象ビットレート」から「編集」をクリック
6.「オーディオ形式」は“44.100 kHz, 16ビット, ステレオ”
7.「フレームレート」“30fps”
8.「キーフレームの間隔」“30秒”
9.「ビデオビットレート」“2000Kbps”
10.「バッファサイズ」“30秒”
11.「ビデオの滑らかさ」“100”
12.「OK」、「適用」をクリック
 以上の圧縮の設定については、これが“最適”ということではありませんので、それぞれの環境に合った値に変更してください。

余計なアプリケーション・タスクを終了させる。
「エンコードの開始」をクリックして取り込みを始めます。

 出来上がったファイルを観てみます。Windows Media Playerの再生時のCPU負荷が50%程度であれば、なんとかコマ落ちせずに取り込めます。さすがに動きの激しい所ではコマ落ちしてしまいますが、この辺が妥協点でしょうか。

 これらの設定・最適化については、まだ詳しくは検証しきれていませんので注意して読んでください。

 おぉ、びっくりしたのですが、ISO MPEG-4とリニアPCMなら「携帯動画変換君」にドラッグ&ドロップしたらそのまま変換できました。やっぱりH.264(x264)はきれいだな。“iTunes”での再生も確認。

追記:いくつかの誤りを訂正。

by fujie2287 | 2005-12-22 19:26 | コンピュータ


<< SheepShaverというソ...      冬ボで考え中 >>