Python Version License: MIT tests PyPI - Version Conda Version GitHub last commit
Speed-optimized, frame-accurate video and data IO tools for Python.
Links: API documentation, GitHub repository
- Efficient Video Reading: Use
VideoReaderfor fast frame-accurate video reading with support for array-like indexing and iteration. - Video Writing: Write video files easily with
VideoWriter, supporting multiple codecs and pixel formats.
- Lazy Loading: Access HDF5 files with a dictionary-like interface using
lazyh5, loading data only when accessed. - Nested Data Support: Save and load nested dictionaries, including arrays, strings, and JSON-serializable objects.
- Interactive Exploration: Explore HDF5 file structures interactively in Jupyter notebooks.
- via conda or mamba:
conda install conda-forge::daio - if you prefer pip:
pip install daio
Write video:
from daio.video import VideoReader, VideoWriter writer = VideoWriter('/path/to/video.mp4', fps=25) for i in range(20): frame = np.random.randint(0,255,size=(720,1280), dtype='uint8') writer.write(frame) writer.close()
Read video using speed-optimized array-like indexing or iteration:
reader = VideoReader('/path/to/video.mp4') frame_7 = reader[7] first10_frames = reader[:10] for frame in reader: process_frame(frame) reader.close()
You can also use with statements to handle file closure:
with VideoWriter('/path/to/video.mp4', fps=25) as writer: for i in range(20): frame = np.random.randint(0,255,size=(720,1280), dtype='uint8') writer.write(frame) #or with VideoReader('/path/to/video.mp4') as reader: frame_7 = reader[7]
Lazily load HDF5 with a dict-like interface (contents are only loaded when accessed):
from daio.h5 import lazyh5 h5 = lazyh5('/path/to/datafile.h5') b_loaded = h5['b'] e_loaded = h5['c']['e'] h5.keys()
Create a new HDF5 file (or add items to existing file by setting argument readonly=False):
h5 = lazyh5('test.h5') h5['a'] = 1 h5['b'] = 'hello' h5['c'] = {} # create subgroup h5['c']['e'] = [2,3,4]
Load entire HDF5-file to dict, or save dict to HDF5-file:
# save dict to HDF5 file: some_dict = dict(a = 1, b = np.random.randn(3,4,5), c = dict(g='nested'), d = 'some_string') lazyh5('/path/to/datafile.h5').from_dict(some_dict) # load dict from HDF5 file: loaded = lazyh5('/path/to/datafile.h5').to_dict()
In Jupyter, you can interactively explore the file structure:
imageOld interface (expand this)
from daio.h5 import save_to_h5, load_from_h5 # save dict to HDF5 file: some_dict = dict(a = 1, b = np.random.randn(3,4,5), c = dict(g='nested'), d = 'some_string') save_to_h5('/path/to/datafile.h5', some_dict) # load dict from HDF5 file: dict_loaded = load_from_h5('/path/to/datafile.h5')