Skip to main content

Compress every frame of a movie in a single color barcode.Transform entire movies into stunning single-barcode visualizations.Capture the essence of cinematic storytelling through dominant color extraction from each frame.

Project description

Movie Barcodes

The Lodger: A Story of the London Fog (1927) - Alfred Hitchcock - Public Domain

Circular Barcode Horizontal Barcode

PyPI - Version PyPI - License Python Status Codecov pre-commit Black

Overview

Compress every frame of a movie in a single color barcode.

This project is a robust and highly configurable utility designed to extract dominant colors from video files and generate color barcodes. Built with Python and OpenCV, the tool offers multiple algorithms for color extraction, including average color, K-means clustering, and HSV/BGR histograms. The output can be generated in various forms, like horizontal and circular barcodes, providing a visually intuitive summary of the color distribution in the video.

Designed with performance in mind, the application supports both sequential and parallel processing. It scales automatically based on the available CPU cores but can be fine-tuned for a specified number of workers. This makes it suitable for analyzing both short clips and full-length movies with high efficiency.

Features

  • Horizontal and Circular Barcodes
  • Fast frame skipping for efficiency.
  • Supports .mp4 & .webm files
  • Multiprocessing support for parallel processing.
  • Customizable color extraction function (Average or K-means).
  • Progress tracking and estimated time remaining.

Usage

# Install the package
$ pip install movie-barcodes

# Generate a movie barcode
$ movie-barcodes -i "path/to/video.mp4"

Mandatory Arguments:

  • -i, --input_video_path: The path to the input video file. (Required, type: str)

Optional Arguments:

  • -d, --destination_path: The path where the output image will be saved. If not provided, defaults to a pre-defined location. (Optional, type: str)

  • -t, --barcode_type: The type of barcode to generate. Options are horizontal or circular. Default is horizontal. (Optional, type: str)

  • -m, --method: The algorithm for extracting the dominant color from frames. Options are avg (average), kmeans (K-Means clustering), hsv (HSV histogram), and bgr (BGR histogram). Default is avg. (Optional, type: str)

  • -w, --workers: Number of parallel workers for processing. By default, the script will use all available CPU cores. Setting this to 1 will use sequential processing. (Optional, type: int)

  • --width: The output image's width in pixels. If not specified, the width will be the same as the input video. (Optional, type: int)

  • --height: The output image's height in pixels. If not specified, the height will be the same as the input video. (Optional, type: int)

  • -n, --output_name: Custom name for the output barcode image. If not provided, a name will be automatically generated. (Optional, type: str)

  • -a, --all_methods: If set to True, all methods for color extraction will be employed, overriding the --method argument. Default is False. (Optional, type: bool)

Examples

Sequential Processing

python -m src.main -i "path/to/video" --width 200 -w 1

Parallel Processing

python -m src.main -i "path/to/video" --width 200 -w 8

Development Setup

# Clone this repository
$ git clone https://github.com/Wazzabeee/movie-barcodes

# Go into the repository
$ cd movie-barcodes

# Install requirements
$ pip install -r requirements.txt
$ pip install -r requirements_lint.txt

# Install precommit
$ pip install pre-commit
$ pre-commit install

# Run tests
$ pip install pytest
$ pytest tests/

# Run package locally
$ python -m src.main -i "path_to_video.mp4"

Todo

  • Optimize K-means to speed up the process
  • Add a small GUI with all options available
  • Add option to modify the barcode's height (current is frame's height)
  • Ensure the software can handle various video formats beyond MP4
  • Allow the software to process multiple videos at once
  • Develop POC on Hugging Face Space
  • Remove the logs creation when using package

More Examples

Your Name / Kimi no Na wa / 君の名は (2016) - Makoto Shinkai

movie-barcodes -i "Your Name.mp4" -t "circular"
movie-barcodes -i "Your Name.mp4" --width 1920 -t "horizontal"
Circular Barcode Horizontal Barcode

Drive (2011) - Nicolas Winding Refn

movie-barcodes -i "Drive.mp4" -t "circular"
movie-barcodes -i "Drive.mp4" --width 1920 -t "horizontal"
Circular Barcode Horizontal Barcode

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

movie-barcodes-0.2.2.tar.gz (22.5 kB view details)

Uploaded Source

Built Distribution

movie_barcodes-0.2.2-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file movie-barcodes-0.2.2.tar.gz.

File metadata

  • Download URL: movie-barcodes-0.2.2.tar.gz
  • Upload date:
  • Size: 22.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.5

File hashes

Hashes for movie-barcodes-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c2d1455e95a1529f2209cbe4a528c583ea183dbbdc0bddb25fb13a66747bd408
MD5 728f40a3a2b2940ab7e4a910032ce1c7
BLAKE2b-256 1a6ac07e8324b516d2ff826a92edcd4cb0047be94df7389dafa4da8ac49f378f

See more details on using hashes here.

File details

Details for the file movie_barcodes-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for movie_barcodes-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2596148d76acee9fcaf160a3284616592e72f1fc773302c62a8c4f8aedc5080b
MD5 aa6c9ce142f5bf7037f3d17cd395986b
BLAKE2b-256 3161bf507c7684e1ddd16fcfe3ae33e13fb04ce6192c343c7e2114eb7a3da57b

See more details on using hashes here.

Supported by

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