2016-08-20 5 views
0

ich etwas falsch mit meinem Code nicht sehen, aber wenn ich für die Größe der komprimierten Datei in der Zielposition überprüfen, ich sehe nur, dass die Dateigröße von 2 oder 3 KB reduziert nur wurde die weniger Art und Weise ist auch für große Dateien skalieren auf etwa 650 MB.Wie komprimiere ich große Dateien mit 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"); 
} 

Vielen Dank im Voraus.

+0

BTW jedes Mal, wenn Sie 'flush()' aufrufen, fügen Sie ein paar Daten mit komprimierten Dateien hinzu. Es schließt alles ab, woran es gerade arbeitet. –

Antwort

2

Sie werden nicht in der Lage sein, eine MP4-Datei zu komprimieren. Das MP4-Dateiformat (die MP4-Dateiformate) führt typischerweise seine eigene Komprimierung durch, so dass keine Redundanz für einen allgemeinen (verlustfreien) Komprimierer beseitigt werden muss.

Versuchen die gleiche Datei unter Verwendung einer Befehlszeilenkomprimierungsprogramm komprimiert wird. Ich sage voraus, dass Sie dort auch eine minimale Kompression haben werden.

Die einzige Möglichkeit, eine weitere Kompression für eine (bereits) komprimierte Audio/Video-Datei zu erhalten, wäre die Verwendung der Codecs für das Format zum Dekomprimieren und dann erneutes Komprimieren mit einer niedrigeren Qualität. Offensichtlich opfern Sie dabei die Audio-/Videoqualität.

Verwandte Themen