備忘録

2008年12月17日 (水)

MP4へのエンコード

以前2007年8月24日のエントリ「動画の擬似配信」、9月7日のエントリ「FLVへのエンコード」、9月17日のエントリ「動画のキャプチャ」で動画の作成・配信についてまとめたのですが、それからだいぶ時間もたち色々と環境や設定が変わったので、現段階での方法をまとめようと思います。

基本的な流れはキャプチャ→MP4(H.264+AAC)へのエンコード→flvplayerによる配信となります。
エンコードに関しては「ニコニコ動画まとめwiki」というサイトでとても詳しくまとめられているので、そちらを見ればこのblogは読む必要は無いかもしれません。

まずキャプチャですが、このblogで公開している動画のソースは以下のパターンにわけられます。
1.Display2AVIでキャプチャしたWindows上のゲーム。

2.Monster XMxCaptureを使いD2キャプチャしたPSPのゲーム。

3.Monster XMxCaptureを使いD4キャプチャしたPS3のゲーム。

4.Monster XhunuaaCapを使い音声はSE-DIR2000Cでバーチャルサラウンド化してPCのサウンドボード経由でD4キャプチャしたPS3のゲーム。

2~4のキャプチャ方法の設定などは「Monster X Wiki」を参考にするといいでしょう。

1の場合ですが現在私は下記の図のような設定でキャプチャを行ってます。

Display2AVI

9月17日のエントリ「動画のキャプチャ」からの変更点はDisplay2AVIのバージョンが上がったのと、使用しているCODECがUt Video Codecになってます。
Ut Video Codecはフリーの可逆圧縮CODECで、Display2AVI付属のRuSH CODECよりも圧縮率は落ちますが格段に動作が軽く、マルチスレッドに対応しているのでデュアルコアやクアッドコアのCPUを搭載したPCでは非常に軽快に動作します。

キャプチャが完了したらエンコードの下準備をします。
まずVirtualDubModを使い不要な部分をカットします。
切り取る部分の先頭と最後尾を指定してカットを行い、再変換無しで保存します。
ソースがPSPをキャプチャしたものの場合はクロップフィルタを使いこの段階で周囲の黒枠をカットしておきます。
PSPやPS3のキャプチャのようにアナログ入力の場合、音声にノイズがのっていることがありますが、その場合は映像と音声を分離してそれぞれ保存してノイズ除去を行います。
私の場合はAUDIO CREATORというソフトを使いノイズの除去をしています。

次にAvisynthのスクリプトを記述したavsファイルを作成します。
Avisynthに関しては「Avisynth Wiki」を参考にするといいでしょう。
私の場合は以下のようなavsファイルを使ってフィルタをかけています。

SetMTMode(2,6)
LoadPlugin("FFT3dGPU.dll")
LoadPlugin("warpsharp.dll")

AVISource("aviファイルの場所")

ConvertToYV12()
Setmtmode(5)

fft3dGPU(sigma=1.0,beta=1.0,bw=8,bh=8,wintype=2,bt=3,sharpen=0,plane=0,mode=1,bordersize=1,NVPerf=false)

Setmtmode(2)

LanczosResize(横のドット数,縦のドット数)
WarpSharp(48,3,48,-0.6)

それぞれのコマンドについて簡単に説明します。

SetMTMode(2,6)
「SetMTMode」はマルチスレッドでAvisynthを動作させる場合のモードとスレッド数を指定する命令です。
当然のことながらこの命令はマルチスレッド対応版のAvisynthでないと使用できません。
「(2,6)」の前の2の部分がモードを指定するパラメータで6の部分がスレッド数を指定するパラメータになってます。
モードは通常2を指定します。
スレッド数はCPUのスレッド数を指定しますが、CPUをフルに活用したい場合はその1.5倍程度の数字を指定します。

LoadPlugin("FFT3dGPU.dll")
LoadPlugin("warpsharp.dll")
「LoadPlugin」はプラグインの読み込み命令です。
ここではfft3dGPUとwarpsharpという2つのフィルタのプラグインを読み込んでます。

AVISource("aviファイルの場所")
「AVISource」はavi形式の動画を読み込む命令です。
なお音声のノイズ除去等のため映像を音声が別々のファイルになっている場合は次のようにします。

video=AVISource("aviファイルの場所")
audio=WAVSource("wavファイルの場所")
AudioDub=(video,audio)

ConvertToYV12()
「ConvertToYV12」は色空間をYV12に変換する命令です。
使用しているフィルタがYV12に対応している場合、YV12で処理した方がRGBやYUY2より高速に処理できます。

SetMTMode(5)
次に使用する「fft3dGPU」がモード2での動作に対応していないのでモードを5に切り替えます。
5だと2よりもパフォーマンスは落ちますが、多くのフィルタが安定して動作します。

fft3dGPU(sigma=1.0,beta=1.0,bw=8,bh=8,wintype=2,bt=3,sharpen=0,plane=0,mode=1,bordersize=1,NVPerf=false)
「fft3dGPU」は2次元+時間軸のノイズフィルタをGPUを使って高速に処理できるようにしたものです。

SetMTMode(2)
再度「SetMTMode」を使いモードを2に戻します。

LanczosResize(横のドット数,縦のドット数)
「LanczosResize」は拡大縮小を行うフィルタです。
元のソースの解像度が1280x720の場合は640x360、1024x768の場合は512x384などを指定します。
なおPSPをキャプチャしたもののように元のサイズが小さくてリサイズの必要がない場合は、このフィルタは使用しません。

WarpSharp(48,3,48,-0.6)
「WarpSharp」はシャープネスフィルタです。
リサイズやノイズ除去を行ってぼやけた画像を補正するのに使ってます。

下準備ができたら、AviUtl拡張x264出力(GUI)NeroAACEncMP4Boxを使いMP4(H.264+AAC)へのエンコードを行います。
上の手順で作成したavsファイルをAviUtlに読み込ませ、プラグイン出力より拡張x264出力(GUI)を選択します。
私の場合は下記の図のような設定でエンコードを行っています。

x264

x264

x264

x264

x264

x264

x264

ビットレートは映像と音声を合わせて620Kbps以内に収まるようにするといいでしょう。
詳細設定のSARはピクセルの縦横比を指定します。
ソースがTV放送をD1(704x480)キャプチャしたもので画面の縦横比が16:9の場合は40:33、画面の縦横比が4:3の場合は10:11になります。
PCの画面をキャプチャしたものやD4キャプチャの場合は1:1になります。
スレッド数はCPUのスレッド数を指定しますが、CPUをフルに活用したい場合はその1.5倍程度の数字を指定します。

設定が完了したらエンコードを実行します。
エンコードのついでに適当なコマをJPGで保存してサムネイル用の画像を作成しておくといいでしょう。
エンコードが完了してMP4ファイルとサムネイル画像ができたらサーバにアップします。

最後にJW FLV MEDIA PLAYERを使い動画をサイトに張り付けて配信を行えるようにします。
上のリンク先よりダウンロードできるzipファイルに含まれる「player.swf」というファイルがプレイヤー本体です。
player.swfをサーバにアップしてサイトの動画を貼りたい場所に以下のようなタグを記入します。

<embed src="「player.swfのURL」" width="「動画の横幅」" height="「動画の縦幅+20」" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="「MP4ファイルのURL」&image=「サムネイル画像のURL」&autostart=false&width=「動画の横幅」&height=「動画の縦幅+20」"></embed>

JW FLV MEDIA PLAYERでは60fpsのMP4ファイルの再生は非常に重いので、その場合はMP4ファイルのダウンロードができるようにflashvarsのパラメータに
&showdownload=true&link=「MP4ファイルのURL」
を付け足してダウンロードボタンを表示するようにするといいでしょう。

| | コメント (0) | トラックバック (0)

2007年9月17日 (月)

動画のキャプチャ

さて今日はこのblogで公開している動画をキャプチャする際に使用しているソフトについて紹介がてら書いてみたいと思います。
※2008年12月17日のエントリ「MP4へのエンコード」で2008年12月現在の設定をまとめました。

私が使用しているキャプチャソフトは「Display2AVI」というソフトです。
このソフトはデスクトップの指定した領域や指定したウィンドウの画面を録画するソフトです。
その為フルスクリーンで動作するアプリケーションの録画には不向きだったりします。
このソフトの特徴としては

1.色空間をYUY2に変換して記録ができる。
2.付属の高速な可逆圧縮CODECを使う事で高画質な動画を作成できる。
3.PCにインストールされている他の汎用CODECでも記録可能である。

といった点が挙げられます。

私の場合は下の画像のような設定でキャプチャを行ってます。

Display2AVI

CODECの設定は下のような速度優先の設定にしてあります。

RuSH CODEC

1024X768という解像度でも動作は軽く、できあがる動画のファイルサイズも今まで試したいくつかのソフトに比べると小さくなります。
なおFLVファイルなどを作成した後も元動画を残しておきたい場合には、VirtualDubModなどで下のような設定で再エンコードをすると画質はそのままでファイルサイズを半分以下にできます。

RuSH CODEC

こうして録画した動画をFLVにエンコードする方法については9/7のエントリ「FLVへのエンコード」を参考にしてください。

| | コメント (0) | トラックバック (0)

2007年8月24日 (金)

動画の擬似配信

さて、このblogでは動画の掲載をしていますが、その方法を忘れないうちにまとめておきたいと思います。
※2008年12月17日のエントリ「MP4へのエンコード」で2008年12月現在の設定をまとめました。

このblogに掲載している動画は基本的にFLVというyoutubeなどでも使われてるのと同じ形式の動画ファイルにエンコードしてあります。
FLV形式でのエンコードの方法はまた後日まとめるつもりです(9/7のエントリFLVへのエンコードにてまとめました)。
そのFLV形式の動画ファイルをyoutubeに似た形式での動画の擬似配信を行っていますが、これには「JW FLV Player(Flash Video Player)」というソフトを利用してます。
このソフトはFLVファイルのダウンロードと動画の再生をあたかもストリーミング再生をしてるかのごとく行ってくれるFlashプログラムです。

上のリンク先よりダウンロードできるzipファイルに含まれる「flvplayer.swf」というファイルがプレイヤー本体です。
このファイルをサイトにアップロードして、これを呼び出すタグをページに埋め込む事で動画の擬似配信ができます。
呼び出しのためのタグは以下のようになります。

<embed src="「flvplayer.swfのURL」" width="「動画の横幅」" height="「動画の縦幅+20」" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="「FLVファイルのURL」&image=「サムネイル画像のURL」&autostart=false"></embed>

objectタグを使う場合は以下のようになります。

<object type="application/x-shockwave-flash" width="「動画の横幅」" height="「動画の縦幅+20」" wmode="transparent" data="「flvplayer.swfのURL」?file=「FLVファイルのURL」&image=「サムネイル画像のURL」"><param name="movie" value="「flvplayer.swfのURL」?file=「FLVファイルのURL」&image=「サムネイル画像のURL」" ><param name="wmode" value="transparent"></object>

但しobjectタグはblogなどへの貼り付けの場合は使えないこともありますので注意してください。

| | コメント (0) | トラックバック (0)