まえがき
ただのカット編集じゃ味気ない、ということでAviSysnthを使った簡単な映像効果についてまとめました。
ディゾルブ
いわゆる、ジワーっと場面が切り替わる効果です。トランジションでよくあるパターンです。
下の例では、v1とv2の間を60コマ(2秒)でつなぎます。
v1=Trim(1000,1999)
v2=Trim(4000,4999)
dissolve(v1,v2,60)
|
この場合、下の図のように映像が連結されるため、全体の長さは v1+v2 より60コマ少なくなります。
テロップ
テロップを出すフィルタは、オプションが結構たくさんあります。
Subtitle( 対象クリップ , 文字列 ) だけでも出ることは出るのですが、実用的に使うには下記のような設定項目を入れてやりましょう。
Subtitle( 対象クリップ , 文字列 , 横座標 , 縦座標 , 開始フレーム , 終了フレーム , フォント名 , フォントサイズ , 文字の色 , 文字のふちの色 , 字寄せ , 文字間 )
項目 | 説明 |
対象クリップ
|
テロップを乗せる対象のクリップを指定します。先ほどの dissolve の例で言うところの v1 とか v2 とかを指定することができるのですが、分からなければ last と入れてください。
|
文字列
|
具体的な文字列を指定します。" " で囲ってください。改行は入れられません。そんなときはSubtitleを2回使いましょう。
|
横座標
|
テロップの基点の横座標を数字で指定します。-1 とすると画面の真ん中と解釈されます。
|
縦座標
|
テロップの基点の横座標を数字で指定します。-1 とすると画面の真ん中と解釈されます。
|
開始フレーム
|
テロップを乗せる範囲を指定します。全域なら、開始フレームは 0 です。
|
終了フレーム
|
テロップを乗せる範囲を指定します。全域なら、終了フレームは FrameCount( 対象クリップ )-1 です。(対象クリップにはこの表の一番上の 対象クリップ で指定したものと同じものを指定してください。
|
フォント名
|
フォントを指定します。" " で囲ってください。例えば、"MS ゴシック" のように。
|
フォントサイズ
|
フォントサイズを指定します。単位はポイントだと思います。
|
文字の色
|
文字の色を数値で指定します。
R(赤)G(緑)B(青)の組み合わせで指定します。Windowsについてくる「ペイント」の色指定画面を思い出しましょう。
なぜか青がUになってますが気にせずに。この数字を元に以下のように記述します。
(赤)*65536+(緑)*256+(青)
上の例なら 44*65536+207*256+138 となります。
|
文字のふちの色
|
文字の縁取りの色を指定します。指定の仕方は文字の色と同じです。
|
字寄せ
|
字寄せは 1〜9 の数字で指定します。意味は次のとおり。
数字 | 横座標 | 縦座標 |
1 | 左端を基点にする | ボトムラインを起点にする |
2 | 中央を基点にする | ボトムラインを起点にする |
3 | 右端を基点にする | ボトムラインを起点にする |
4 | 左端を基点にする | ベースラインを起点にする |
5 | 中央を基点にする | ベースラインを起点にする |
6 | 右端を基点にする | ベースラインを起点にする |
7 | 左端を基点にする | トップラインを起点にする |
8 | 中央を基点にする | トップラインを起点にする |
9 | 右端を基点にする | トップラインを起点にする |
縦座標は、英語ノート(penmanship)の4本線を思い出してください。日本人にはあまり関係ないです。
|
文字間
|
文字の間隔を決めます。マイナスだと間が詰まり、プラスだと間が広がります。
|
例えば、「テロップ」という文字/画面中央/クリップ全域/フォントはMS明朝/大きさ40ポイント/白い文字/黒い縁取り/文字間は通常どおり というテロップを入れるには次のようにします。
Subtitle(last,"テロップ",-1,-1,0,FrameCount(last)-1,"MS 明朝",40,255*65536+255*256+255,0,5,0)
|
実際には次のような画面になります。
PinP(ピクチャーインピクチャー)
PinP、要するに映像の重ね合わせを行うには Layer を使います。
その前に、主画面と子画面になる映像を用意しておきましょう。
v1=MPEG2Source("D:\sample\hanabi1.d2v")
a1=MPASource("D:\sample\hanabi1 MPA T01 DELAY -66ms.mpa")
c1=AudioDub(v, a).DelayAudio(-0.066).AutoDeint("").BilinearResize(640,480)
v2=MPEG2Source("D:\sample\hanabi2.d2v")
a2=MPASource("D:\sample\hanabi2 MPA T01 DELAY -66ms.mpa")
c2=AudioDub(v, a).DelayAudio(-0.066).AutoDeint("").BilinearResize(320,240)
|
c1が親画面、c2が子画面になります。c2 は c1 の縦横半分のサイズになっていることが分かりますか?
Layer も先ほどの SubTitle に負けずたくさんのオプションがあるのですが、とりあえず PinP に必要なものだけを紹介します。
Layer ( 親画面 , 子画面 , "add", 透明度 , 横座標 , 縦座標 )
項目 | 説明 |
親画面
|
親画面のクリップを指定します。
|
子画面
|
子画面のクリップを指定します。
|
"add"
|
本当はもっとたくさんあるのですが、PinPに使うだけなら "add"=クリップを加える だけで十分でしょう。
|
透明度
|
"add" する強さを表します。0なら効果なし(透明)、255なら効果最大(不透明)です。
|
横座標
|
読んで字の如し
|
縦座標
|
同上
|
例えば、c1上の(100,50)の場所にc2を乗せるには次のようにします。
Layer(c1,c2,"add",255,100,50)
|
実際には次のような画面になります。
注意事項
ここで述べているような重い処理をすると、やはり不安定になることがあります。
特に、makeAVIS を使って作成した偽装 .avi でそうなることが多いです。
その場合、以前述べた方法を使って VirtualDubMod からいったん正規の .avi を書き出すといいです。
その際、お勧めの codec は、やっぱり huffYUV です。google で検索してください。
基本フィルタ一覧
AviSynth に標準でついているフィルタ一覧です。
ヘルプの和訳ですが、英語力に自信が無いので原文も確認してください。
これ以外にも、さまざまな人が作ったフィルタがあります。
また、単発で使用するのではなく、フィルタの重ねがけをすることで非常にバリエーション豊かな映像処理が可能です。
例えば、テロップをズームしたり、PinPの子画面を動かしたり、顔にモザイクを入れて音声を変えてみたり・・・
そういった工夫も楽しみの一つではないでしょうか?
クリップ作成用のソースフィルタ
フィルタ | 説明 | 対応形式 |
AviSource |
AVIファイルを開く。 |
RGB24, RGB32, YUY2, YV12 |
OpenDMLSource |
AVIファイルを開く。 |
RGB24, RGB32, YUY2, YV12 |
AviFileSource |
AVIファイルを開く。 |
RGB24, RGB32, YUY2, YV12 |
WavSource |
WAVファイルまたはAVIファイル中の音声を開く。 |
RGB24, RGB32, YUY2, YV12 |
DirectShowSource |
DirectShow経由でファイルを開く。 |
RGB24, RGB32, YUY2, YV12 |
SegmentedAviSource / SegmentedDirectShowSource |
100個までの連番ファイルを自動的に開くフィルタ。 |
RGB24, RGB32, YUY2, YV12 |
BlankClip / Blackness |
指定したフレーム数の単色、音声なしのクリップを作成するフィルタ。 |
RGB24, RGB32, YUY2, YV12 |
IPCSource |
別のプロセスとして動いているAviSynthと互換性のあるフレームサーバのチャネルを開く。 |
RGB24, RGB32, YUY2 |
ImageReader / ImageSource |
静止画を読み込んで動画クリップを作成するフィルタ。 |
RGB24, RGB32, YUY2, YV12 |
Import |
現在のスクリプトに外部のAviSynthスクリプトを導入する。 |
RGB24, RGB32, YUY2, YV12 |
画像処理用のフィルタ
フィルタ | 説明 | 対応形式 |
AddBorders |
画像の周りに黒い縁をつける。 |
RGB24, RGB32, YUY2, YV12 |
Blur / Sharpen |
シンプルな周囲3x3ピクセル分のぼかし/シャープフィルタ |
RGB24, RGB32, YUY2, YV12 |
ColorYUV |
輝度と色差を独立に調整する。 |
YUY2, YV12 |
ConvertBackToYUY2 |
YUY2→RGB変換をしたクリップを損失なくYUY2に戻す。 |
RGB24, RGB32, YUY2 |
ConvertToRGB |
RGB24のクリップを除き、RGB32に変換する。 |
RGB24, RGB32, YUY2, YV12 |
ConvertToRGB24 / ConvertToRGB32 / ConvertToYUY2 / ConvertToYV12 |
RGB24/RGB32/YUY2/YV12に変換する。 |
RGB24, RGB32, YUY2, YV12 |
Crop |
画像をクロップする。 |
RGB24, RGB32, YUY2, YV12 |
CropBottom |
画像の下をクロップする。 |
RGB24, RGB32, YUY2, YV12 |
GeneralConvolution |
一般的な畳み込み。(マトリックス演算) |
RGB32 |
GreyScale |
映像を白黒に変換する。 |
RGB24, RGB32, YUY2, YV12 |
HSIAdjust (removed in v2.53) |
V2.53で削除されたフィルタ。 |
RGB24, RGB32, YUY2, YV12 |
Invert |
映像を色を反転する。 |
RGB24, RGB32, YUY2, YV12 |
Layer |
2つの映像を重ねる。 |
RGB32, YUY2 |
Mask |
クリップにマスクをかけた部分を透明化する。 |
RGB32 |
ResetMask |
アルファチャンネル(透明色)を削除する。 |
RGB32 |
ColorKeyMask |
指定した色と近い色の領域を透明化する。 |
RGB32 |
Letterbox |
画像の上下(左右)を帯状に黒で塗りつぶす。 |
RGB24, RGB32, YUY2, YV12 |
Levels |
明るさ、コントラスト、ガンマを調整する。 |
RGB24, RGB32, YUY2, YV12 |
Limiter |
輝度、色差を指定の範囲にクリップする。 |
YUY2, YV12 |
MergeChroma / MergeLuma |
映像クリップの輝度だけ、色差だけを重み付けして重ね合わせる。 |
YUY2, YV12 |
Overlay |
2つのクリップを様々なオプションを使って合成できる。オーバーレイクリップの透明度の指定も可。 |
RGB24, RGB32, YUY2, YV12 |
ReduceBy2 |
画像のサイズを半分に縮小する。 |
RGB24, RGB32, YUY2, YV12 |
HorizontalReduceBy2 / VerticalReduceBy2 |
画像の水平/垂直のサイズを半分にする。 |
RGB24, RGB32, YUY2, YV12 |
RGBAdjust |
RGB、アルファの各チャンネルを別々に調整する。 |
RGB24, RGB32, YUY2 |
BicubicResize / BilinearResize / LanczosResize / Lanczos4Resize
/ PointResize |
映像の大きさを、様々なアルゴリズムで任意の解像度に変更する。 |
RGB24, RGB32, YUY2, YV12 |
SpatialSoften / TemporalSoften |
空間(2次元)/時間(3次元)方向に選択的にぼかすことで映像クリップからノイズを除去する。 |
YUY2, YV12 (only TemporalSoften) |
ShowAlpha |
クリップのアルファチャンネルを見る。 |
RGB32 |
SwapUV |
UV(色差)チャンネルを入れ替える。 |
YUY2, YV12 |
UToY / VToY |
U/V(色差)をY(輝度)にコピーする。画像サイズは半分になる。 |
YUY2, YV12 |
YToUV |
2つのクリップのY(輝度)をU/V(色差)に置き換える。画像サイズは倍になり、Yは50%グレーになる。Yを加えるにはMargeLunaを使う。 |
YUY2, YV12 |
Tweak |
明るさ、コントラスト、色相、彩度を調整する。 |
RGB24, RGB32, YUY2, YV12 |
エンコード用のフィルタ
フィルタ | 説明 | 対応形式 |
AlignedSplice / UnalignedSplice |
2つ以上のクリップを連結する。 |
RGB24, RGB32, YUY2, YV12 |
AssumeFPS / ChangeFPS / ConvertFPS |
フレームレート変更。フレーム数保持、クリップの時間保持などの違いがある。 |
RGB24, RGB32, YUY2, YV12 |
DeleteFrame |
指定フレームを削除。音声の長さは調整されない。 |
RGB24, RGB32, YUY2, YV12 |
Dissolve |
つなぎ目をオーバーラップさせながら、AlignedSpliceのようにクリップを連結する。 |
RGB24, RGB32, YUY2, YV12 |
DuplicateFrame |
指定フレームを複製する。音声の長さは調整されない。 |
RGB24, RGB32, YUY2, YV12 |
FadeIn / FadeIn2 / FadeOut / FadeOut2 / FadeIO / FadeIO2 |
クリップを音声を含めフェードイン/フェードアウトする。 |
RGB24, RGB32, YUY2, YV12 |
FreezeFrame |
クリップの指定範囲のフレームを1つのフレームで置き換える。 |
RGB24, RGB32, YUY2, YV12 |
Loop |
クリップの指定範囲を指定した回数繰り返す。 |
RGB24, RGB32, YUY2, YV12 |
SelectEven / SelectOdd |
奇数/偶数フレームだけを取り出したクリップを作成する。 |
RGB24, RGB32, YUY2, YV12 |
SelectEvery |
固定間隔でフレームを取り出す。SelectEven や SelectOdd を一般化したもの。 |
RGB24, RGB32, YUY2, YV12 |
SelectRangeEvery |
固定間隔で指定したフレーム数を取り出す。 |
RGB24, RGB32, YUY2, YV12 |
Trim |
クリップを指定した範囲でトリミングする。 |
RGB24, RGB32, YUY2, YV12 |
インターレース映像用のフィルタ
現在(v2.5xおよびそれ以前のバージョン)では、AviSynthは、インターレースを表すフラグを持っていません。
フィールドベースを表すフラグがあります。
しかし、期待に反して、このフラグはインターレースとは関係がありません。
実際、AviSynthのフィルタで変更しなければ、映像はプログレッシブもインターレースもすべてフレームベースです。
フレームベースの映像をフィールドベースに変えるには、SeparateFields か AssumeFieldBased のフィルタを使用します。
フィルタ | 説明 | 対応形式 |
AssumeFrameBased / AssumeFieldBased |
クリップがフレームベースかフィールドベースかを指定する。 |
RGB24, RGB32, YUY2, YV12 |
AssumeBFF / AssumeTFF |
クリップのフィールドオーダーを指定する。 |
RGB24, RGB32, YUY2, YV12 |
Bob |
Bobインターレース解除をする。 |
RGB24, RGB32, YUY2, YV12 |
ComplementParity |
トップフィールドとボトムフィールドの設定を入れ替える。実際の映像を加工するわけではない。 |
RGB24, RGB32, YUY2, YV12 |
DoubleWeave |
フィールドベースのクリップを Weave と同じように処理するが、2倍のフレームを生成する。 |
RGB24, RGB32, YUY2, YV12 |
Interleave |
複数のクリップから交互にフレームを取り出してインターリーブする。 |
RGB24, RGB32, YUY2, YV12 |
Pulldown |
元の映像の5フレーム毎に2フレームを選択する。 |
RGB24, RGB32, YUY2, YV12 |
SeparateFields |
フレームベースのクリップをフィールド別に分解する。 |
RGB24, RGB32, YUY2, YV12 |
SwapFields |
インターレース化されたフレームのフィールドを入れ替える。 |
RGB24, RGB32, YUY2, YV12 |
Weave |
クリップ内のフィールドのペアを組み合わせてインターレースフレームを作成する。 |
RGB24, RGB32, YUY2, YV12 |
音声フィルタ
v2.5以前では、これらの音声フィルタを使用する際に音声サンプルのビット数は16ビットに変換されます。
v2.5からは音声サンプルのビット数はフィルタの要求に応じて自動的に変換されます。
つまりほとんどのフィルタは複数の形式の入力を受け付けるが、あるフィルタがサポートしない入力形式だった場合は、そのフィルタが受け付ける形式のどれかに変換されるということです。
各フィルタがサポートする内部形式は、色空間で決まります。
ConvertAudio関数を使うと特定の音声形式に変換できます。
浮動小数点でサンプリングすると、AviSynth は音声データを出力する際に16ビット(整数)に変換します。
浮動小数点は正規のAVIデータではありません。
フィルタ | 説明 | 対応形式 |
Amplify / AmplifydB |
音声サンプルを増幅する。 |
16Bit, Float |
AssumeSampleRate |
音声の再生速度を調整する。 |
All |
AudioDub |
指定した映像と音声を結合する。 |
All |
ConvertAudioTo8bit / ConvertAudioTo16bit / ConvertAudioTo24bit /
ConvertAudioTo32bit / ConvertAudioToFloat |
音声サンプルのビット数を8/16/24/32/浮動小数点に変換する。 |
All |
ConvertToMono |
全ての音声チャンネルを統合する。 |
16Bit, Float |
DelayAudio |
クリップの音声を遅らせる。 |
All |
EnsureVBRMP3Sync |
シークやトリムの際に同期の取れていないmp3音声を修正する。 |
All |
GetChannel |
クリップから指定したチャンネルの音声を取り出す。 |
All |
GetLeftChannel / GetRightChannel |
クリップから左/右チャンネルの音声を取り出す。 |
All |
KillAudio |
クリップから音声を完全に消す。 |
All |
LowPassAudio / HighPassAudio (removed in v2.52) |
V2.52で削除されたフィルタ。 |
N/A |
MergeChannels |
複数の音声クリップのチャンネルを統合する。 |
All |
MixAudio |
複数のクリップの音声をミックスする。 |
16Bit, Float |
MonoToStereo |
2つのモノラル音声を1つのステレオ音声に変換する。 |
16Bit, Float |
Normalize |
クリップしない範囲でできるだけ波形を増幅する。 |
16Bit, Float |
ResampleAudio |
高品質な音声のリサンプル。 |
16Bit |
SuperEQ |
高品質な16バンドのイコライザ。 |
Float |
SSRC |
非常に高品質な音声のサンプリングレート変換。 |
Float |
TimeStretch |
ピッチをそのままに音声の速さを変更、あるいは音声の長さをそのままに音声のピッチを変更する。 |
Float |
Tone |
音声を生成する。 |
Float |
特別な、あるいは新種のフィルタ
フィルタ | 説明 | 対応形式 |
Animate / ApplyRange |
連続的に変化する(Animateの場合)、まはた一定の(ApplyRangeの場合)、あるフィルタを適用するメタフィルタ。 |
RGB24, RGB32, YUY2, YV12 |
ConditionalFilter / FrameEvaluate / ScriptClip / ConditionalReader |
ConditionalFilter はある条件が満たされる場合はソース1を、そうでなければソース2を返す。ScriptClip はフレーム毎に関数の評価結果を返す。 |
YV12 |
FixBrokenChromaUpsampling |
MS_DV コーデックは誤った色差を返すので、それを補正する。 |
YUY2 |
FixLuminance |
フィールド毎に輝度レベルが異なるクリップを補正する。 |
YUY2 |
FlipHorizontal / FlipVertical |
映像の左右/上下を反転する。 |
RGB24, RGB32, YUY2, YV12 |
ImageWriter |
フレームのイメージを保存する。 |
RGB24, RGB32, YUY2, YV12 |
PeculiarBlend |
各フレームをそれに続くフレームと特有の方法で合成する。 |
YUY2 |
Reverse |
クリップを逆転再生する。 |
RGB24, RGB32, YUY2, YV12 |
Subtitle |
1行のアンチエイリアス処理された文字列を指定範囲のフレームに加える。 |
RGB24, RGB32, YUY2, YV12 |
TCPServer |
ネットワーク越しにクリップを送信できるようにする。複数クライアントが同じサーバに接続可能。 |
All available |
TCPSource |
ネットワーク越しにクリップを送信できるようにする。複数クライアントが同じサーバに接続可能。 |
All available |
TurnLeft / TurnRight |
クリップを時計回り/反時計回りに90度回転する。 |
RGB24, RGB32, YUY2, YV12 |
WriteFile / WriteFileIf / WriteFileStart / WriteFileEnd |
テキストファイルに出力する。 |
RGB24, RGB32, YUY2, YV12 |
デバッグ用のフィルタ
フィルタ | 説明 | 対応形式 |
ColorBars |
任意サイズのSMTPEカラーバーのクリップを生成する。 |
RGB32 |
Compare |
2つのクリップを比較して、差異の情報を表示する。 |
RGB24, RGB32, YUY2 |
Histogram |
ヒストグラムを付加する。 |
YUY2, YV12 |
Info |
映像と音声の情報を表示する。 |
RGB24, RGB32, YUY2, YV12 |
MessageClip |
テキストメッセージのクリップを生成する。 |
RGB32 |
ShowFiveVersions |
5つの映像を左から右に互い違いに配置する。 |
RGB24, RGB32, YUY2 |
ShowFrameNumber / ShowSMPTE |
AviSynth が保持している フレーム番号/SMPTEタイムコードをフレームごとに表示する。 |
RGB24, RGB32, YUY2, YV12 |
StackHorizontal / StackVertical |
複数のクリップを左から右/上から下へ並べて表示する。 |
RGB24, RGB32, YUY2, YV12 |
Subtract |
2つのクリップ間の対応するピクセルの差分からなるクリップを生成する。 |
RGB24, RGB32, YUY2, YV12 |
Version |
短いバージョンとコピーライトの文章からなるクリップを生成する。 |
RGB24 |