Ajouter les métadonnées HDR10 au Dolby Vision

2–4 minutes
557 mots

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

  1. Importer le fichier HDR, dans le mediapool d’un projet avec la colorscience : DaVinci Color Managed.
  2. Clic droiture le fichier HDR ➧ InputColorSpace : Vérifier que c’est le bon, notamment le gamma (HLG ou PQ)
  1. Clic droit sur le fichier HDR du mediapool ➧ generate HDR Report.
  2. Une analyse du fichier est lancé, cela génère un pdf.
  1. 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

  1. ./metafier (lance le programme)
  2. Espace
  3. –max-fall-cll (lance la commande d’insertion)
  4. Espace
  5. Valeur du Max FALL
  6. Espace
  7. Valeur du Max CLL
  8. Espace
  9. 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⚠️

case à cocher pour avoir les métadonnées Dolby Vision seules dans un mxf de l’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)

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.