FFmpegSource

FFmpegSource とは?

FFmpegSource - Doom9's Forum より。

  • ffmpeg がサポートするすべてのビデオ/オーディオフォーマットをサポートするビデオ入力/音声入力プラグイン。
  • フレームアキュレートなシークが可能(一部のコンテナを除く)。
  • matroska(mkv)に対しては、Haali のパーサが使用される。
    • ffmpeg のパーサは重大な問題を抱えているため、とのこと。
  • 他のフォーマット(コンテナ)に対しては、ffmpeg が使用される。
  • インデックス化が必要なため、ファイルオープンに少し時間がかかる。
    • v2.00 からインデックス化を別に実行することが可能になったため、あらかじめインデックスを作成しておけば、読み込み時間は従来のバージョンよりも短縮されうる。
  • Myrsloik 氏作。

入手先

制限

  • Haali Media Splitter が必要(ogm または MPEG PS/TS を開く場合)。
  • Haali Media Splitter はトランスポートストリームがパケット境界でカットされていることを要求するので、開く前に TsRemux を使ってストリームを修正すること。
  • LAVF デマルチプレクサのために、ほとんどの raw ストリームはエレメンタリ h264 やその他の MPEG ビデオストリームのように適切に機能することができない。
  • FFAudioSource() は FFVideoSource() によって生成されるインデックスを作り直さなければならない。このため、次のコード
    AudioDub(FFVideoSource(X), FFAudioSource(X))
    
    は、インデックス化が 2 パス必要になる。費やされる時間を除けば無害。対処法としては、先に音声を読み込むか、
    A = FFAudioSource(X)
    V = FFVideoSource(X)
    AudioDub(V, A)
    
    または、FFIndex() を使用する。
    FFIndex(X)
    AudioDub(FFVideoSource(X), FFAudioSource(X))
    

既知の問題

  • トランスポートストリーム(TS)に格納された h264 で、デコードノイズが発生することがある。
  • FFIndex() は、インデックス時に致命的なデコードエラーを何も言わずに無視する。つまり、たとえ FFIndex() が成功したとしても、特定のトラックのインデックスが失敗しているおそれがある。

フォーマット別互換性

  • ビデオ
    • AVI, MKV, MP4, FLV: フレームアキュレート。
    • WMV: フレームアキュレート(?)だが、avformat ライブラリはキーフレームを比較的遠くに選ぶようだ。
    • OGM: フレームアキュレート(?)。
    • VOB, MPG: シークはときどき 1 〜 2 フレームずつズレるようだ。
    • M2TS, TS: シークはときどき数フレームずつズレるようだ。
    • 静止画像: seekmode = -1 に設定されれば、ほとんどのフォーマットを開くことができる。アニメーション未対応。

収録されている関数/ツールなど

FFMS2.dll に収録されている関数

  • FFIndex (バージョン 2.00 以降)
    • 単独でインデックス化を実行し、音声トラックを wave64 ファイルとして書き出す。インデックスを 2 度作り直すのを回避するのに便利。音声トラックが非サポートであるか壊れている場合、正常にインデックスされない可能性がある。
  • FFVideoSource (バージョン 2.00 以降)
    • ビデオを開く。インデックスファイルが見つからない場合はインデックス化を実行する。
  • FFAudioSource
    • 音声を開く。インデックスが見つからないか、リクエストされたトラックがインデックスにない場合はすべてのトラックのインデックス化を実行する。
  • FFPP
    • 上記 FFmpegSource のポストプロセッシングに関する機能を分離独立させたフィルタ。可能なときは FFVideoSource の pp パラメータを使用すること(ビデオ量子化器を利用できるため、うまくビデオに適応する)。
  • SWScale(バージョン 1.19 以降)
    • 色空間変換とリサイズ用のフィルタ。
  • FFSetLogLevel
    • FFmpeg のロギングレベルを設定する。デフォルト: -8(quiet)。FFmpeg のデフォルトは 16。
  • FFGetLogLevel
    • 現在のロギングのレベルを整数として返す。

FFMS2.avsi に収録されている関数

  • FFmpegSource2(バージョン 2.00 beta 7 以降)
    • FFmpegSource v1.x 系のシンタックスに似せた関数。atrack=-1 でオーディオとビデオの両方を読み込むのに便利。動作には ffms2.avsi が必要。TheFluff 氏作。
  • FFImageSource
    • 画像リーダーとして使用するために最適に設定されたオプションを持つ FFVideoSource の別名。最大限の互換性のためにキャッシュとシークを無効化する。
  • FFFormatTime
    • ミリ秒単位で与えられた時間を h:mm:ss.ttt 形式の文字列に整形するヘルパー関数。
  • FFInfo
    • 現在のフレームに関する一般的な情報を表示するためのヘルパー関数。すべての値がすべてのソースモードでエクスポートされるとは限らず、したがってすべての値がつねに表示されるわけではない。

ツール

  • ffmsindex.exe
    • インデックス作成用のコマンドラインツール。

パラメータ

  • source: ソースファイル。
  • indexmask と dumpmask: どの音声トラックをディスクにインデックス化するか、または、書き出すか。どっちみち同じ作業が実行されるため、トラックをダンプすることはインデックス化をも含む。7 がトラック 1-3 の書き出しに相当することになるバイナリマスク。無音のトラックは無視される。-1 はすべてのトラックを書き出す。
  • audiofile: ダンプされた音声に対して使用するファイル名。複数ファイルアクセスエラーを回避するにはトラック番号変数を含める。変数は大文字と小文字を区別する。利用可能な変数は、以下のとおり:
    • %sourcefile%: ソースパラメータと同じ。そこから音声がデコードされるファイル。
    • %trackn%: トラック番号。
    • %trackzn%: 2 桁になるように 0 で埋められたトラック番号。
    • %samplerate%: サンプルレート。
    • %channels%: チャンネル。
    • %bps%: ビット毎秒。
    • %delay%: ディレイ。オーディオストリームの中で初めて見つかるタイムスタンプ。
  • overwrite: たとえ有効なインデックスが存在しても再インデックス化を強制。
  • track: 関連するデマルチプレクサによって確認されるトラック番号。0 から始まり、-1 は 1 つめの適切なトラックを選ぶことを意味する。
  • timecodes: タイムコードを出力するファイル。同名のファイルが存在する場合は上書きされる。
  • cache: インデックス情報をあとで使用するために書き出す。既存のインデックスの読み込みと新しいインデックスの書き出しの両方をコントロールする。
  • cachefile: キャッシュ情報をどこに書き出すか。
  • pp: ポストプロセッシングフィルタ。空("")なら処理を行わない。現時点ではどのような効果があるか不明なため、autoq オプションを使用しないことが推奨されている。利用可能なポストプロセッシングフィルタについては、ffmpegsource.html 内の「PP string format」または下記の「利用可能なポストプロセッシングフィルタ」を参照。
  • threads: 使用されるデコーダのスレッド数を設定。デフォルトは、Windows によって報告される論理 CPU の数。デコーダが未実装なら無視される。
  • seekmode: シークの処理の仕方をコントロールする。mataroska(mkv)ファイルまたは Haali Media Splitter で開かれたファイルは seekmode=1 相当をつねに使用するため効果なし。
    • -1: 巻き戻しなしのリニアアクセス。次に続くリクエストされるフレーム番号が最後のフレーム番号よりも大きくないとエラーを投げる。画像を開くことのみを対象としているが、いくつかの不透明なビデオフォーマットについても有効かもしれない。
    • 0: リニアアクセス。遅いという言葉の定義そのものだが、いくつかのフォーマットを「使用可能」にするはず。
    • 1: セーフノーマル(safe normal)。シークの決定を報告されたキーフレームの位置に基づいて行う。
    • 2: アンセーフノーマル(unsafe normal)。1 と同じだが、正確な目的(destination)が解き当てられなければならない場合でもエラーが投げられない。
    • 3: アグレッシブ。近接するキーフレームが存在することがわからない場合も順方向へシークする。テスト目的と avformat がキーフレームを適切に報告しないコンテナに対してのみ有用。
  • rffmode: ビデオストリーム内の RFF フラグ*1の取り扱い方法を制御する。
    • 0: ignore flags (フラグを無視)
    • 1: honor pulldown flags (プルダウンフラグを優先)
    • 2: force film (強制フィルム変換)
  • widthheight: リサイズ後の幅と高さ。0 以下なら入力と同じ。
  • resizer: 色差平面のリサンプリングと通常のリサイズに使用されるリサイザの選択。指定可能なリサイザは次のとおり:
    • FAST_BILINEAR, BILINEAR, BICUBIC, X, POINT, AREA, BICUBLIN, GAUSS, SINC, LANCZOS, SPLINE
  • colorspace: 変換後の色空間。指定可能な名前は以下のとおり。空の文字列("")を指定した場合は入力と同じ。
    • YV12, YUY2, RGB24, RGB32
  • errorhandling: 音声デコードエラーが発生した時の処理方法
    • 0: インデックス化を中断。
    • 1: 影響を受けたトラックをクリアし、続行。
    • 2: そのトラックをインデックス化するのを停止するが、これまでのすべてのインデックス項目をキープする。
    • 3: 続行。
  • adjustdelay: 音声トラックに適切な遅延を適用することを試みる。デフォルトは -1 で、ほとんどの場合に正しい結果をもたらす。
    • -3: 遅延調節なし。
    • -2: 時間 0 に対して調節する。
    • -1: 最初のビデオトラックに対して調節し、ビデオトラックがなければ時間 0 に対して遅延を調節する。
    • 任意の有効なトラック番号: 指定されたトラックに対して調節する。

エクスポートされる AviSynth 変数

  • FFSAR_NUM
  • FFSAR_DEN
  • FFSAR
    • コンテナによって指定される再生アスペクト比。FFSAR_NUM と FFSAR_DEN は、比の有理数を構成する。FFSAR は、便宜のためにのみ提供されている。計算できない場合は設定されない可能性がある(FFSAR_DEN=0)。
  • FFCROP_LEFT
  • FFCROP_RIGHT
  • FFCROP_TOP
  • FFCROP_BOTTOM
    • コンテナによって指定される再生中のクロッピング。
  • FFCOLOR_SPACE
    • 出力色域。入力として ColorMatrix() によって使用される値と一致する。
  • FFCOLOR_RANGE
    • 出力によって使用される範囲。
      • 0: 未知/未指定
      • 1: 制限された範囲
      • 2: フルレンジ
  • FFPICT_TYPE
    • 直前にリクエストされたフレームのピクチャタイプを、以下にリストアップされた文字のアスキー番号で表した値。AviSynth 内で実際の文字に変換するには Chr() を使用すること。適切な結果を得るには、AviSynth の条件スクリプティング(ConditionalFilter など)の中で after_frame=true を使用する。rffmode=0 のときのみ設定される。文字の FFmpeg のソース定義は以下のとおり:
      • I: Intra
      • P: Predicted
      • B: Bi-dir predicted
      • S: S(GMC)-VOP MPEG4
      • i: Switching Intra
      • p: Switching Predicted
      • b: FF_BI_TYPE (no good explanation available)
      • ?: Unknown
  • FFVFR_TIME
    • ソースフレームの実時間(ミリ秒)。いかなるタイプの CFR 変換も行われていないときにのみ設定(rffmode および fpsnum はデフォルトのまま)。

利用可能なポストプロセッシングフィルタ

pp パラメータで指定可能なポストプロセッシングフィルタ(ffmpegsource.html より)。

フィルタオプション説明
ショートネームロングネームショートネームロングネーム
**aautoqCPU power dependent enabler
cchromchrominance filtering enabled
ynochromchrominance filtering disabled
nnolumaluma filtering disabled
hbhdeblock(2 threshold) 1. difference factor: default=32, higher -> more deblocking. 2. flatness threshold: default=39, lower -> more deblocking. the h & v deblocking filters share these. so you can't set different thresholds for h / vhorizontal deblocking filter
vbvdeblock(2 threshold)vertical deblocking filter
hahadeblock(2 threshold)horizontal deblocking filter
vavadeblock(2 threshold)vertical deblocking filter
h1x1hdeblockexperimental h deblock filter 1
v1x1vdeblockexperimental v deblock filter 1
drderingderinging filter
alautolevelsautomatic brightness / contrast
ffullyrangestretch luminance to (0..255)
lblinblenddeintlinear blend deinterlacer
lilinipoldeintlinear interpolating deinterlace
cicubicipoldeintcubic interpolating deinterlacer
mdmediandeintmedian deinterlacer
fdffmpegdeintffmpeg deinterlacer
l5lowpass5FIR lowpass deinterlacer
dedefaulthb:a,vb:a,dr:a
fafasth1:a,v1:a,dr:a
acha:a:128:7,va:a,dr:a
tntmpnoise(3 threshold) 1. <= 2. <= 3. larger -> stronger filteringtemporal noise reducer
fqforceQuant<quantizer>force quantizer

使用法

<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...
  • long form example:
    vdeblock:autoq/hdeblock:autoq/linblenddeint    default,-vdeblock
  • short form example:
    vb:a/hb:a/lb                                   de,-vb
  • more examples:
    tn:64:128:256

メモ(過去の変更点など)

  • FFMpegSource.dll に同梱されているその他の DLL ファイル(avcodec-51.dll、avformat-51.dll、avutil-49.dll、swscale-0.dll、zlib1.dll)は、あらかじめパスの通ったディレクトリ(例: Windows XP の場合 C:\WINDOWS\SYSTEM32 など)にコピーします。もしくは、AVS ファイルを開くアプリケーションと同じディレクトリ(例: AvsP で開く場合は AvsP.exe のあるディレクトリ)でもかまいません。
    • 2007-10-07 23:28:52 追記: v1.13 同梱の ffmpegsource.html によれば、現在の作業ディレクトリやプラグインのオートローディング用のディレクトリ(通常は、C:\Program Files\AviSynth 2.5\plugins)でもかまわないそうです。
    • 2008-01-05 23:40:55 追記: バージョン 1.14 から、必要なライブラリは静的にリンクされるようになったため、不要となりました。
  • FFMpegSource.dll は AviSynth 用の外部プラグインですので、LoadPlugin 関数またはプラグインのオートローディング機能を使って読み込みます。
  • バージョン 1.3 から、ビデオ読み込み用フィルタの名前が FFmpegSource から FFVideoSource に変更されました。また、オーディオ読み込み用のフィルタとして、FFAudioSource と FFAudioRefSource が追加されています。
  • バージョン 1.4 から、ビデオ読み込み用の FFVideoSource とオーディオ用の FFAudioRefSource が統合され、FFmpegSource という名前のフィルタになっています。FFAudioSource は削除されました。niiyan/2007-07-19 も参照。
  • バージョン 1.14 から、音声入力用の FFAudioSource が実験的に追加されました。
  • バージョン 2.00 から、インデックス作成用の FFIndex が追加されています。2.00 beta 2 から同梱されているコマンドラインツールの ffmsindex.exe を使ってインデックス化を行うことも可能です。
  • バージョン 2.00 から、ビデオ入力用のフィルタは FFVideoSource になっています。ビデオ/オーディオ用の FFmpegSource は廃止されたようです。
  • バージョン 2.00 beta 1 には、音声入力用のフィルタは含まれていません。2.00 beta 2 で FFAudioSource が復活しましたが、この時点では MKV ファイルのみのサポートにとどまっています。
  • バージョン 2.00 beta 8 では、ffmpeg-mt*2 を使ってコンパイルされたバージョン(FFmpegSource-2.00b8-mt.rar)も公開されています。
  • バージョン 2.00 beta 9 では、FFNoLog が削除され、代わりに FFSetLogLevel と FFGetLogLevel が追加されています。

関連リンク

備考

  • 上記の説明は、同梱されているドキュメントおよび FFmpegSource - Doom9's Forum を参考に作成しました。
  • バージョンによっては、パラメータなどがこのページの説明と異なる可能性があります。

*1 参考: 2000-11(まるも製作所)
*2 マルチスレッド対応版 ffmpeg
*3 参考: Aegisub - 字幕制作

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