« Stage-14 アースライト | トップページ | Mission1 »

2007年9月 7日 (金)

FLVへのエンコード

さて今日はこのblogで公開している動画やyoutubeニコニコ動画(RC)にも使われているFLV形式の動画のエンコード方法について書きたいと思います。
出来上がったFLVファイルを使った動画の擬似配信の方法に関しては8/24のエントリ「動画の擬似配信」を参考にしてください。
FLVファイルへのエンコードに関しては既に「ニコニコ動画(RC) まとめWiki エンコード設定」という、各種ソフトウェアの導入から設定方法まで詳しく解説してあるサイトがありますので、そちらを見てもらえば私の書くものを読む必要は無いかもしれません。
ここでは私がどういう設定でエンコードしているのか、自分用のメモという意味を兼ねて書いていこうと思います。
※2008年12月17日のエントリ「MP4へのエンコード」で2008年12月現在の設定をまとめました。

さて実際のエンコードの手順ですが、私の場合はavisynthという動画編集フロントエンドソフトを使ってます。
avisynthに関しては「AviSynth Wiki」で詳しく解説されていますのでそちらを参考にしてください。
avisynthの特徴としては

1.オープンソースなソフトなため世界中で様々なフィルタの開発がされている。
2.YUY2やYV12といった色空間に対応しており、これらの色空間で作られた動画を高速に処理できる。

といった点が挙げられます。
その一方でテキストベースでの作業のためとっつきにくいといった面もあります。
またavisynthはあくまでもフィルタを通して加工した動画をアプリケーションに渡すフロントエンドなので、エンコードなどを行うにはVirtualDubやAviUtlといった動画編集ソフトが必要になります。
私の場合はVirturalDubModというソフトを利用しています。

avisynthではavsという拡張子のテキストファイルで編集手順を記述します。
私の場合は下のような内容のavsファイルを使ってます。

LoadPlugin("FFT3dGPU.dll")
LoadPlugin("warpsharp.dll")

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

ConvertToYV12()
LanczosResize(512,384)
fft3dGPU(sigma=1.0,beta=1.0,bw=8,bh=8,bt=3,sharpen=0,plane=0,mode=0,bordersize=1,useFloat16=true,NVPerf=false,reduceCPU=true)
WarpSharp(48,3,48,-0.6)
FlipVertical()

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

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

AVISource("aviファイルの場所")
「AVISource」はavi形式の動画を読み込む命令です。

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

LanczosResize(512,384)
「LanczosResize」は拡大縮小を行うフィルタです。
この場合は512x384という解像度へリサイズを行ってます。
ちなみに512x384はニコニコ動画にFLVファイルをアップロードする際に再エンコードが行われない最大の解像度になります。

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

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

FlipVertical()
「FlipVertical」は映像の上下を反転する命令です。
出来上がったaviファイルをFLVファイルに変換すると何故か上下が反転してしまいますので、あらかじめ逆さまにしておく必要があります。

今回はゲームの画面をキャプチャした動画がソースなので比較的シンプルなavsファイルになってますが、ソースがTVをキャプチャしたものやDVDなどの場合はインターレース解除や24fps化・120fps化などのフィルタを組み込む必要があります。

さてこうしてできたavsファイルをVirtualDubModに読み込ませてエンコードを行うのですが、この際のCODECは「VP6 VFW Codec」でないといけません。
動画編集ソフトのCODECの設定で「VP62 Heightened Sharpness Profile」を選択してください。
また音声は別ファイルでmp3にしておく必要がありますので、まず音声のみ保存でwavファイルに書き出しておいて、映像のエンコードは音声無しで実行してください。

wavファイルのmp3へのエンコードには「LameMP3」というソフトを使ってます。
LameMP3自体はコマンドラインで操作するようになっていますが、GUIで操作できるようにするフロントエンドがいろいろと作られてます。
私の場合は「RazorLame」というフロントエンドを使ってますが、「Lame Ivy Frontend Encoder」というのが使いやすくてお奨めなようです。
エンコードの設定は128kbpsの固定ビットレートで行ってます。

こうしてできたaviファイルとmp3ファイルを「ffmpegファイルセット」を使ってFLVファイルに変換します。
aviファイルとmp3ファイルをまとめて「FLV_ffmpegmux_D&D.bat」にDrag&DropすればFLVファイルが作成されます。
あとはできあがったFLVファイルが問題なく再生できるか「FLV Player」などのFLV再生ソフトを使って確認してみてください。

|

« Stage-14 アースライト | トップページ | Mission1 »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/452452/7839805

この記事へのトラックバック一覧です: FLVへのエンコード:

« Stage-14 アースライト | トップページ | Mission1 »