- Rational Bloom Filter Video Compression은 원시 비디오를 압축하면서 복원 결과가 원본과 비트 단위로 동일해야 하는 무손실 워크플로를 구현함
- 핵심은 Bloom 필터에 비정수 해시 함수 수를 적용해, 기존 방식보다 더 나은 압축률을 이론적으로 노리는 구조임
- Y4M, YUV, HDR 같은 raw video content를 대상으로 하며, 일반적인 비디오에서 40~50% 공간 절감을 제공한다고 설명함
- 구현은 Python 3.7+ 기반이고
numpy, opencv-python, xxhash, Pillow, scikit-image, HDR용 pyexr 등 의존성이 필요함
- FFV1, HuffYUV, H.264 무손실 모드와 비교하는 벤치마크가 포함되어 있어, 실제 활용 전에는
results.md의 결과와 재현 절차를 확인하는 흐름임
Rational Bloom Filter Video Compression 개요
- 이 프로젝트는 rational Bloom filter 기반의 무손실 비디오 압축 방식을 구현함
- Bloom 필터는 이진 데이터를 효율적으로 표현하는 확률적 자료구조로 사용됨
- 차별점은 Bloom 필터에서 정수가 아닌 rational hash function을 쓴다는 점임
- 압축 후 복원된 결과가 원본과 bit-exact하게 일치하는 것을 목표로 함
지원 대상과 압축 기능
- 압축 시스템은 Y4M, YUV, HDR 등 raw video content를 대상으로 함
- 제공 기능은 다음과 같음
- 비트 단위 동일 복원을 보장하는 true lossless compression
- 일반적인 비디오 콘텐츠에서 40~50% 공간 절감
- 멀티스레드 지원을 통한 인코딩·디코딩
- RGB, BGR, YUV 등 여러 color space 지원
- HDR 콘텐츠 처리 지원
- HDR 처리는 “빠르고 사용 가능하게 만들려면 작업이 더 필요하다”는 제한이 있음
설치 요구사항
- 실행 환경은 Python 3.7+ 임
- 필요한 패키지는 다음과 같음
numpy
opencv-python
matplotlib
pandas
tqdm
requests
xxhash
Pillow
scikit-image
pyexr: HDR 지원용
- 의존성은 다음 명령으로 설치함
pip install -r requirements.txt
기본 사용 방식
- Python 코드에서는
ImprovedVideoCompressor를 가져와 압축기를 초기화함
- 예시 설정에는
noise_tolerance=10.0, keyframe_interval=30, use_direct_yuv=True, verbose=True가 포함됨
compress_video()는 입력 비디오를 .bfvc 파일로 압축함
decompress_video()는 .bfvc 파일을 복원함
verify_lossless()로 원본 프레임과 복원 프레임의 무손실 여부를 검증함
from improved_video_compressor import ImprovedVideoCompressor
compressor = ImprovedVideoCompressor(
noise_tolerance=10.0,
keyframe_interval=30,
use_direct_yuv=True,
verbose=True
)
compressor.compress_video(
input_file="input_video.y4m",
output_file="compressed.bfvc"
)
compressor.decompress_video(
input_file="compressed.bfvc",
output_file="decompressed.mp4"
)
original_frames = compressor.extract_frames_from_video("input_video.y4m")
decompressed_frames = compressor.decompress_video("compressed.bfvc")
verification = compressor.verify_lossless(original_frames, decompressed_frames)
print(f"Lossless: {verification['lossless']}")
명령줄 사용
python -m improved_video_compressor compress input_video.y4m output.bfvc --max-frames 30
- raw YUV 파일은 폭, 높이, 포맷을 함께 지정해 처리함
python -m improved_video_compressor process-yuv input.yuv output.bfvc --width 1920 --height 1080 --format YUV444
벤치마크와 비교 대상
- 프로젝트에는 Rational Bloom Filter 압축을 다른 무손실 압축 방식과 비교하는 벤치마크 시스템이 포함됨
- 비교 대상은 FFV1, HuffYUV, H.264의 무손실 모드임
- 전체 벤치마크 실행 명령은 다음과 같음
python benchmark_compression.py
- 특정 데이터셋과 방식만 지정해 실행할 수도 있음
python benchmark_compression.py --datasets y4m --methods bloom ffv1 --max-frames 10
압축 방식의 동작 흐름
- 압축 스킴은 다음 단계로 동작함
- Frame Extraction: 입력 비디오에서 프레임을 추출함
- Keyframe Selection: 키프레임은 직접 zlib 압축된 프레임으로 저장함
- Bloom Filter Compression: 인터 프레임은 차이 맵을 rational Bloom filter로 압축함
- Lossless Verification: 디코딩 중 bit-exact 복원을 검증함
- rational Bloom filter는 공간과 정확도 사이의 균형을 최적화하기 위해 비정수 해시 함수 수
k*를 사용함
- 구현은
⌊k*⌋개의 해시 함수를 결정적으로 사용하고, 추가 해시 함수는 k* - ⌊k*⌋ 확률로 적용함
프로젝트 파일 구성
improved_video_compressor.py: 압축 알고리듬의 main implementation
verify_true_lossless.py: 무손실 복원을 검증하는 스크립트
benchmark_compression.py: 여러 압축 방식을 비교하는 벤치마크 시스템
download_*.py: 테스트 데이터셋 다운로드 스크립트
results.md: 상세 벤치마크 결과와 분석
라이선스와 인용
- 라이선스는 MIT License이며, 자세한 내용은
LICENSE 파일에서 확인할 수 있음
- 연구에서 코드를 사용할 경우 README에 포함된 BibTeX 형식의 citation을 사용하도록 안내함