★おしらせ★
ここはややマニアックなので、家庭用ビデオ編集向けのもっとベーシックな内容をhttp://dtv.sakura.ne.jp/に展開中です。あわせてご覧ください。

まえがき

前回はWME9を使ってエンコードしましたが、WME9付属のツールにエンコードスクリプトというのがあります。 これを使うと
複数ファイル/複数設定の連続エンコード エンコードが終わったらシャットダウン
ができます。

エンコードスクリプトって何?

今ではあまり使うこともありませんが、コマンドプロンプトというものがあります。 スタートメニューのアクセサリの中かどこかにあります。
こんな感じの画面で、コマンドを入力することができます。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\xxxxx>

例えば、 calc と入れると電卓が起動します。 この要領で、エンコードを走らせて終わったらシャットダウンしようというのが目的です。

スクリプトのオプション

スクリプトは、WME9がインストールされているフォルダで「cscript.exe wmcmd.vbs なんたらかんたら・・・」というコマンドを入れます。
なんたらかんたら・・・の部分にはさまざまなオプションを入れるのですが、以下に代表的なものを挙げます。 説明も、家庭用ビデオカメラで撮ったものを変換するときに必要と思われること以外は省略しています。
オプション説明
-input
エンコードするファイル名を指定。フォルダを指定した場合、その中にあるものがすべて対象になる。
-output
エンコード後のファイル名を指定。-inputがフォルダの場合は、出力フォルダを指定。
-loadprofile
プロファイル(.prx)を指定する。プロファイルとは、これ以下のさまざまな設定を1つのファイルにまとめたもので、これを使うとたくさんのオプションをダラダラ入力しなくてもすむ。
-a_codec
音声のコーデックを指定する。
WMA9STD:普通はこれを使っておけばよい。
PCM:一応、非圧縮もある。
-a_mode
音声について、どのモードで圧縮するか指定する。
0:1パスCBR。ネット配信に。
1:2パスCBR。ネット配信に。(高音質)
2:品質ベースVBR。音質固定で変換するので終わるまでファイルサイズが分からない。
3:平均ビットレート指定VBR。ファイルサイズ固定でDVDやCDに焼くときに。
4:平均&ピークビットレート指定VBR。3でビットレート上限を指定できる。
音声コーデックに PCM を指定すると 0 しか選べない。
-a_setting
品質ベース以外では、ビットレート_サンプリングレート_チャンネルを指定。
例:128_48_2 → 128Kbps,48KHz,2ch
品質ベースの場合は、品質_サンプリングレート_チャンネルを指定
例:Q98_48_2
なおここの設定はどんな数字でも受け付けてもらえるわけではなく、-a_formats オプションで実行したときに表示されるリストから選ばなくてはならない。 ビデオカメラの音は48KHzなので、サンプリングレートが48の中から選ぶ方がよいと思われる。
-a_peakbitrate
-a_mode 4 を選んだ場合に、ピークビットレートを指定する。
例:192000 → 192Kbps
平均レートの1.5〜2倍ぐらいでいいと思われる。デフォルトは1.5倍。
-a_peakbuffer
-a_mode 4 を選んだ場合に、音声をバッファする時間 (ミリ秒) を指定する。
例:3000 → 3秒
あまり短いと音飛びの危険があるが、大きいと処理がもたつく(と思われる)。が、映像のバッファのほうが重要なのであまり気にしなくてよい。デフォルトは3秒。
-v_codec
映像のコーデックを指定する。
例:WMV9 : WindowsMediaVideo9
プログレッシブの場合は WMV9 でいいのだが、WindowsMediaPlayer10を入れているとインターレースを使う場合は WindowsMediaVideo9 Advanced Profile を使わなければならない。が、該当する設定値が無い。(下のほうの英文和訳参照。)仕方が無いので WindowsMediaVideo9 Advanced Profile は上記の -loadprofile を使って設定する。
-v_mode
映像について、どのモードで圧縮するか指定する。
0:1パスCBR。ネット配信に。
1:2パスCBR。ネット配信に。(高画質)
2:品質ベースVBR。画質固定で変換するので終わるまでファイルサイズが分からない。
3:平均ビットレート指定VBR。ファイルサイズ固定でDVDやCDに焼くときに。
4:平均&ピークビットレート指定VBR。3でビットレート上限を指定できる。部分的にビットレートが上がり過ぎるのを防止できるが、コマ落ちする危険がある。
映像コーデックに WindowsMediaVideo9 Advanced Profile を使うと、0,1,2 しか指定できなくなる。が、やってみるとわかるが事実上0,2しか使用できない。(下のほうの英文和訳参照。)
-v_bitrate
品質ベース以外の場合に、ビットレートを指定。
例:2000000 → 2Mbps
-v_peakbitrate
-v_mode 4 を選んだ場合に、ピークビットレートを指定する。
例:5000000 → 5Mbps
平均レートの1.5〜2倍ぐらいでいいと思われる。デフォルトは1.5倍。
-v_quality
-v_mode でCBRを選んだ場合は、映像の滑らかさを 0〜100 の数字で指定する。
例:0 → 1枚1枚の絵が乱れてもコマ落ちなし
例:100 → コマ落ちしても1枚1枚の絵はきれい
個人の好みだが、私はいつも 0 を指定。
-v_mode 2(品質ベース)の場合は、画質を指定する。1,4,8,11,15,18,22,25,29,33,36,40,43,47,50,54,58,61,65,68,72,75,79,83,86,90,93,97,100 から選ぶ。
例:1 → 低画質、ファイルサイズ小
例:100 → 高画質、ファイルサイズ大
95を指定すると93として扱われる。
-v_peakbuffer
-v_mode 4 を選んだ場合に、エンコード時、映像をバッファする時間 (ミリ秒) を指定する。
例:5000 → 5秒
大きいと処理がもたつく気がするが、細かい効果は不明。デフォルトは5秒。
-v_buffer
再生時に映像をあらかじめメモリに格納しておく時間 (ミリ秒) を指定する。
例:5000 → 5秒
あまり短いとコマ落ちの危険があるが、大きいと処理がもたつく(と思われる)。デフォルトは5秒。
-v_framerate
フレームレートを指定する。
例:29.97 → 29.97fps
29.97か59.94かどっちかしか使わないでしょう。
-v_keydist
キーフレーム(MPEGで言うIフレーム)の間隔を指定する。
例:2 → 2秒
デフォルトは10秒。長いほうが画質には有利だが、シークバーで再生位置を指定したとき思った場所から再生が始まらなくてイライラする。 シーンチェンジのときはこの数字にかかわらずキーフレームが入るので、ランダムアクセスしないのならかなり長くしても大丈夫でしょう。
-v_preproc
0:プログレッシブ(デフォルト)
16:インターレース・どっちが先か自動判定
17:トップファーストのインターレース
18:ボトムファーストのインターレース
-pixelratio
映像のピクセル縦横比を指定する。映像の縦横比ではないので注意。
例:4 3 → 4:3(1440x1080を映像16:9で表示させるとき)
デフォルトは 1 1 。
-pixelformat
入力映像のピクセル形式を指定する。ここではYUY2しか使わない。 ちなみに、出力映像のピクセル形式は、プログレッシブなら4:2:0、インターレースなら4:1:1にされてしまうらしい。
-v_performance
エンコード時のコンピュータのパフォーマンス設定を指定する。0,20,40,60,80,100 から選ぶ。
例:0 → 高速、低画質
例:100 → 低速、高画質
0と100では信じられないほど所要時間が違う。が、数字が小さいと裏で別の処理をしたとき画面が乱れるような気が・・・(未検証)。 ここ一番は100でエンコードしたいが、とてもじゃないが1080iなど時間がかかりすぎてやってられない。 デフォルトは80?(未検証)
-title
-author
-copyright
-description
タイトル、作成者、著作権情報、概要を " " で囲って記述する。
-v_codecや-v_modeの部分を読んでもらえると分かるでしょうが、現状、WindowsMediaPlayer10をインストールするとひどい目にあいます。

プロファイルの使い方

上の表でも書きましたが、WindowsMediaVideo9 Advanced Profile が指定できません。
省力化をかねて、プロファイルを作ることにします。 エンコーダの【プロパティ】→【圧縮】から編集ボタンを押して、独自のエンコード設定画面を出してください。 このダイアログで指定した内容がプロファイルに保存されます。 上記2画面で設定した内容が、エクスポートボタンを押すことによってファイルに保存できます。
では、これを使った例です。プロファイルで指定したことをオプションで上書きすることができます。 1440x1080iのクリップをエンコードします。以下のコマンドをじっくり見てください。
斜体の部分には必要に応じていろいろなものを入れるのですが、マウスを乗せると説明が出てきます。
cscript.exe wmcmd.vbs -loadprofile profiles\hdv.prx -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -v_performance 80 -v_preproc 17 -pixelratio 4 3 -v_quality 0 -v_mode 0 -a_mode 0

スクリプトの例

メモ帳などに次のようなコマンドを書いて、コマンドプロンプトに貼り付ければ順番に実行されます。 また、拡張子 .bat で保存すればクリック一発でコマンドが実行されます。
cd C:\Program Files\Windows Media Components\Encoder
cscript.exe wmcmd.vbs ナントカカントカ・・・・
cscript.exe wmcmd.vbs ナントカカントカ・・・・
cscript.exe wmcmd.vbs ナントカカントカ・・・・
shutdown -s
1行目は、WindowsMediaEncoder9がインストールされているフォルダに移動、最後の行はPCをシャットダウンします。 中間の行にはエンコードしたい設定を書きます。
いくつか、エンコード設定の例を挙げます。
1440x1080 30fps インターレース 映像12Mbps(CBR) 音声128Kbps(CBR)
cscript.exe wmcmd.vbs -loadprofile profiles\hdv.prx -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -a_codec WMA9 -a_mode 0 -a_setting 128_48_2 -v_mode 0 -v_bitrate 12000000 -v_quality 0 -v_buffer 3000 -v_framerate 29.97 -v_keydist 10 -v_preproc 17 -pixelratio 4 3 -pixelformat YUY2 -v_performance 80
1440x1080 30fps インターレース 映像品質90 音声品質90
cscript.exe wmcmd.vbs -loadprofile profiles\hdv.prx -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -a_codec WMA9 -a_mode 2 -a_setting Q90_48_2 -v_mode 2 -v_quality 90 -v_buffer 3000 -v_framerate 29.97 -v_keydist 10 -v_preproc 17 -pixelratio 4 3 -pixelformat YUY2 -v_performance 80
余談ですが手持ちのサンプルは品質97で平均50Mbps、品質90で平均25Mbps、品質70で平均4.7Mbpsになりました。
1280x720 30fps プログレッシブ 映像5Mbps(VBR) 音声128Kbps(VBR)
cscript.exe wmcmd.vbs -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -a_codec WMA9 -a_mode 3 -a_setting 128_48_2 -v_codec WMV9 -v_mode 3 -v_bitrate 5000000 -v_buffer 3000 -v_framerate 29.97 -v_keydist 10 -pixelratio 1 1 -pixelformat YUY2 -v_performance 100
1280x720 30fps プログレッシブ 映像品質90 音声品質90
cscript.exe wmcmd.vbs -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -a_codec WMA9 -a_mode 2 -a_setting Q90_48_2 -v_codec WMV9 -v_mode 2 -v_quality 90 -v_buffer 3000 -v_framerate 29.97 -v_keydist 10 -pixelratio 4 3 -pixelformat YUY2 -v_performance 100
1280x720 60fps プログレッシブ 映像5Mbps(VBR) 音声128Kbps(VBR)
cscript.exe wmcmd.vbs -input d:\sample\hdvsample.avi -output d:\sample\hdvsample.wmv -a_codec WMA9 -a_mode 3 -a_setting 128_48_2 -v_codec WMV9 -v_mode 3 -v_bitrate 5000000 -v_buffer 3000 -v_framerate 59.94 -v_keydist 10 -pixelratio 1 1 -pixelformat YUY2 -v_performance 100
1440x1080iだけ、-v_codec が効かないのでプロファイル読み込みで対応しています。 そのほかまちがってたらすみません。

追記

英語版のMicrosoftのページに、こんな記事があったので概要を日本語に訳してみました。 要するに、WindowsMediaPlayer9の後継が開発されるのを待て!ということらしいです。中途半端な製品やなあ。
Windows Media Video 9 Advanced Profile codec(以下、WMV9AP)は
 Windows Media Format 9.5 SDK か Windows Media Player 10 と
同時にインストールされる。

WMV9APで追加された項目の設定をするにはレジストリ操作が必要である。
なぜかというと、WMV9AP をインストールしても、
WME9がアップデートされていないのでWME9からは
それらの設定項目を操作できないためである。
(訳者注:今後、WME9.5/WME10が登場するということか。)

WMV9APで追加された項目の設定をするためのレジストリ項目は
必要に応じてユーザが自分で作る必要がある。

ほとんどのレジストリ設定は、
画質とデータサイズのトレードオフに関するものである。
レジストリ設定はWMV9APを使う全てのプログラムに反映される。
従来のロジックを書き換えてしまうものもあるが、
気に入らない場合はレジストリ設定を削除すれば元に戻る。

以下のレジストリキー以下に、項目を追加する:
\\HKEY_CURRENT_USER\Software\Microsoft\Scrunch\WMVideo

■ノイズ除去オプション
エンコード時にノイズ除去フィルタをかける。
これを使うと画質が落ちる場合もある。

名:DenoiseOption 
型:REG_DWORD
値:0(フィルタを使わない)
  1(フィルタを使う)

■高さと幅
ビデオ出力の中間フレームサイズを指定する。
デコード時にはプロファイルで指定したサイズへ展開される。

名:Encoding Height および Encoding Width
型:REG_DWORD
値:0(この設定を使わない)
  32〜8192(サイズ指定。32間隔に丸められる)

■エンコード範囲縮小
有効な色の範囲を縮小する度合いを指定する。
データサイズを小さくできるが、画にボケが発生する。
この設定自体が無ければcodecはエンコード時に判定する。
通常はロービットレート時に使用する。

名:Encoding Range Reduction Control
型:REG_DWORD
値:0x0M0m0N0n
  Mは輝度のエンコード時の縮小幅
  mは輝度のデコード時の拡大幅(通常、Mと同じにする)
  Nは色差のエンコード時の縮小幅
  nは色差のデコード時の拡大幅(通常、Nと同じにする)
  それぞれ0(なし)〜8(最大)を指定する。
  例えば 0x00000000 なら色範囲の縮小をしない。
  また、 0xFFFFFFFF なら、レジストリ設定自体を無いと解釈する。

■強制スレッド数
エンコード時のスレッド分割数を指定する。
マルチプロセッサ機などでエンコードする際に効果的。
スレッド分割すると若干の画質低下が起こりうる。

名:Force Num Threads
型:REG_DWORD
値:1,2,4

■強制エッジノイズ除去
フレームの周辺部のノイズ検出・除去を指定する。
テレビ放送のフレームの最初の21ラインは制御信号であるが、
キャプチャ時に数ライン分ノイズとして残ってしまった場合に修正する。
だがこれが出るのは本来ハードウェアの不具合。

名:Force NoiseEdgeRemoval
型:REG_DWORD
値:0(無効)
  1(有効)

■強制ループフィルタ
エンコード時にブロックノイズが出ないようにするループフィルタを指定する。
使用すると、マクロブロックのエッジが目立たなくなるが、画質がソフトになる。

名:Force LoopFilter
型:REG_DWORD
値:0(無効)
  1(有効)

■強制メディアン
エンコード時にメディアンフィルタを指定する。
データサイズを小さくすることができるが、残像が出ることがある。
デフォルトでもフィルタを使うかどうか内部で判定しているが、
この設定を追加すると常にこの値が優先される。

名:Force Median
型:REG_DWORD
値:0(無効)
  1(有効)

■先読み
現在のフレームより後のフレームをエンコード前に評価する。
より効果的にエンコードできる。

Windows Media Format SDK の出力オブジェクトでは
 codec は各サンプルを即時エンコードする。
その結果、この出力オブジェクトを使用するソフトウェア
(WMEやWMPも含まれる)では先読み設定は正しく動作しない。
先読みで指定したフレーム数ぶんだけ
データユニット拡張がずれてエンコードされる。

名:Lookahead
型:REG_DWORD
値:0〜16

■Bフレーム数
双方向予想フレーム(Bフレーム)の数を指定する。
デフォルトではBフレームは使用せず、IフレームとPフレームだけを使用する。
Iフレームはフルエンコードされ、
Pフレームは先行するI,Pフレームとの差分をエンコードする。
Bフレームは前後のI,Pフレームとの差分を予測してエンコードする。
Bフレームを使用する第一のメリットは、
フレームで起こったエラーが後続のフレームに伝播しないことである。
指定した数だけ、I,Pフレームのペアの間にBフレームが挿入される。
例えば、Bフレーム指定なしが IPPPPPPPPPPI で、指定2が IBBPBBPBBI である。
Bフレームを挿入すると、Iフレーム間におけるP,Bフレームの数が変わり、
設定したキーフレーム間隔を超過する可能性があることに注意する。

Windows Media Format SDK の出力オブジェクトでは codec は
各サンプルを即時エンコードする。
その結果、この出力オブジェクトを使用するソフトウェア
(WMEやWMPも含まれる)ではBフレーム設定は正しく動作しない。
Bフレーム数ぶんだけデータユニット拡張がずれてエンコードされる。

名:NumBFrames
型:REG_DWORD
値:0〜7

■知覚オプション
エンコード時の知覚最適化を行う。
控えめな知覚最適化では、
codec が映像中の重要な部分と重要でない部分を決めて、
重要な部分での品質を重視する。
エンコードするビデオによっては結果にかなりの差がつく。

名:Perceptual Option
型:REG_DWORD
値:0(無効)
  1(有効)

Windows Media Encoder はWMP10等をインストールしても更新されない。
WMV9APの設定がレジストリ設定の形でしか使えない理由のひとつにはそれがある。
WMP10をインストールすると、WMEのcodecリストにWMV9APが表示される。
WMV9APを使うには、プロファイルで他のcodecのときと同じように
ストリームを作成しなければならない。
2パスエンコードは今回サポートされていないことに注意する。