前置き
Avisynth を初めて使うときに一番困る事は、「動画読み込み関数(メディアファイルフィルタ)は何を使えばいいか?」という事ではないでしょうか?
Avisynth には色々なファイル入力方法がありますが、その中でも重要で、また選択に迷うであろう DirectShowSource と AviSource の比較をしてみたいと思います。また外部プラグインではありますが、個人的におすすめしたい FFmpegSource も合わせて紹介します。
比較対象
比較表
関数 | 読込方式 | 対応形式 | 制限/備考 |
---|---|---|---|
AVISource | Video for Windows (Windows API) | AVI | 拡張子が .avi であること コーデックが導入されていること |
DirectShowSource | DirectShow (Windows API) | 制限無し | コーデックが導入されていること スプリッターが導入されていること |
FFmpegSource | FFmpeg (GNU program) | 制限無し | FFmpegでサポートされた形式であること |
上の表をみて頂くと分かるのですが、一番大きな違いは、AVISource は拡張子が AVIファイル(拡張子がavi)であるファイルしか読み取る事が出来ない事です。つまりは昨今主流となっているMP4ファイルに対応していません。
対して DirectShowSource や FFmpegSource は、ファイル形式に囚われずファイルを開く事が可能で、最近主流となっているMP4ファイルにも当然のように対応しています。
次に覚えておいて欲しい事は、動画を読み込むためにはAVISourceはコーデックが、DirectShowSourceはコーデックとスプリッターが導入されている必要があります。
さて次から、それぞれの読み込み方法の特徴や詳細を説明したいと思います。
備考(コーデックとスプリッター)
スプリッターとコーデックに関する詳しい話は割愛しますが、誤解を恐れず大まかにいえば、スプリッターは鍵、コーデックは言語であるといえます。
鍵の付いた箱の中に、本(ビデオとオーディオ)の2つが格納されている事をイメージしてください。そして箱の中の本は、日本語/英語/中国語/等々の様々な言語で書かれています。つまりスプリッター(鍵)で箱の鍵を開け、コーデック(様々な言語)で本の内容を読み取ります。だから動画に対応したスプリッターやコーデックの両方が無いと動画を読み取る事ができません。
詳細説明
AVISource
AVISource は Windows API(ソフトウェア間のインターフェイス)の一種である、Video for Windows (略称VfW)を使った方式です。なおVfWは動画専用の方式で、AVIファイルに対応しています。つまり逆を言えばAVIファイルにしか対応していないため、AVIファイル以外の時はAVISourceは使用できません。
動画とえいば、過去は殆どAVIファイルの事を指していましたが、いまはMP4/MPEG/MKVといった拡張子の動画も多く存在しています。その中でもMP4はYoutubeやスマホ標準の動画形式で採用されていたり、いまとなっては寧ろAVIよりも主流な形式です。そのMP4に対応してないAVISourceは、既に時代遅れ(レガシー)かもしれません。
とはいえ、AVIファイルはレガシー(規格が古いファイル形式)ではありますが、構造が単純である事から、動画編集時の中間ファイル等の特殊な用途で、いまでも好んで使用されています。
レガシーという事は誕生から長い期間がたっており、また単純で低機能(「低性能」では無く「低機能」)である事から問題が起き辛く、AVIファイルならばDirectShowSourceよりおススメできる方式です。
DirectShowSource
DirectShowSource は Windows API(ソフトウェア間のインターフェイス)の一種である、DirectShow を使った方式です。なおDirectShowは先のVideo for Windowsの後続として開発された規格であり、Video for Windows よりも拡張性が高いものになっています。
このDirectShowはOS標準ではAVI/ASF/WAV/等々の標準的なファイル形式にしか対応していませんが、スプリッターやコーデックを導入する事で、様々なファイル形式に対応できるようになります。
また上記の通り AVISource はAVIファイル以外では使用できない事から、それ以外のファイルでは基本的に、DirectShowSourceを使用する事になります。
DirectShowSourceを使用するときには、ファイルに対応したコーデックとスプリッターを導入しておく必要がある事に注意してください。
FFmpegSource
FFmpegSourceはデコーダー/エンコーダーとして世界で最もポピュラーで高機能なソフトウェアである、FFmpegを使用した方式です。
なお先の二つはAvisynthに標準で搭載された機能を使っていますが、FFmpegSourceは外部プラグインのため、自分でFFmpegSourceをダウンロードして導入する必要があります。なおダウンロードはここから行う事ができます。
FFmpegはこの世に存在している、有りとあらゆる動画/音声ファイル対応しています(誇張表現では無いです!!)。FFmpegで開けない動画ファイルは、企業や個人が特定用途で作ったような、一般では殆ど使用されない極一部の形式くらいでしょう。
なおFFmpegSourceは動画ファイルを読み込むとき、映像部の読み込みと音声部を個別に読み込む必要があります。具体的には
AudioDub(FFVideoSource("InFile"), FFAudioSource("InFile"))
のように読み込みます。FFVideoSourceで映像を、FFAudioSourceで音声を読み込み、AudioDubで映像と音声を多重化(合体)させる事になります。当然の事ですが、もし音声不要で動画部分のみ必要なら
FFVideoSource("InFile")
だけでも大丈夫です。
FFmpegSourceの良いところは沢山あるのですが、大切な部分は2つでしょうか。1つ目は先程書いたように様々な形式に対応している事、2つめは正確にデコード(再生)できる事です。なお2つめの「2つめは正確にデコードできる事」については、次の「AVISourceとDirectShowSourceの注意点」で説明したいと思います。
AVISourceとDirectShowSourceの注意点
私がFFmpegSourceを好んで使用している理由の一つでもあるのですが、AVISourceとDirectShowSourceは「正しく再生出来ていない場合がある」という事に注意が必要です。
本来有ってはならない事なのですが、事実として、コーデック(正確にはデコーダー)によって表示される動画(画像)が違う事が多々があります。特に考えられる事としては、同じ形式向けのコーデックでも、作者A/作者B/企業A/企業B・・・と幾つかのパターンが存在したときに、規格書に従ってない場合や、プログラムにバグがある場合などです。ひどい場合ではブロックノイズ等が発生する場合すらあります。
また企業が作ったコーデックでは、場合によってインタレース解除や高画質化のフィルターがセットになっていたりする場合もあります。こうなってくると、規格通りに再生した場合と、当然ながら違った結果になってきます。
またスプリッターとコーデックの相性もあったりして、酷い場合では再生できなかったりする事もあります。
ではFFmpegSourceは正確なのかと問われると否定しきれないのですが、少なくとも一番安全だと考えられます。FFmpegは世界で最もポピュラーなデコーダー/エンコーダーです。世界中の様々な人たちが使用しており、また同時に、世界中の沢山の開発者が日夜機能改善やバグ解決をしています。だから少なくとも、特定のコーデックで再生するよりは良いと考えられます。
結論
長々と書きましたが、上記理由から個人的におススメな使用順番は上から
- 外部プラグインでも良いなら、FFmpegSource が最良
- Avisynth内蔵機能で読み込みしたく、対象がAVIファイルであるなら、AVISource
- Avisynth内蔵機能で読み込みしたく、対象がAVIでないなら、DirectShowSource
になります!
所感
Avisynth って多機能なソフトなんですが、多機能すぎて敷居が高いきがします。ファイル読み込み方法からして沢山あって迷ってしまいますし、、、
今回は過去に自分が悩んだことを自分なりに解説してみました。参考もらえて、良き動画編集ライフを過ごしてもらえると幸いです!
コメント