4

インターネット上で分割された rar ファイルの part01、part02 などをダウンロードするプログラムがあります。私のプログラムは最初に part01 をダウンロードし、次に part02 をダウンロードします。いくつかのテストの後、たとえば Python 用の UnRAR2 を使用すると、アーカイブに含まれるファイル (.avi ファイル) の最初の部分を抽出でき、最初の数分間は再生できることがわかりました。別のファイルを追加すると、もう少し抽出されます。私が疑問に思っているのは、ダウンロード中に単一のファイルを抽出することは可能ですか? ダウンロードが完了するのを待たずにpart01の抽出を開始する必要があります...それは可能ですか?

どうもありがとうございました!

マッテオ

4

3 に答える 3

8

rar アーカイブ内の .avi ファイルについて話している。アーカイブが実際に圧縮されていると確信していますか? ウェアーズ シーンによってリリースされたビデオ ファイルは、圧縮を使用しません。

ファイルサイズが大きいため、リッピングされたムービーは引き続きパッケージ化されますが、圧縮は許可されず、RAR 形式はコンテナーとしてのみ使用されます。このため、最新の再生ソフトウェアは、パッケージ化されたファイルから直接リリースを簡単に再生でき、リリースがダウンロードされるときにストリーミングすることもできます (ネットワークが十分に高速な場合)。

(VLC、BSPlayer、KMPlayer、Dziobas Rar Player、rarfilesource、rarfs などを考えています) 次のように圧縮を確認できます。

  • WinRAR で最初の .rar アーカイブを開きます。(古い形式のボリューム名の場合は name.part01.rar または name.rar )
  • 情報ボタンをクリックします。

抽出するバージョンが2.0 を示している場合、アーカイブは圧縮を使用しません。(10 年前の rar を持っていない限り) Total sizePacked sizeが同じになることがわかります。

ダウンロード中に単一のファイルを抽出することは可能ですか?

はい。圧縮を使用しない場合は、独自のプログラムを記述してファイルを抽出できます。(外部の rar ファイルから映画を直接ダウンロードするスクリプトを書いた人を知っていますが、それは公開されておらず、私も持っていません。) Python について言及したので、Marko Kreen のrarfile 2.2をご覧になることをお勧めします。pyarrfsの作成者です。アーカイブは、ヘッダー (rar ブロック) が追加されて切り刻まれたファイルです。次のアーカイブがダウンロードされるまで一時停止する必要があるコピー操作になります。

圧縮ファイルでも可能だと強く信じています。unrを使用して圧縮ファイルを抽出する必要があるため、ここでのアプローチは異なります。The Unarchiver に実装されている rars を抽出するための無料の RARv3 実装もあると付け加える必要があります。

(un)rar のこのパラメーターで可能になると思います。

-vp     Pause before each volume

        By default RAR asks for confirmation before creating
        or unpacking next volume only for removable disks.
        This switch forces RAR to ask such confirmation always.
        It can be useful if disk space is limited and you wish
        to copy each volume to another media immediately after
        creation.

次のアーカイブがダウンロードされるまで、抽出を一時停止することができます。

rar が「solid」オプションを有効にして作成された場合、これは機能しないと思います。

rars に solid オプションを使用すると、圧縮されたすべてのファイルが1 つの大きなファイル ストリームとして扱われます。抽出するファイルが含まれていなくても、常に最初のファイルから開始する場合は、これで問題が発生することはありません。パスワード付きのアーカイブでも動作すると思います。

于 2011-06-29T21:49:27.803 に答える
1

私はそれを非常に疑っています。圧縮の性質上(私の理解では)、圧縮を解除するにはすべてのビットが必要です。ダウンロード元のソースは、圧縮前に avi を意図的に細かく分割しているようですが、圧縮を適用するまでには、圧縮したものはすべて 1 つのアトミック ユニットになります。そのため、親切にも avi 全体をパーツに分割しましたが、各パーツは依然としてアトミックなニットです。

しかし、私は圧縮の専門家ではありません。

私が現在考えることができる唯一のテストは次のようなものです: .curl http://example.com/Part01 | unrar

于 2011-06-29T14:30:47.857 に答える
0

これが特定の言語を念頭に置いて尋ねられたかどうかはわかりませんが、圧縮された RAR をインターネットから直接ストリーミングして、その場で解凍することは可能です。これは、C# ライブラリhttp://sharpcompress.codeplex.com/で実行できます。

RAR形式は実際にはちょっといいです。各エントリの前にヘッダーがあり、圧縮されたデータ自体は、バイト ストリームでのランダム アクセスを必要としません。

マルチパート ファイルを作成するには、最初にパート 1 を完全に抽出してから、パート 2 が利用可能になったら書き込みを続ける必要があります。

これはすべて、私の RarReader API で可能です。ソリッド アーカイブもストリーミング可能です (実際、ストリーミングのみ可能です。ソリッド アーカイブ内のファイルにランダムにアクセスすることはできません。ほとんどの場合、一度にすべてを抽出する必要があります。)

于 2012-03-16T09:38:28.507 に答える