HLS Transformer (Enterprise Video Engine)
A high-performance, multi-threaded C++ video transcoding engine built on top of FFmpeg. This engine converts standard video files (.mp4, .mov, etc.) into highly optimized, Adaptive Bitrate (ABR) HTTP Live Streaming (HLS) formats.
It is designed for production backend environments, featuring real-time AES-128 encryption, broadcast-standard audio normalization, and seamless integration with Python via pybind11.
Key Features
- Multi-Core ABR Encoding: Spawns isolated threads to simultaneously transcode video into multiple resolutions (e.g., 1080p, 720p, 480p, 360p) to maximize CPU utilization.
- Content-Aware Scaling: Automatically detects if a video is horizontal (16:9) or vertical (9:16 for Shorts/Reels) and adjusts the output dimensions dynamically.
- AES-128 DRM Encryption: Encrypts video chunks on the fly to prevent unauthorized downloading and piracy.
- EBU R 128 Audio Normalization: Analyzes and normalizes audio loudness to standard broadcast levels (
-14 LUFS) using FFmpeg'sloudnormfilter graph. - Thread-Safe Logger: Built-in mutex-locked logging system to prevent terminal text corruption during multi-threaded execution.
- Python Native Binding: Architected to be compiled as a
.somodule, allowing you to orchestrate the C++ engine natively from Python scripts.
Prerequisites
You must have the FFmpeg development libraries and a C++ compiler installed on your system.
Ubuntu / Debian:
sudo apt update
sudo apt install g++ libavformat-dev libavcodec-dev libswscale-dev libavutil-dev libavfilter-dev libswresample-dev
Architecture
- The project is cleanly separated into two main components:
- hls_engine.cpp: The pure C++ core logic containing all FFmpeg memory management, multithreading, and video processing.
- wrapper.cpp: The lightweight pybind11 bridge that exposes the C++ engine to Python.
##how to use
Step 1: Generate Encryption Keys
- Before running the engine, you must generate an AES-128 key. The engine looks for a file named enc.keyinfo to encrypt the stream. Run this in your terminal:
# 1. Generate a 16-byte hex key
openssl rand 16 > enc.key
# 2. Create the keyinfo file for FFmpeg
echo "enc.key" > enc.keyinfo
echo "enc.key" >> enc.keyinfo
- Note: In a real production environment, the first line of enc.keyinfo should be the public URL where your web player can fetch the key
#api uses
from vedio_transcoders import hls_encoder
#The engine will automatically pad missing bitrates using production defaults
#and detect if the video is Vertical or Horizontal.
hls_encoder(
input="user_upload.mp4",
output="master.m3u8",
resolution=["1080p", "720p", "480p"],
bitrate=[5000000, 2500000], #480p will auto-default to 1,000,000
key="enc.keyinfo" # Path to your DRM keyinfo file
)
print("Video successfully packaged for HLS delivery!")
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file video_transcoders-9.1.11.tar.gz.
File metadata
- Download URL: video_transcoders-9.1.11.tar.gz
- Upload date:
- Size: 8.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fc60d436ee4a3fb98be08e4e40f3a97d0656f2d3fa9ba43a0e743e942907b23
|
|
| MD5 |
07d5b188741fdcccdc751e5e9e93ca06
|
|
| BLAKE2b-256 |
cfa3d4e0335d8372a1ff3362949477d93cc98b12e4a490d93b698e3f38b97175
|
File details
Details for the file video_transcoders-9.1.11-cp39-abi3-android_24_arm64_v8a.whl.
File metadata
- Download URL: video_transcoders-9.1.11-cp39-abi3-android_24_arm64_v8a.whl
- Upload date:
- Size: 76.4 kB
- Tags: Android API level 24+ ARM64 v8a, CPython 3.9+
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4102e6fb0dffd587f34ad2691019da8ed9872cd47075b474777cb44e49c491d0
|
|
| MD5 |
f4aa8f536a103731fa0072fc72a120f4
|
|
| BLAKE2b-256 |
55fa09413e8afff552cd3f059df4d3e987f9eb8a89d34424f08d14cb7b1984ac
|