DOCUMENTATION DÉVELOPPEUR

Ligne de commande et export sans fenêtre

Lancer le lecteur depuis un script, et exporter des images ou des films sans fenêtre, sur une ferme de rendu ou dans un crochet du pipeline.

Le programme s'appelle BernardReview.exe sous Windows (C:\Program Files\Bernard Review\bin\) et bernard-review sous Linux. Les exemples ci-dessous écrivent BernardReview ; remplacez-le par le chemin de votre installation.

Lancer le lecteur

BernardReview <média ou .bpl> [<média> ...] [--video <fichier>] [--frame N] [--ipc-port N]
  • Un chemin seul, ou donné avec --video, est ouvert au démarrage ; plusieurs chemins sont ajoutés à la playlist dans l'ordre. Un média passé en ligne de commande est lu dès qu'il est ouvert : c'est ainsi qu'une association de fichiers ou Ouvrir avec confie un plan au lecteur.
  • --frame N place la tête de lecture sur la position N du premier plan, comptée à partir de 0 (comme la commande seek).
  • --ipc-port N fait écouter le port d'automatisation sur N au lieu de 5556. Deux lecteurs sur une même machine doivent utiliser deux ports différents.
  • Avec des options seulement (--ipc-port), le lecteur démarre en pause.
  • Si un lecteur de l'utilisateur tourne déjà, les fichiers lui sont envoyés au lieu d'ouvrir un deuxième lecteur, sauf avec --ipc-port ou --export, ou si Open files in the running player est décoché dans les préférences. Un script qui doit piloter son propre lecteur le lance donc avec --ipc-port.

Pour piloter le lecteur une fois lancé, voir API Python et IPC.

Exporter sans fenêtre

--export exécute un export sans ouvrir de fenêtre, puis rend la main. Il prend trois formes.

Des options posées sur un préréglage :

BernardReview --export --preset dailies_prores_lt \
  --source "D:/shots/SQ010_SH010_ANIM_v002.mov" \
  --output "D:/dailies/SQ010_SH010_ANIM_v002.mov" \
  --cc "exposure=0.5" --display-space rec709 \
  --burn-in "tl={clip} {version};bl={frame} {timecode};br={date}"

Plusieurs sources, chacune dans son fichier grâce à <clip> :

BernardReview --export --preset jpg_review \
  --source A001_C001.R3D --source A001_C002.R3D \
  --output "D:/stills/<clip>/" --resize 1920x0 --chroma 444

Un fichier de travail JSON, avec les mêmes champs que la commande export (exemples dans api/export_examples/) :

BernardReview --export job.json

Sans --format, l'extension de la sortie désigne le format : dailies.mov, shot.####.dpx. Pour une séquence, la sortie est un motif #### ou un dossier.

Les options

OptionValeurs
--preset NOMplates_exr_half_zip, plates_exr_float_piz, dpx_10bit, tiff_16bit_viewer, jpg_review, dailies_prores_lt, dailies_dnxhr_sq, master_prores_hq, master_prores_4444, master_dnxhr_444, client_h264, client_h265, nvfx_review, nvfx_lossless, ou un préréglage du studio
--source CHEMIN (répétable), --output ou -oEntrées et sortie ; <clip>, <version> et <recipient> dans la sortie
--formatexr, dpx, tiff, jpg, png, nvfx (NOVA), mov, mp4
--codecprores_proxy, prores_lt, prores_422, prores_hq, prores_4444, dnxhr_lb, dnxhr_sq, dnxhr_hq, dnxhr_hqx, dnxhr_444, h264, h265, mjpeg
--chroma, --crf, --bitrate, --quality, --bit-depth, --compressionQualité et compression
--audiopcm, aac, none
--fps, --in, --out, --step, --frame-offset NCadence, plage (positions à partir de 0), décalage des numéros incrustés
--start-number, --paddingNumérotation d'une séquence en sortie
--resize LxH, --proxy-scaleTaille de sortie (0 garde les proportions), résolution de décodage
--colorsource (pixels tels que décodés) ou custom (les valeurs de --cc)
--cc "clé=valeur,..."exposure, gamma, contrast, brightness, saturation, hue, r, g, b, temp, tint...
--input-space, --display-spacePar exemple acescg, srgb, logc4 ; rec709, p3, rec2020, aces2
--layerPasse d'un EXR multicouche
--burn-in ["mise en page"], --no-burn-inIncrustation : tl, tc, tr, bl, bc, br séparés par ;
--watermark, --watermark-text, --watermark-position, --watermark-opacity, --watermark-size, --no-watermarkFiligrane (MOV, MP4 et JPEG seulement)
--recipient NOM, --studio NOMRemplissent {recipient}, {studio} et <recipient>
--hardware, --no-hardware, --smart-tier, --no-smart-tierDécodage sur la carte graphique ; décoder à la résolution que la sortie demande
--annotations, --no-annotationsGraver les dessins (voir plus bas)

Les options --no- et leurs formes positives priment sur ce qu'un préréglage ou un fichier de travail a fixé.

Une recette

BernardReview --export --recipe evening_dailies.json \
  --source SQ010_SH010_COMP_v003.mov --source SQ010_SH020_COMP_v007.mov \
  --recipient "Client A"

La recette apporte tout le reste : chaque sortie est produite pour chaque source, l'une après l'autre. Elle n'accepte que --recipe, --source, --recipient, --studio et --session.

Ce que le script reçoit

  • Pendant l'export, des lignes export: frame N/M ; à la fin, une dernière ligne JSON qui résume le travail (sortie, encodeur utilisé, et jobs pour plusieurs sources ou une recette).
  • Code de sortie : 0 si tout a réussi, 1 pour une ligne de commande ou une recette invalide, 2 si un export a échoué.

À savoir avant de le brancher sur une ferme

  • Une source vidéo est décodée en 8 bits avant l'export ; les RAW et les EXR gardent leur précision.
  • La couleur viewer et clip n'a pas de sens sans fenêtre : elle devient custom, avec les valeurs de --cc.
  • Les dessins viennent de la playlist du lecteur : sans fenêtre, il n'y en a pas à graver. Pour exporter des dessins, lancez l'export depuis un lecteur ouvert (commande export avec annotations, voir API Python et IPC).
  • Le H.264 et le H.265 demandent un encodeur matériel ou système sur la machine (NVENC, Quick Sync, AMF, Media Foundation sous Windows ; NVENC, VA-API, Quick Sync sous Linux). Une machine de ferme sans carte graphique exportera en ProRes ou DNxHR.
  • Un SWF vectoriel est rendu par l'exportateur de Ruffle, qui demande une carte graphique ; la variable BERNARD_RUFFLE_EXPORTER indique son chemin sur une ferme.
  • NOVA : --format nvfx avec --compression htj2k ou wavelet (avec perte, --quality), lossless ou raw, et --bit-depth 16 ou 32.
  • Le filigrane refuse les formats de plaque (EXR, DPX, TIFF, PNG) et NOVA. Le destinataire n'apparaît ni dans le résumé ni dans le journal : le résumé et le journal écrivent <recipient> à sa place.

Pour aller plus loin : le manuel complet, parties 8.6 à 8.8 et 11 (Help > User Guide dans le lecteur).