ConvertFPS

ConvertFPS (clip, float new_rate, int "zone", int "vbi")
ConvertFPS (clip, int numerator [, int denominator], int "zone", int "vbi")
ConvertFPS (clip1, clip2, int "zone", int "vbi")
ConvertFPS (clip, string preset, int "zone", int "vbi")

このフィルタは、フレームをドロップしたり挿入したりすることなく clip のフレームレートを new_rate に変換しようと試み、スタンドアローンのコンバータボックスと同様の結果を伴うスムーズな変換を提供します。出力されるクリップは clip と(ほぼ)同じ持続時間を持ちますが、フレーム数はターゲットとソースのフレームレートの比率に比例して変化します。

v2.56 から、clip2 が存在する場合、clip1 のフレームレートは clip2 のそれに合わせて調節されます。

v2.57 から、フレームレートに関する挙動が少し変更されました。AssumeFPS を参照してください。

このフィルタには、2 つの動作モードがあります。オプションの実引数 zone が指定されなかった場合、隣接するビデオフレームの相対的なタイミングに比例してブレンド係数による重み付けを行って、それらのフレームをブレンドします(「ブレンドモード」)。zone が指定された場合、新しいソースフレームが開始されるとき、すなわち、通常はターゲットフレームの中間のどこかにあるときはいつでも、1 つのビデオフレームから次のビデオフレームへ切り替わります(「スイッチモード」)。スイッチモードは、出力がテレビで表示されると仮定します。テレビでは、各フレームがトップからボトムへスキャンされます。zone パラメータは、現在のフレームが次のフレームへとブレンドされるトランジション領域の高さを指定します。

ブレンドモードは、わずかではありますが、目に見えるモーションブラーを引き起こすでしょう。これは、フレームレート変換の典型的な人工ノイズで、市販のビデオテープやテレビ番組でも見受けられます。インターレースビデオを処理するときは、インターレースフレームにではなく、個々のフィールドに対してフィルタを作用させることが重要です(下の例を参照)。

スイッチモードはモーションブラーを避けるための試みですが、わずかなフリッカ*1とモーションノイズという犠牲を払います。水平方向と垂直方向のパン*2は、若干の揺れを見せるかもしれません。さらに、この変換によって生成されるフレームは、動きのあるシーンで「壊れた」あるいは「曲がった」垂直線を表示します。シーントランジション(場面転換)は、1 つのフレームの真ん中で起こるかもしれません。それにもかかわらず、「ブレンドモード」よりも結果はぼやけないように見えます。

いずれのモードも完璧ではありません。どちらを選ぶかは、個人的な好みや変換されるビデオによります。おそらくスイッチモードは、出力がコンピュータ画面ではなくテレビに表示される場合にのみ適しているでしょう。

フレームレート変換は、もともと難しいものです。このフィルタは、商業的なセミプロレベルの変換システムで一般的によく使われている 2 つの方法を実装しています。その結果は、概ねかなり良好です。より精巧なシステムでは、動き補間アルゴリズムを採用しています。動き補間アルゴリズムは、正しい結果を得るのは難しいものの、もし正確に行われた場合には優れた結果をもたらします。

このフィルタで変換されたビデオは、再変換されるべきではありません。次の世代では、不鮮明さが急速に増します。

音声データは、このフィルタによって影響を受けません。音声は同期されたままですが、変換後、音声データの長さはビデオデータの長さとわずかに異なるかもしれません。これは、出力が整数のフレームのみを含むことができるからです。この影響は、短いクリップほどより顕著になります。長さの違いは、無視されるべきです。

パラメータ:

new_rate目標のフレームレート。整数または浮動小数点数。ブレンドモードでは、new_rate は、少なくともソースのフレームレートの 2/3(66.7%)でなければなりません。さもなければ、エラーが発生します。これは、フレームのスキップを防ぐためのものです。もしそれよりもフレームレートを落とす必要があるのなら、スイッチモードを使用してください。
zone(オプション)指定された場合、このフィルタをスイッチモードにします。0 以上の整数。もし 0 なら、ハードスイッチを実行します。すなわち、スイッチラインの下にすぐに次のフレームを表示します。0 より大きい場合は、トランジション領域の高さ(ライン単位)を指定します。トランジション領域では、1 つのフレームが徐々に次のフレームにブレンドされます。フルサイズのビデオ(有効走査線数 480/576)の場合は、zone=80 が好結果をもたらします。トランジションは、PeculiarBlend() と同じ方法で行われます。zone は、ソースフレームの持続時間に相当する、目標フレームの走査線数以下でなければなりません。これは、一般的には目標フレームの高さの 5/6 ないし 6/5、すなわち、数百ラインです。これより大きな値が選択された場合、エラーが発生します。
vbi(オプション)スイッチモードにおいて、このフィルタが垂直帰線消去期間(VBI)*3に対してタイミング補正を適用すべきであることを明示します。目標フレームの VBI の高さを示す 0 より大きな整数(ライン単位)。一般的には、PAL は vbi=49、NTSC は vbi=45 ですが、これらの値は決定的ではありません。ブレンドモードでは無視されます。

使用例 NTSC->PAL 変換:

AVISource("NTSC_clip.avi")             # クリップの取得
Bob(height=576)                        # フィールドを分離してフルスケールへ補間。
BicubicResize(768,576)                 # PAL の正方ピクセルフレームサイズにリサイズ(ITU-R BT.601 向けには 720,576 を使用)。
ConvertFPS(50)                         # ブレンドモードを使って、フィールドレートを PAL に変換。
SeparateFields.SelectEvery(4,0,3)      # Bob を取り消して、偶数フィールドファーストにする。奇数フィールドファーストにするには SelectEvery(4,1,2) を使う。
Weave                                  # Bob の取り消しを終える。

この使用例は、フレームベースの NTSC 素材や、テレシネフィルム(映画)でも動作するでしょう。しかし、フィルム素材については、逆テレシネフィルタを使ってフレームレートを 23.976 から 25fps にスピードアップしたほうがいい結果が得られます。

すべてのパラメータ値が、サニティチェック*4されるわけではありません。

変更点:

v2.57preset オプションを追加。フレームレートの挙動を変更。ConvertFPS に対する YV12 と RGB のサポート、ブレンド比率を修正。
v2.56ChangeFPS に clip2 オプションを追加、AssumeScaledFPS を追加
v2.55AssumeFPS に clip2 オプションを追加
v2.54ChangeFPS に linear=true/false を追加

$ 原文 Date: 2006/12/06 20:33:16 $


註: このページは、AviSynth 2.5.7 に同梱されているマニュアル(英語版)の日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/fps.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。


最終更新日時: 2014-03-11 (火) 03:47:32 (2052d)