2016-08-20 4 views
0

私のコードで何か問題はありませんが、コピー先の場所で圧縮ファイルのサイズを調べると、ファイルサイズが2または3KBだけ小さくなっていることがわかります。大容量のファイルは約650MBにスケールアップされます。DeflaterOutputStreamを使用して大きなファイルを圧縮する方法は?

public static void main(String[] args) throws Exception 
    { 
    FileInputStream fin = new FileInputStream("filetobecompressed.mp4"); 
    FileOutputStream fout = new FileOutputStream("compressedfile.mp4"); 
    DeflaterOutputStream dout = new DeflaterOutputStream(fout); 
    byte b[] = new byte[8192]; 
    int r; 
    float tracker = 0; 
    while((r=fin.read(b))!=-1) 
    { 
     dout.write(b,0,r); 
     dout.flush(); 
     tracker += (float)r/1000000f; 
     System.out.println(tracker + "MB compressed"); 
    } 
    dout.finish(); 
    fin.close(); 
    fout.close(); 
    dout.close(); 
    System.out.println("Compression successful"); 
} 

ありがとうございます。

+0

ところで、あなたが 'flush()'を呼び出すたびに、圧縮されたファイルで少しのデータを追加します。それは、その時点で作業している何かの結論につながります。 –

答えて

2

MP4ファイルを圧縮することはできません。通常、MP4ファイル形式は独自の圧縮を行いますので、一般的な(ロスレスの)コンプレッサーが除去する冗長性はありません。

コマンドライン圧縮ユーティリティを使用して同じファイルを圧縮してみてください。私はそこでも最小限の圧縮しか期待していません。

(既に)圧縮されたオーディオ/ビデオファイルに対してさらに圧縮を行う唯一の方法は、その形式のコーデックを使用して、圧縮解除して低品質で再圧縮することです。明らかに、あなたはこれを行う際にオーディオ/ビデオの品質を犠牲にします。

関連する問題