2017-09-18 1 views
0

Ich benutze Python 2.7, um ein Video zu lesen und in hdf5 zu speichern. Das ist mein CodeWie komprimiert man die Daten, die in hdf5 gespeichert wurden?

import h5py 
import skvideo.datasets 
import skvideo.io 
videodata = skvideo.io.vread('./v_ApplyEyeMakeup_g01_c01.avi') 
with h5py.File('./video.hdf5','w') as f: 
    f['data'] = videodata 
    f['label'] = 1 

Das Problem ist, dass der Ausgang hdf5 zu groß ist. Es ist 128 mal größer als die ursprüngliche AVI-Datei. Was soll ich tun, um die Größe zu komprimieren/zu reduzieren? Sie können die Datei auf https://drive.google.com/open?id=0B1MrjZsURl2yNFM0ZTJfZ3pOZVU

herunterladen denke ich, dass wir es durch die Verwendung

komprimieren kann
f.create_dataset('data',data=videodata,compression='gzip',compression_opts=9) 
f.create_dataset('label', data=1) 

Nun ist es immer noch 37-mal größer als die Originaldatei. Danke im Voraus.

+0

Hallo, versuchen Sie, Chunking entlang Zeit Dimension hinzuzufügen, sollte es Kompressionsverhältnis verbessern. – kakk11

+0

Können Sie den Code basierend auf meinem Code bereitstellen – user8264

Antwort

0

Ihr Problem sollte mit einem geeigneten Encoding für Ihre Videodatei gelöst werden. Basierend auf Ihrem Geschäft gibt es verschiedene Kodierungsalgorithmen, zum Beispiel gibt es x265, die das Video komprimieren wird, aber dafür hohe Ressourcen benötigt. Schauen Sie sich here an.

Kürzlich habe ich über eine andere interessante Codierung gehört, die für Online-Streaming namens Daala ist, können Sie weitere Informationen here erhalten.

Im Allgemeinen hängt es davon ab, was Sie von der Codierung erwarten, aber die Wahl eines guten Encoders ist die Art, wie Sie gehen sollten, suchen Sie danach.

1

Durch Hinzufügen von Chunking konnte ich die Ausgabe 7.2M im Vergleich zu 10M ohne. Es verbessert sich also definitiv, aber immer noch weit entfernt von dedizierten Videoformaten. Sie können mit anderen Filtern von https://support.hdfgroup.org/services/filters.html spielen, aber ich bezweifle, dass sie die Komprimierung um eine Größenordnung verbessern werden. Wenn Sie also mit h5py fortfahren möchten, müssen Sie wahrscheinlich eine größere Dateigröße akzeptieren. Falls dies nicht akzeptabel ist, versuchen Sie es einfach mit einem anderen Dateiformat.

import h5py 
import skvideo.datasets 
import skvideo.io 
videodata = skvideo.io.vread('./v_ApplyEyeMakeup_g01_c01.avi') 

print(videodata.shape) 
with h5py.File('./video.hdf5','w') as f: 
    f.create_dataset('data', 
         data=videodata, 
         compression='gzip', 
         compression_opts=9, 
         chunks=(164, 20, 20, 3)) 
    f.create_dataset('label', data=1) 
Verwandte Themen