Every ISAN is delivered with a 2D barcode, specifically a Data Matrix ECC200, which encodes the unique ISAN identifier.
Unlike QR codes (optimized for consumer use), the Data Matrix barcode is designed for professional environments. It was selected for ISAN because:
- It supports a compact payload, enabling smaller, space-efficient barcodes.
- It integrates seamlessly with professional workflows and systems.
1. What is a Data Matrix ECC200 Barcode?
2. What’s Actually Inside the ISAN Barcode?
3. Recommended practices for adding the ISAN barcode in credits
6. Resolving the decoded ISAN after barcode scanning
7. How to read an ISAN Barcode in Movie Credits?
1. What is a Data Matrix ECC200 Barcode ?
Data Matrix is a 2D barcode format capable of storing:
- ASCII text
- Numeric strings
- Binary data
- Identifiers like ISAN
It’s commonly used in media distribution, logistics, and manufacturing in contrast with QR code commonly used in consumer applications.
|
Learn more about Data Matrix : https://en.wikipedia.org/wiki/Data_Matrix
2. What’s Actually Inside the ISAN Barcode?
The ISAN Data Matrix encodes a human readable ISAN identifier (without the ISAN prefix ) :
Example: 0000-0005-BEAB-0000-Q-0000-0000-X
3. Recommended practices for adding the ISAN barcode in credits
Including the ISAN barcode in credits is a recommended best practice - and mandatory in some cases. When displayed, it acts as a visible watermark:
- Human-readable for manual identification.
- Machine-readable by digital scanners or software applications for automated ISAN detection.
ISAN Barcode Display Guidelines
To ensure proper context and recognition, the ISAN logo must always appear next to the barcode.
⚠️ Exception: If displaying the ISAN logo is technically impossible, the full ISAN number (including the “ISAN” prefix) must be shown instead, adjacent to the barcode.
Visual Presentation
- Color: No preference is specified - the ISAN logo may be displayed in color or black and white.
- Size & Placement:
- No fixed placement area is mandated.
- The barcode can be resized; use the vectorial version of the barcode image for an optimal resolution.
- Do not change the barcode image ratio as it might impact the barcode decoding
- The barcode must be large enough to be clearly visible and scannable by digital devices or softwares.
- For broadcast content, place the barcode in a segment likely to be aired (e.g., start or end credits).
Matching ISAN to Content
The ISAN barcode must correspond to the specific content identified in the credits:
- Non-episodic works (e.g., films, documentaries): Use the work level ISAN.
- Episodic works (e.g., TV series):
- Each episode has its own ISAN.
- Credits must display the episode-specific ISAN barcode.
- Exception: If all episodes share identical credits (e.g., short animated series), use the series-level ISAN.
- Exception: If groups of episodes (e.g., seasons) share credits, use the group-level / season-level ISAN.
- Versioned content (e.g., remastered films, reedited documentaries):
- Use the Version ISAN (V-ISAN) assigned to that specific variant.
4. Obtaining the ISAN barcode
The ISAN barcode image with the ISAN logo can be downloaded from the ISAN web interface in colour or black and white, in jpeg format or vectorial format (eps).
For more details, consult the article How to download the ISAN barcode?
5. Decoding the ISAN Barcode
The ISAN barcode can be scanned with any Data Matrix barcode scanner. Use one of the following:
Option 1: Smartphone App
Install a Data Matrix–capable scanner (not just QR-only apps).
Examples:
- Scandit
- NeoReader
- ZXing-based apps
Option 2: Desktop Scanner
- USB 2D barcode scanner (must support Data Matrix ECC200)
- It acts as a keyboard and types the decoded string
Option 3: Programmatic Decoding
There are plenty of libraries (open source or under licence) that can be found online for decoding Data Matrix barcodes. Here is an example based on the open source libdmtx library and its python wrapper (see wrappers to other languages)
Python example - Using OpenCV + pylibdmtx :
(this code exemple is only for illustration not for implementation)
from pylibdmtx.pylibdmtx import decode
from PIL import Image
img = Image.open("isan_datamatrix.png")
decoded = decode(img)
for obj in decoded:
print(obj.data.decode("utf-8"))
Output is an ISAN (without the ISAN prefix) , as for example :
0000-0005-BEAB-0000-Q-0000-0000-X
6. Resolving the decoded ISAN after barcode scanning
To resolve the extracted ISAN and retrieve information stored in the ISAN registry with the ISAN API lookup service, refer to the follow article : ISAN API 3.0 - lookup identifiers
💡 When encoded in a barcode, the “ISAN” prefix is omitted. As a result, the decoded ISAN will not include the “ISAN” prefix. You can resolve the extracted ISAN directly, without the prefix, using either the ISAN web interface or the ISAN API.
7. How to read an ISAN Barcode in Movie Credits?
Even though the ISAN barcode appears on screen, it can still be read automatically. Here’s how it works in simple terms:
7.1 Step 1 - Capture the Screen Image
A computer takes a still image (a screenshot) from the moment when the barcode appears during the credits. This can be done from:
- A digital movie file
- A broadcast recording
- A streaming capture
It’s just like taking a photo of the screen.
7.2 Step 2 - Find the Square Barcode
The system looks for:
- A small square pattern
- Usually black and white
- Often centered or near the bottom of the credits
Because a Data Matrix barcode always has a distinct square shape and border, software can recognize it visually.
7.3 Step 3 - Read the Barcode
Special barcode-reading software then “translates” the tiny black and white squares into text.
This is similar to how a supermarket scanner reads product barcodes or a phone scans QR codes :
Instead of a website link, this barcode contains the ISAN number.
7.4 Step 4 - Extract the ISAN
Once decoded, the system receives the ISAN in plain text (without the ISAN prefix) such as: 0000-0005-BEAB-0000-Q-0000-0000-X
That number can then be resolved in the ISAN registry to retrieve information of the audiovisual work.
7.5 Technical guide for reading an ISAN from movie credits
7.5.1 High-Level Pipeline
Video → Frame Extraction → Barcode Detection → Decode Data Matrix → Extract ISAN
7.5.2 Extract Frames from the Movie
Use a video processing library (e.g. OpenCV or FFmpeg).
Python Example (OpenCV)
import cv2
video = cv2.VideoCapture("movie.mp4")
while True:
ret, frame = video.read()
if not ret:
break
# Save or process frameOptimization Tip: Not every frame is needed. Indeed, ISAN appears during start or end credits, and is usually static for 1–3 seconds
Example of python code (for illustration purpose not for implementation)
frame_rate = video.get(cv2.CAP_PROP_FPS)
video.set(cv2.CAP_PROP_POS_FRAMES, frame_rate * 60) # Jump near endAlternatively:
- Process 1 frame per second
- Or use scene-change detection
However, if credits scroll slightly:
- Sample multiple frames
- Decode best-confidence result
7.5.3 Detect the Data Matrix in the Frame
The 2D barcode need to be located in the frame image; two approaches are possible:
Option 1 - Direct Decode (Simplest)
Specialised libraries can detect and decode directly the barcode from an image, like:
- pylibdmtx
- zxing
- zbar (limited Data Matrix support)
Example of python code with pylibdmtx (for illustration purpose not for implementation)
from pylibdmtx.pylibdmtx import decode
results = decode(frame)
for r in results:
print(r.data.decode("utf-8"))If the barcode is clean and high resolution, this may work immediately.
Option 2 - Preprocess First (More Robust)
Preprocessing the frame image improve detection. Indeed, movie credits often have compression artifacts, low contrast, motion blur, scaling.
Example of python code (for illustration purpose not for implementation)
import cv2
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# Then pass thresh to the decoder.
7.5.4 Crop the Barcode Region (Optional but Powerful)
Square regions can be detected; often the ISAN barcode appears centered, on black background and is square shaped.
Example of python code (for illustration purpose not for implementation)
edges = cv2.Canny(gray, 100, 200)
contours = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
approx = cv2.approxPolyDP(cnt, 0.02*cv2.arcLength(cnt, True), True)
if len(approx) == 4: # square candidate
x,y,w,h = cv2.boundingRect(cnt)
roi = frame[y:y+h, x:x+w]
# Then run decoder on roi.This dramatically increases accuracy.
7.5.5 Decode the Data Matrix and resolve the ISAN
Once successfully decoded, the ISAN is obtained: 0000-0005-BEAB-0000-Q-0000-0000-X
When encoded in a barcode, the “ISAN” prefix is omitted. As a result, the decoded ISAN will not include the “ISAN” prefix. You can resolve the extracted ISAN directly, without the prefix, using either the ISAN web interface or the ISAN API.
To resolve the extracted ISAN and retrieve information stored in the ISAN registry with the ISAN API lookup service, refer to the follow article : ISAN API 3.0 - lookup identifiers
7.5.6 Example Robust Strategy
# for each frame in first and last 5 minutes:
# preprocess frame
# try decode full frame
# if fail:
# detect square regions
# try decode each ROI
# if decode success:
# validate ISAN format
# return ISAN
# Stop at first valid match.7.5.7 Advanced Option: AI Detection
Use AI based detection to handle the process at scale in broadcast monitoring systems:
- the barcode is very small
- Train YOLO model to detect Data Matrix region
- Crop
- Decode
See also: