1

サードパーティの C++/C# プラグインに 1 つのファイルとして読み取らせたい、1 つのファイルの複数の部分があります。基本的に、プラグイン ファイル リーダーが 1 つのファイル パーツの最後に到達したら、次のファイル パーツに進みたいと思います。

(興味のある方は、プラグインは Aforge.Net FFMpeg で、VOB ファイルをインポートしようとしています)

プラグインを再プログラムするのはかなりの作業のようです。別の解決策として、ファイルの一部を連結ファイルにコピーする方法がありますが、何 GB ものデータを扱っているため、これでは時間がかかります。

ファイル システムのハード リンクを使用して複数のファイルを指すことは可能ですか? または、連結されたファイルを「偽造」する他の方法はありますか? コマンドラインFFMpegを使用すると、「タイプ」を使用して連結ファイルをライブストリームできますが、このプラグインを使用してC#でこれを実現する方法がわかりません。

私はWindows 7を使用しています。

4

3 に答える 3

1

ハード リンクは 1 つの I ノードしか参照できないため、ハード リンクは役に立ちません。ただし、FIFO、または名前付きパイプはそうします。UNIX シェルでは、次のことができます。

$ mkfifo catenated
$ cat a b c >catenated &

「連結された」ファイルから読み取るプログラムは、3 つのファイル (a、b、および c) すべてを連結して取得します。3 つのファイルすべてのデータが読み取られると、「cat」プログラムは終了します。Microsoft Windows にもそのような機能があります (名前付きパイプを参照)。

パイプはシークできないことに注意してください。連結されたデータを読み取るプログラムがシークしようとすると、失敗します。連結をシーク可能にする必要がある場合は、より複雑なもの (仮想ファイルシステム? FUSE?) を使用する必要があります。

于 2011-12-16T13:17:30.017 に答える
0

これは、 avisynthで処理するのが最適な場合があります。私が使用してから何年も経ちますが、IIRCを使用すると、ビデオファイルの連結をスクリプト化して単一のファイルとして表示することができます。詳細は思い出せませんが、スクリプトファイルはビデオファイルのように動作し、ほとんどのビデオ編集アプリケーションでソースとして使用できます。

于 2011-12-16T13:46:27.280 に答える
0

いいえ、そうではありません。ハード リンクは 1 つのファイルのみを指します。

アプリがサードパーティのアプリであるという複雑さが増しています...私が見る唯一の解決策は、特定のパスに対してのみファイルメソッドをオーバーライドする動的オブジェクトを作成して、たとえば、read()最初のファイルから開始することです。次に、3 番目を終了した後、2 番目に進みます。幸運を!

于 2011-12-16T13:11:15.123 に答える