Il ne s’agit pas ici d’une compatibilité du Dolby Vision avec le HDR10 mais bien d’une possibilité du Dolby Vision d’avoir les mêmes métadonnées que le HDR10. Malheureusement Resolve ne le fait pas défaut. Il faut faire quelques manip supplémentaires… que nous allons voir.
Max FALL – Max CLL
Les métadonnées HDR10 sont au nombre de 2, elles sont le minimum syndical en terme de métadonnées pour diffuser du contenu HDR :
- Max FALL ➧ Max Frame Average Light Level ➧ Niveau de luminance moyen du fichier HDR
- Max CLL ➧ Max Content Light Level ➧ Niveau maximum de luminance du fichier HDR
On retrouve ces mêmes informations dans les métadonnées Dolby Vision L6. Malheureusement l’export d’XML Dolby Vision de Resolve a toujours ces valeurs à 0.

Calcul de Max FALL et Max CLL avec Resolve
- Importer le fichier HDR, dans le mediapool d’un projet avec la colorscience : DaVinci Color Managed.
- Clic droiture le fichier HDR ➧ InputColorSpace : Vérifier que c’est le bon, notamment le gamma (HLG ou PQ)

- Clic droit sur le fichier HDR du mediapool ➧ generate HDR Report.
- Une analyse du fichier est lancé, cela génère un pdf.

- Dans le pdf, les Max FALL et Max CLL sont renseignés
Insérer les Max FALL & Max CLL
Dernière étape pas très sexy, car elle utilise le programme DolbyVision METAFIER, programme en ligne de commande

la commande dans le terminal est la suivante :
./metafier --max-fall-cll 104.27 278.308 /Users/videodesign/Desktop/snowboard_long\ Dolby Vision_P3D65.xml
Décomposons cette dernière
- ./metafier (lance le programme)
- Espace
- –max-fall-cll (lance la commande d’insertion)
- Espace
- Valeur du Max FALL
- Espace
- Valeur du Max CLL
- Espace
- Chemin du fichier Dolby Vision (xml ou mxf)
Resultat

le METAFIER va renommer le fichier d’origine en ajoutant l’extension « .old.xml »/ ».old.mxf »
le fichier modifié a le même nom.
⚠️ Remarques IMF⚠️

Si le MXF a aussi les images JPEG2000 (plus toujours le cas) il n’y a pas de double ➧ Attention

Les fichiers MXF étant modifiés, leurs somme de contrôles (SHA1 | base64) ne correspondent plus à celles dans PKL.xml….. Corrigeons ce problème :
#!/bin/bash
set -e
MXF="$1"
if [[ -z "$MXF" || ! -f "$MXF" ]]; then
echo "Usage: $0 fichier.mxf"
exit 1
fi
# Résolution chemins
MXF_PATH="$(cd "$(dirname "$MXF")" && pwd)/$(basename "$MXF")"
IMF_DIR="$(dirname "$MXF_PATH")"
FILENAME="$(basename "$MXF_PATH")"
# Taille réelle du MXF
MXF_SIZE=$(stat -f%z "$MXF_PATH")
# Recherche PKL
mapfile -t PKL_FILES < <(find "$IMF_DIR" -maxdepth 1 -type f -name 'PKL*.xml')
if [[ "${#PKL_FILES[@]}" -eq 0 ]]; then
echo "Erreur : aucun PKL*.xml trouvé dans $IMF_DIR"
exit 1
elif [[ "${#PKL_FILES[@]}" -gt 1 ]]; then
echo "Erreur : plusieurs PKL*.xml trouvés dans $IMF_DIR"
printf ' %s\n' "${PKL_FILES[@]}"
exit 1
fi
PKL_FILE="${PKL_FILES[0]}"
echo "MXF : $MXF_PATH"
echo "PKL : $PKL_FILE"
echo "Size : $MXF_SIZE octets"
# Sauvegarde PKL
cp "$PKL_FILE" "$PKL_FILE.bak"
# Vérification Size + mise à jour Hash
awk -v fname="$FILENAME" \
-v newhash="$(openssl sha1 -binary "$MXF_PATH" | base64)" \
-v realsize="$MXF_SIZE" '
BEGIN {
in_asset = 0
match_asset = 0
size_ok = 0
}
/<Asset>/ {
in_asset = 1
match_asset = 0
size_ok = 0
}
/<\/Asset>/ {
if (match_asset && !size_ok) {
print "ERREUR: Size PKL != Size MXF pour " fname > "/dev/stderr"
exit 1
}
in_asset = 0
match_asset = 0
}
in_asset && $0 ~ "<AnnotationText>" fname "</AnnotationText>" {
match_asset = 1
}
in_asset && match_asset && /<Size>/ {
if ($0 ~ "<Size>" realsize "</Size>") {
size_ok = 1
} else {
size_ok = 0
}
}
in_asset && match_asset && size_ok && /<Hash>/ {
sub(/<Hash>[^<]*<\/Hash>/,
"<Hash>" newhash "</Hash>")
}
{ print }
' "$PKL_FILE.bak" > "$PKL_FILE"
echo "PKL mis à jour avec succès (hash remplacé, size validée)."
./update_pkl_hash.sh /Volumes/DELIVERY/IMF/ASSETS/DOLBY_a9ffc5e8-62a2-473f-8918-4c385d153d2e.mxf
Pourquoi ce script est « safe delivery » :
- Impossible de mettre à jour un mauvais asset
- Impossible de masquer une modification de taille
- Conforme aux exigences QC IMF (Netflix / broadcasters)

Laisser un commentaire