Skip to main content

HDF5 filter plugin for FFMPEG video codec compression

Project description

FFMPEG HDF5 Filter Enables High-Ratio Image Compression for Faithful Scientific Analysis

The FFMPEG HDF5 filter enables high-ratio compression of scientific datasets in HDF5 files using video codec technology. It supports a wide range of codecs (H.264, H.265/HEVC, AV1, etc.) with hardware acceleration options for NVIDIA GPUs and Intel QuickSync.

Features

  • High Compression Ratios: Achieve 10-10,000× compression while preserving analysis fidelity
  • Multiple Codec Support: H.264, H.265/HEVC, AV1, and more
  • Hardware Acceleration: NVIDIA GPU and Intel QuickSync support
  • Simple Python API: Easy-to-use interface for H5Py
  • Automated Optimization: Film grain synthesis and artifact minimization
  • Cross-Platform: Works on Linux, macOS, and Windows
  • ImageJ/Fiji Plugin Support: Direct visualization and analysis in popular scientific imaging tools

Installation

Via pip (recommended)

pip install h5ffmpeg

Using pre-built binaries for ImageJ/Fiji

We recommend using our imageJ update sites.

Note: Due to the limitation of static built ffmpeg to comply with Java, some codecs are not supported. We strongly recommend using our python package. If working with large-scale dataset, SISF_CDN with neuroglancer is recommended.

From source (not recommended)

git clone https://github.com/Cai-Lab-at-University-of-Michigan/ffmpeg_HDF5_filter.git
cd ffmpeg_HDF5_filter
pip install -e .

This is not recommended since it requires compiling FFmpeg from source with HDF5 support, which is complex and error-prone. Our pip package includes pre-built, tested binaries.

Quick Start

import h5py
import numpy as np
import h5ffmpeg as hf

# Create sample data
data = np.random.rand(100, 512, 512).astype(np.uint8)

# Save with default settings (H.264)
with h5py.File("compressed.h5", "w") as f:
    f.create_dataset("data", data=data, **hf.x264())

# Save with H.265/HEVC compression
with h5py.File("compressed_hevc.h5", "w") as f:
    f.create_dataset("data", data=data, **hf.x265(crf=28))

# Save with AV1 compression (highest ratio)
with h5py.File("compressed_av1.h5", "w") as f:
    f.create_dataset("data", data=data, **hf.svtav1(crf=30))

# Use with NVIDIA GPU acceleration
with h5py.File("compressed_gpu.h5", "w") as f:
    f.create_dataset("data", data=data, **hf.h264_nvenc())

Advanced Usage

Custom Codec Configuration

import h5ffmpeg as hf

# Access the full ffmpeg API for complete control
compression_options = hf.ffmpeg(
    codec="libx264",        # Codec to use
    preset="medium",        # Encoding speed vs compression efficiency
    tune="film",            # Content-specific optimization
    crf=23,                 # Quality level (lower = higher quality)
    bit_mode=hf.BitMode.BIT_10,  # 8, 10, or 12-bit encoding
    film_grain=50,          # Film grain synthesis (0-50)
    gpu_id=0                # GPU ID (Default: 0)
)

Automated Hardware Acceleration

The library can detect and use available hardware acceleration:

import h5ffmpeg as hf

# This will automatically use NVIDIA GPU if available, 
# or fall back to CPU if not
compression_options = hf.ffmpeg(
    codec="h264_nvenc" if hf.has_nvidia_gpu() else "libx264",
    preset="p4" if hf.has_nvidia_gpu() else "medium",
    crf=23
)

Available Codecs

Codec Implementation Description Typical Use Case
XVID libxvid MPEG-4 codec Legacy support
H.264 libx264 General-purpose codec Good balance of quality and speed
H.265/HEVC libx265 Higher efficiency than H.264 Better compression for same quality
AV1 libsvtav1 Next-gen open codec Highest compression ratio
AV1 librav1e Rust AV1 encoder Alternative AV1 implementation
H.264 NVENC h264_nvenc NVIDIA GPU-accelerated H.264 Fast encoding on NVIDIA GPUs
HEVC NVENC hevc_nvenc NVIDIA GPU-accelerated HEVC High-quality, fast encoding on NVIDIA GPUs
AV1 NVENC av1_nvenc NVIDIA GPU-accelerated AV1 Next-gen encoding on newest NVIDIA GPUs
AV1 QSV av1_qsv Intel QuickSync AV1 Hardware acceleration on Intel GPUs

Compatibility

  • Python: 3.11+
  • Operating Systems: Linux-x86_64, macOS Apple Silicon, and Windows-AMD64
  • hdf5: 1.14+
  • h5py: 3.8+

License

MIT License

Citation

If you use this software in your research, please cite:

Duan, B., Walker, L.A., Xie, B., Lee, W.J., Lin, A., Yan, Y., and Cai, D. (2024).
Artifact-Minimized High-Ratio Image Compression with Preserved Analysis Fidelity.

Acknowledgments

This work was funded by the United States National Institutes of Health (NIH) grants RF1MH123402, RF1MH124611, and RF1MH133764.

Community and Support

  • GitHub Issues: For bug reports and feature requests
  • Contact: Feel free to reach out to us with questions

Related Projects

Feel free to check out other tools from the Cai Lab:)

  • nGauge: Python library for neuron morphology analysis
  • nTracer2: Browser-based tool for neuron tracing
  • pySISF: Python wrapper for SISF format
  • SISF_CDN:Scalable Image Storage Format CDN

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

h5ffmpeg-2.2.2.tar.gz (56.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

h5ffmpeg-2.2.2-cp313-cp313-win_amd64.whl (34.6 MB view details)

Uploaded CPython 3.13Windows x86-64

h5ffmpeg-2.2.2-cp313-cp313-manylinux_2_34_x86_64.whl (36.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

h5ffmpeg-2.2.2-cp313-cp313-macosx_12_0_arm64.whl (24.8 MB view details)

Uploaded CPython 3.13macOS 12.0+ ARM64

h5ffmpeg-2.2.2-cp312-cp312-win_amd64.whl (34.6 MB view details)

Uploaded CPython 3.12Windows x86-64

h5ffmpeg-2.2.2-cp312-cp312-manylinux_2_34_x86_64.whl (36.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

h5ffmpeg-2.2.2-cp312-cp312-macosx_12_0_arm64.whl (24.8 MB view details)

Uploaded CPython 3.12macOS 12.0+ ARM64

h5ffmpeg-2.2.2-cp311-cp311-win_amd64.whl (34.6 MB view details)

Uploaded CPython 3.11Windows x86-64

h5ffmpeg-2.2.2-cp311-cp311-manylinux_2_34_x86_64.whl (36.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

h5ffmpeg-2.2.2-cp311-cp311-macosx_12_0_arm64.whl (24.8 MB view details)

Uploaded CPython 3.11macOS 12.0+ ARM64

File details

Details for the file h5ffmpeg-2.2.2.tar.gz.

File metadata

  • Download URL: h5ffmpeg-2.2.2.tar.gz
  • Upload date:
  • Size: 56.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for h5ffmpeg-2.2.2.tar.gz
Algorithm Hash digest
SHA256 e28f66f3747191d910969d5444827ff3ccc3346b23772096a698fb149fe719ee
MD5 0be5434ed4157a6051e87943bd3b994f
BLAKE2b-256 84fa2c22a6065539c1bea4443b384257e2cc3a421650dbf805d516e96b38125e

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: h5ffmpeg-2.2.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 34.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for h5ffmpeg-2.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6a6c27036d87d16e055dcb8027f8001993fa59655b7dbcae6d1a6035def5aba5
MD5 b05f656fd52224e9a65f462c03c2ef30
BLAKE2b-256 b21bd3360189b1552d03e32c1b64a7c08b987b425fc41c8948a49b6f9c3e28b2

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0dbca75411bf862daa4ffe2c5b160a470a0dbd52956ad283039479877ae9845d
MD5 a6da65a15531ba9fb02d45c617ae76ff
BLAKE2b-256 585bd38472a7438220f18fa4f1ff0d1852d845a24a813ad5986a7559d34187b1

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp313-cp313-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp313-cp313-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 9b39112b950b35f00cf48f793cf05368cbec177e8b3bb9511f510fb959c69202
MD5 ee0da39cb0c086597d4a4b64690ed15b
BLAKE2b-256 11bf46c1c272e6e0fa0e21522bd9b58a72c579750e7e8970363e849923d551f3

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: h5ffmpeg-2.2.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 34.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for h5ffmpeg-2.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4ecabc9e6d1566e7f68200e032ec06716bda70d99b0cebb79ad75e224a7d70c2
MD5 4d0838e3206275f7a55e63a818df3ef9
BLAKE2b-256 55fded29f6b270a85ca6b8f5936d66f6655838e9dbaf755103d97704f5d1dd72

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 574df0a3ca754f9fba3b0ebb8600487d6b189bc245d6cda5dd262b49a33e9fc7
MD5 c87e774b60d8e805ca34c598e9835a7c
BLAKE2b-256 8fa9bf537c5382436e67b37ed36bf4015a89a42795797368ad3b82e08fbe0e6b

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp312-cp312-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp312-cp312-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 db7c283da4de4f4971495ae293d05c5bacd744f525379f64ae91b3753f5863d9
MD5 68bea37ba4046725d1d0985975821e9e
BLAKE2b-256 042bc6debfea6dae1217d8eb771b06c2d48fc11ac847964b938159d4b9a52403

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: h5ffmpeg-2.2.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 34.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for h5ffmpeg-2.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c8e4a7252f3da422f145f81b997f29abe1753ba9b7540fc27005c2d8ef3efcbd
MD5 e69c689701b66fb71691dff126e0027f
BLAKE2b-256 15ef8c566f736e255296b6d1efeab115999e607aa4022aa23d1006834e399f49

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6d37b2e9a8580d7440f35dee2059eb538417435f751edee7a69eb7acb0d1bede
MD5 6c9b0a06daca45ebc2079cf187044579
BLAKE2b-256 ca75ab3853bd5f0d0dde7ed369fd0ad29772f844ad6e3975a6d433be46e80275

See more details on using hashes here.

File details

Details for the file h5ffmpeg-2.2.2-cp311-cp311-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for h5ffmpeg-2.2.2-cp311-cp311-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 479b929ff17fb4941b0c70fd85fb932f6cd11b20e71561910d263955c1b78d08
MD5 28d57a79e519efee76d6d5e6815b993c
BLAKE2b-256 9c164da4dde3f13581f49c503a0f3ce042e519d4ace84f5689e774557e436f2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page