MP4へのエンコード
以前2007年8月24日のエントリ「動画の擬似配信」、9月7日のエントリ「FLVへのエンコード」、9月17日のエントリ「動画のキャプチャ」で動画の作成・配信についてまとめたのですが、それからだいぶ時間もたち色々と環境や設定が変わったので、現段階での方法をまとめようと思います。
基本的な流れはキャプチャ→MP4(H.264+AAC)へのエンコード→flvplayerによる配信となります。
エンコードに関しては「ニコニコ動画まとめwiki」というサイトでとても詳しくまとめられているので、そちらを見ればこのblogは読む必要は無いかもしれません。
まずキャプチャですが、このblogで公開している動画のソースは以下のパターンにわけられます。
1.Display2AVIでキャプチャしたWindows上のゲーム。
2.Monster XでMxCaptureを使いD2キャプチャしたPSPのゲーム。
3.Monster XでMxCaptureを使いD4キャプチャしたPS3のゲーム。
4.Monster XでhunuaaCapを使い音声はSE-DIR2000Cでバーチャルサラウンド化してPCのサウンドボード経由でD4キャプチャしたPS3のゲーム。
2~4のキャプチャ方法の設定などは「Monster X Wiki」を参考にするといいでしょう。
1の場合ですが現在私は下記の図のような設定でキャプチャを行ってます。
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)・NeroAACEnc・MP4Boxを使いMP4(H.264+AAC)へのエンコードを行います。
上の手順で作成したavsファイルをAviUtlに読み込ませ、プラグイン出力より拡張x264出力(GUI)を選択します。
私の場合は下記の図のような設定でエンコードを行っています。
ビットレートは映像と音声を合わせて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)