FPS

AssumeFPS

AssumeFPS (clip, float fps, bool "sync_audio")
AssumeFPS (clip, int numerator [, int denominator], bool "sync_audio")
AssumeFPS (clip1, clip2, bool "sync_audio")
AssumeFPS (clip, string preset, bool "sync_audio")

AssumeFPS フィルタは、フレーム総数を変えずにフレームレートを変更します(ビデオの再生を速くするか、もしくは遅くします)。フレームレートパラメータ(fps)だけを設定します。
sync_audio が true なら、同じ割合で音声サンプリング周波数*1も変更します。生成される音声のピッチは、シフトされます*2

これはまた、音声のサンプリング周波数のみを変更する方法でもあります。

v2.55 からは、clip2 が指定されている場合、clip1 のフレームレートは clip2 のそれに合わせて調節されます。これは、フレームレートがわずかに異なる 2 つのクリップを結合したいときに役立ちます。

v2.57 から、フレームレートに関する挙動が少し変更されました。おもな問題は、ユーザーがフレームレートを浮動小数点数で指定することを許可されているにもかかわらず、NTSC (FILM と Video)規格と PAL 規格はフレームレートとして比を要求するということです。これに加えて、AviSynth はフレームレートを比としてエクスポートします。このため、浮動小数点数を指定したとき、その値は比に変換されます。規格の比は、23.976 (FILM)は 24000/1001、29.97 (ビデオ)は 30000/1001 によって与えられます。これらの浮動小数点数を指定するとき、それらの値は AviSynth によって比としてエクスポートされますが、しかし規格の比としてエクスポートされるのではありません。この理由のひとつは、それらの浮動小数点数は近似値であるということです(24000/1001 = 23.9760239760... ということを忘れないでください)。AviSynth が正しい比の選び方を知るにはどのようにすればいいでしょうか。この問題を克服するために、ユーザは AssumeFPS(24000,1001) もしくは AssumeFPS("ntsc_film") を使うことができます。

もうひとつの問題は、変換された浮動小数点数が(v2.56 以前は)非常に大きな分子(numerator)と分母(denominator)をもたらし、プレーヤーをクラッシュさせる 64 ビット精度でエクスポートされたことです。この問題を克服するために、内部にスマートな浮動小数点比が追加され、フレームレートは小さな数の比により正確に近似されます。例えば AssumeFPS(23.976) は、Info を使って確認できるように AssumeFPS(2997,125) に変換されます。

プリセット:

規格分子(numerator)分母(denominator)
"ntsc_film"240001001
"ntsc_video"300001001
"ntsc_double"600001001
"ntsc_quad"1200001001
"ntsc_round_film"2997125
"ntsc_round_video"2997100
"ntsc_round_double"299750
"ntsc_round_quad"299725
"film"241
"pal_film"251
"pal_video"251
"pal_double"501
"pal_quad"1001

使用例 PAL +4% テレシネ変換:

AVISource("FILM_clip.avi")             # 24fps のクリップを取得
LanczosResize(768,576)                 # PAL の正方ピクセルフレームサイズにリサイズ。
AssumeFPS(25, 1, true)                 # フレームレートを PAL に変換。音声も調節。
SSRC(44100)                            # 音声サンプリング周波数を標準レートに戻す。

この 4% のスピードアップは、24fps のフィルムを PAL 方式のテレビで表示するために慣習的に使用されます。ピッチとテンポのわずかな増加は、PAL 素材の視聴者から快く受け入れられます。

AssumeScaledFPS

AssumeScaledFPS (clip, int "multiplier", int "divisor", bool "sync_audio")

AssumeScaledFPS フィルタは、フレーム総数を変えずにフレームレートの比率を変更します。分子に multiplier (乗数)を掛け、分母に divisor (除数)を掛けます。得られた有理の FPS 分数は正規化*3されます。得られた分子か分母のいずれかが 31 ビットを超えた場合、結果は丸められ、比率が変更されます。これは、正確な有理のスケーリング(拡大縮小)がクリップの FPS プロパティに適用されることを可能にします。

sync_audio が true なら、音声のサンプリング周波数も同じ比率で変更し、生成される音声のピッチはシフトされます。

v2.56 以降で利用可能。

ChangeFPS

ChangeFPS (clip, float fps, bool "linear")
ChangeFPS (clip, int numerator [, int denominator], bool "linear")
ChangeFPS (clip1, clip2, bool "linear")
ChangeFPS (clip, string preset, bool "linear")

ChangeFPS は、フレームを削除するか複製することによって、フレームレートを変更します。

v2.05 までのバージョンでは、再生速度と再生時間を保持するために、ビデオは切り捨てられるか、もしくは補填されます(フレーム数は変更されませんでした)。v2.05 より後のバージョンでは、フィルタの挙動が変更され、フレーム数は ConvertFPS のように増加または減少されます。

v2.54 において、ChangeFPS に linear オプション(true または false)が追加されました。これは、フレームをスキップするときに、AviSynth に線形的にフレームをリクエストさせます。

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

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

使用例 PAL->NTSC 変換:

AVISource("PAL_clip.avi")              # クリップを取得
Bob(height=480)                        # フィールドを分離して、高さをフルサイズに補間する。
BicubicResize(640,480)                 # NTSC 方式の正方ピクセルフレームサイズにリサイズする。
ChangeFPS(60000, 1001)                 # フィールドを複製することによって、フィールドレートを NTSC 方式に変換する。
SeparateFields.SelectEvery(4,0,3)      # Bob を取り消して、偶数フィールドファーストにする。奇数フィールドファーストにするには SelectEvery(4,1,2) を使う。
Weave                                  # Bob の取り消しを終了する。

この効果は、3-2 テレシネプルダウンに似ています。PAL 素材の正規の視聴者は、NTSC 素材の視聴者がテレシネ化されたフィルムに関して簡単に無視するような、動きのカクカクに気づくかもしれません。

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 パラメータは、現在のフレームが次のフレームへとブレンドされるトランジション領域の高さを指定します。

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

スイッチモードはモーションブラーを避けるための試みですが、わずかなフリッカ*4とモーションノイズという犠牲を払います。水平方向と垂直方向のパン*5は、若干の揺れを見せるかもしれません。さらに、この変換によって生成されるフレームは、動きのあるシーンで「壊れた」あるいは「曲がった」垂直線を表示します。シーントランジション(場面転換)は、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)*6に対してタイミング補正を適用すべきであることを明示します。目標フレームの 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 にスピードアップしたほうがいい結果が得られます。

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

変更点:

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:46 (3692d)