Avisynth 動画読み込み方法の比較 (DirectShowSource, AviSource)

ソフトウェア
スポンサーリンク

前置き

Avisynth を初めて使うときに一番困る事は、「動画読み込み関数(メディアファイルフィルタ)は何を使えばいいか?」という事ではないでしょうか?

Avisynth には色々なファイル入力方法がありますが、その中でも重要で、また選択に迷うであろう DirectShowSource と AviSource の比較をしてみたいと思います。また外部プラグインではありますが、個人的におすすめしたい FFmpegSource も合わせて紹介します。

比較対象

比較表

関数読込方式対応形式制限/備考
AVISourceVideo for Windows
(Windows API)
AVI拡張子が .avi であること
コーデックが導入されていること
DirectShowSourceDirectShow
(Windows API)
制限無しコーデックが導入されていること
スプリッターが導入されていること
FFmpegSourceFFmpeg
(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をダウンロードして導入する必要があります。なおダウンロードはここから行う事ができます。

Releases · FFMS/ffms2
An FFmpeg based source library and Avisynth/VapourSynth plugin for easy frame accurate access - FFMS/ffms2

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は世界で最もポピュラーなデコーダー/エンコーダーです。世界中の様々な人たちが使用しており、また同時に、世界中の沢山の開発者が日夜機能改善やバグ解決をしています。だから少なくとも、特定のコーデックで再生するよりは良いと考えられます。

結論

長々と書きましたが、上記理由から個人的におススメな使用順番は上から

  1. 外部プラグインでも良いなら、FFmpegSource が最良
  2. Avisynth内蔵機能で読み込みしたく、対象がAVIファイルであるなら、AVISource
  3. Avisynth内蔵機能で読み込みしたく、対象がAVIでないなら、DirectShowSource

になります!

所感

Avisynth って多機能なソフトなんですが、多機能すぎて敷居が高いきがします。ファイル読み込み方法からして沢山あって迷ってしまいますし、、、

今回は過去に自分が悩んだことを自分なりに解説してみました。参考もらえて、良き動画編集ライフを過ごしてもらえると幸いです!

コメント

タイトルとURLをコピーしました