Constat d'échec : Tuto DSM 7.3 — Miniatures vidéo, scripts et limites de File Station

  • Vague de SPAM

    Suite à une vague de spam sur le forum, les inscriptions sont temporairement limitées.

    Après votre inscription, un membre de l'équipe devra valider votre compte avant qu'il ne soit activé. Nous sommes désolés pour la gêne occasionnée et vous remercions de votre patience.

daniel225

Nouveau membre
5 Décembre 2025
20
6
3
Tout est dans le titre, je ne savais pas ou placer ce post, si un administrateur pense souhaitable de le déplacer....
J'étais un peu trop optimiste et je me suis cassé les dents, mais j'ai appris pas mal de choses, si cela peut profiter à de nouveaux utilisateurs qui découvrent les NAS Synology sous DSM 7.3....:

DSM 7.3 — Miniatures vidéo, scripts et limites de File Station
Retour d’expérience d’un débutant confronté à un blocage DSM.
Aux experts: merci de corriger si j’écrit des co…bêtises, et si j’enfonce des portes ouvertes.

Ce tutoriel ne propose pas de méthode permettant de remplacer le carré bleu affiché par File Station pour les vidéos sous DSM 7.3.
Il s’agit d’un retour d’expérience documenté, visant à expliquer :
comment DSM gère réellement les miniatures vidéo,
  • ce qui est techniquement possible,
  • ce qui ne l’est plus,
  • et pourquoi.
L’objectif est d’éviter à d’autres utilisateurs de perdre du temps sur un comportement devenu verrouillé par DSM.

Contexte
Nouveau possesseur d’un NAS Synology sous DSM 7.3, j’ai souhaité stocker des vidéos personnelles (.mp4, .mkv, etc.) et obtenir des miniatures visibles dans File Station.
Résultat immédiat : aucune miniature, uniquement un carré bleu.
Pensant à un problème de format ou d’indexation, j’ai exploré successivement :
  • Synology Photos,
  • l’indexation multimédia DSM,
  • la structure @eaDir,
  • l’utilisation de ffmpeg,
  • et les commandes synoindex.
Ce tutoriel est la synthèse de ce cheminement.

1 — Les deux systèmes multimédia sous DSM 7.3
1.1 Synology Photos
Synology Photos :
  • utilise sa propre base de données,
  • génère ses propres miniatures,
  • ignore totalement @eaDir et SYNOVIDEO_VIDEO_SCREENSHOT.jpg.
Il est adapté pour :
  • les photos,
  • les vidéos courtes (smartphones, appareils photo).
Il n’est pas conçu pour gérer une médiathèque vidéo de type “films”.
Les miniatures générées par Synology Photos ne sont pas réutilisables par d’autres composants de DSM.

1.2 Indexation multimédia DSM (classique)
Ce système repose sur :
  • des dossiers indexés (ex. /volume1/Media/Videos),
  • le dossier technique @eaDir,
  • les commandes synoindex.
C’est historiquement ce mécanisme qui permettait d’influencer l’affichage des miniatures vidéo dans File Station (DSM 6.x).

2 — Mise en place technique (résumé)
Les étapes mises en œuvre :
  • activation du service SSH (sans Telnet),
  • installation de ffmpeg et ffprobe via SynoCommunity, (ffprobe absent sous DSM 7.3 chez moi)
  • création de l’arborescence :
    • /volume1/scripts (scripts techniques),
    • /volume1/Media/Videos (dossier indexé DSM).
Deux scripts créés :
  • miniature_one.sh pour le traitement d’un fichier unique (tests, dépannage),
  • miniature_all.sh pour un traitement global et récursif.
Ces scripts :
  • créent correctement des miniatures JPEG,
  • respectent l’architecture DSM (@eaDir),
  • gèrent aussi des miniatures personnalisées via un dossier miniatures_perso.

3 — Résultat technique obtenu
D’un point de vue strictement technique, tout fonctionne :
  • les fichiers
    @eaDir/<video>.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
    sont bien créés,
  • les permissions sont correctes,
  • les commandes synoindex -a et synoindex -R video s’exécutent sans erreur.
Les scripts ne sont pas défectueux.

4 — Le point de blocage sous DSM 7.3
Malgré cela :
  • File Station continue d’afficher un carré bleu,
  • même après :
    • réindexation,
    • renommage du fichier,
    • traitement global,
    • fermeture et réouverture de File Station.
Conclusion personnelle :
Sous DSM 7.3, File Station n’utilise plus de manière fiable les miniatures externes présentes dans @eaDir pour l’aperçu des vidéos.

Ce comportement :
  • n’est pas un bug,
  • n’est pas lié aux scripts,
  • n’est pas contournable par commande ou script,
  • correspond à une décision interne de DSM.
Il n’existe apparement aucune méthode officielle pour forcer File Station à remplacer le carré bleu.

5 — Pourquoi présenter encore ces scripts ?
Même si File Station n’exploite plus ces miniatures, les scripts restent utiles pour :
  • comprendre l’architecture multimédia de DSM,
  • automatiser la génération de miniatures vidéo, (inutiles à l’instant t)
  • préparer une médiathèque propre et cohérente,
  • servir de base pour des solutions tierces,
  • éviter des tests inutiles basés sur des comportements obsolètes.
Ils constituent une fondation technique, mais ne doivent pas être présentés comme une solution File Station.

6 — Pour conclure
Sous DSM 7.3, File Station n’est plus l’outil adapté pour gérer une médiathèque vidéo avec miniatures personnalisées visibles.
Pour ce type d’usage, un serveur multimédia dédié (Jellyfin, Plex, etc.) est aujourd’hui plus pertinent.

Corriger moi si vous pensez qu'il est possible de créer ces vignettes/mignatures pour affichage sous DSM File Station ?

Les deux scripts qui n'aboutissent pas malheureusement:
miniature_one.sh
---------------------------------------------------------
Bash:
#!/bin/bash
# miniature_one.sh — DSM 7.3
#
# Gère :
# - miniature personnalisée si présente
# - sinon extraction depuis la vidéo
#
# Dossier utilisateur :
# miniatures_perso/<NomVideo>.jpg
#

# ===============================
# CONFIGURATION
# ===============================
FFMPEG="/volume1/@appstore/ffmpeg7/bin/ffmpeg"
FFPROBE="/volume1/@appstore/ffmpeg7/bin/ffprobe"

MAX_WIDTH=1280

# ===============================
# ARGUMENT
# ===============================
VIDEO="$1"

if [[ -z "$VIDEO" || ! -f "$VIDEO" ]]; then
  echo "Usage : $0 /chemin/vers/video.mp4"
  exit 1
fi

# ===============================
# CHEMINS
# ===============================
DIR="$(dirname "$VIDEO")"
NAME="$(basename "$VIDEO")"
BASENAME="${NAME%.*}"

USER_DIR="$DIR/miniatures_perso"
USER_IMG="$USER_DIR/$BASENAME.jpg"

TARGET="$DIR/@eaDir/$NAME/SYNOVIDEO_VIDEO_SCREENSHOT.jpg"

# ===============================
# PRÉPARATION DOSSIERS
# ===============================
mkdir -p "$USER_DIR"
mkdir -p "$(dirname "$TARGET")"

# Le script crée automatiquement le dossier miniatures_perso si celui-ci n’existe pas,
# afin de garantir un fonctionnement autonome même lors d’une utilisation directe.
USER_DIR="$DIR/miniatures_perso"
mkdir -p "$USER_DIR"



# ===============================
# CAS 1 — MINIATURE UTILISATEUR
# ===============================
# La taille de l’image personnalisée est vérifiée uniquement au moment de sa copie
# vers le cache DSM, afin d’éviter tout redimensionnement inutile.

if [[ -f "$USER_IMG" ]]; then
  echo "Miniature personnalisée détectée"

  # Récupérer la largeur de l’image utilisateur
  IMG_WIDTH=$("$FFPROBE" -v error -select_streams v:0 \
    -show_entries stream=width \
    -of csv=p=0 "$USER_IMG")

  # Créer le dossier cible DSM si nécessaire
  mkdir -p "$(dirname "$TARGET")"

  # Si l’image est déjà à une taille compatible → copie directe
  if [[ "$IMG_WIDTH" -le "$MAX_WIDTH" ]]; then
    cp "$USER_IMG" "$TARGET"
  else
    # Sinon, redimensionnement UNIQUEMENT pour la copie DSM
    "$FFMPEG" -y -i "$USER_IMG" \
      -vf "scale=$MAX_WIDTH:-2" \
      "$TARGET"
  fi

  chown root:root "$TARGET"
  chmod 644 "$TARGET"

  echo "Miniature personnalisée appliquée : $NAME"
  exit 0
fi


# ===============================
# CAS 2 — MINIATURE AUTO
# ===============================
echo "Miniature générée depuis la vidéo"

DURATION=$("$FFPROBE" -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 "$VIDEO")

TS=$(awk -v d="$DURATION" 'BEGIN { printf "%.0f", d*0.23 + 7 }')

"$FFMPEG" -y -ss "$TS" -i "$VIDEO" -vframes 1 \
  -vf "scale=$MAX_WIDTH:-2" \
  "$TARGET"

chown root:root "$TARGET"
chmod 644 "$TARGET"

echo "Miniature générée : $NAME"
----------------------------------------------------

miniature_all.sh
-----------------------------------------------------
Bash:
#!/bin/bash
# miniature_all.sh — RELEASE FINALE — DSM 7.3
# Gestion globale des miniatures vidéo (auto + personnalisées)

# ==================================================
# CONFIGURATION GÉNÉRALE
# ==================================================
FOLDER="/volume1/Media/Videos"

VIDEO_EXTENSIONS="mp4 mkv avi mov"

FFMPEG="/volume1/@appstore/ffmpeg7/bin/ffmpeg"
FFPROBE="/volume1/@appstore/ffmpeg7/bin/ffprobe"

MAX_WIDTH=1280

LOGDIR="/volume1/Media/logs"
LOGFILE="$LOGDIR/miniatures.log"

# ==================================================
# MODE
# ==================================================
MODE="${1:-creation}"   # audit | creation | reset | sync

if [[ ! "$MODE" =~ ^(audit|creation|reset|sync)$ ]]; then
  echo "Usage : $0 [audit|creation|reset|sync]"
  exit 1
fi

mkdir -p "$LOGDIR"

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOGFILE"
}

echo "" >> "$LOGFILE"
log "=============================="
log "DÉMARRAGE — Mode : $MODE"
log "Racine : $FOLDER"

export IFS=$'\n'

# ==================================================
# MODE RESET — suppression miniatures AUTO uniquement
# ==================================================
if [[ "$MODE" == "reset" ]]; then
  log "RESET : suppression des miniatures automatiques uniquement"

  find "$FOLDER" -type f \( \
    $(printf -- '-iname "*.%s" -o ' $VIDEO_EXTENSIONS | sed 's/ -o $//') \
  \) | while read -r VIDEO; do

    DIR="$(dirname "$VIDEO")"
    NAME="$(basename "$VIDEO")"
    BASENAME="${NAME%.*}"

    USER_IMG="$DIR/miniatures_perso/$BASENAME.jpg"
    THUMB="$DIR/@eaDir/$NAME/SYNOVIDEO_VIDEO_SCREENSHOT.jpg"

    [[ -f "$USER_IMG" ]] && continue

    if [[ -f "$THUMB" ]]; then
      rm -f "$THUMB"
      log "Supprimée (auto) : $NAME"
    fi

  done

  log "RESET terminé"
  exit 0
fi

# ==================================================
# MODE SYNC — miniatures personnalisées uniquement
# ==================================================
if [[ "$MODE" == "sync" ]]; then
  log "SYNC : mise à jour des miniatures personnalisées"

  find "$FOLDER" -type f \( \
    $(printf -- '-iname "*.%s" -o ' $VIDEO_EXTENSIONS | sed 's/ -o $//') \
  \) | while read -r VIDEO; do

    DIR="$(dirname "$VIDEO")"
    NAME="$(basename "$VIDEO")"
    BASENAME="${NAME%.*}"

    USER_DIR="$DIR/miniatures_perso"
    USER_IMG="$USER_DIR/$BASENAME.jpg"
    TARGET="$DIR/@eaDir/$NAME/SYNOVIDEO_VIDEO_SCREENSHOT.jpg"

    [[ ! -f "$USER_IMG" ]] && continue

    mkdir -p "$USER_DIR"
    mkdir -p "$(dirname "$TARGET")"

    IMG_WIDTH=$("$FFPROBE" -v error -select_streams v:0 \
      -show_entries stream=width -of csv=p=0 "$USER_IMG")

    if [[ "$IMG_WIDTH" -le "$MAX_WIDTH" ]]; then
      cp "$USER_IMG" "$TARGET"
      log "Sync perso (copie) : $NAME"
    else
      "$FFMPEG" -y -i "$USER_IMG" -vf "scale=$MAX_WIDTH:-2" "$TARGET"
      log "Sync perso (redimension) : $NAME"
    fi

    chown root:root "$TARGET"
    chmod 644 "$TARGET"

  done

  synoindex -R video
  log "SYNC terminé"
  exit 0
fi

# ==================================================
# MODE AUDIT / CREATION
# ==================================================
[[ "$MODE" == "audit" ]] && log "MODE AUDIT" || log "MODE CREATION"

find "$FOLDER" -type f \( \
  $(printf -- '-iname "*.%s" -o ' $VIDEO_EXTENSIONS | sed 's/ -o $//') \
\) | while read -r VIDEO; do

  DIR="$(dirname "$VIDEO")"
  NAME="$(basename "$VIDEO")"
  BASENAME="${NAME%.*}"

  USER_DIR="$DIR/miniatures_perso"
  USER_IMG="$USER_DIR/$BASENAME.jpg"
  TARGET="$DIR/@eaDir/$NAME/SYNOVIDEO_VIDEO_SCREENSHOT.jpg"

  mkdir -p "$USER_DIR"

  if [[ "$MODE" == "audit" ]]; then
    if [[ -f "$USER_IMG" ]]; then
      log "PERSO : $NAME"
    elif [[ -f "$TARGET" ]]; then
      log "AUTO : $NAME"
    else
      log "AUCUNE : $NAME"
    fi
    continue
  fi

  # MODE CREATION
  if [[ -f "$USER_IMG" ]]; then
    IMG_WIDTH=$("$FFPROBE" -v error -select_streams v:0 \
      -show_entries stream=width -of csv=p=0 "$USER_IMG")

    mkdir -p "$(dirname "$TARGET")"

    if [[ "$IMG_WIDTH" -le "$MAX_WIDTH" ]]; then
      cp "$USER_IMG" "$TARGET"
    else
      "$FFMPEG" -y -i "$USER_IMG" -vf "scale=$MAX_WIDTH:-2" "$TARGET"
    fi

    chown root:root "$TARGET"
    chmod 644 "$TARGET"
    log "Création perso : $NAME"
    continue
  fi

  [[ -f "$TARGET" ]] && continue

  DURATION=$("$FFPROBE" -v error -show_entries format=duration \
    -of default=noprint_wrappers=1:nokey=1 "$VIDEO")

  TS_RAW=$(awk -v d="$DURATION" 'BEGIN { printf "%.0f", d*0.23 + 7 }')
  TS_MAX=$(awk -v d="$DURATION" 'BEGIN { printf "%.0f", d-1 }')

  if [[ "$TS_RAW" -gt "$TS_MAX" ]]; then
    TS="$TS_MAX"
  else
    TS="$TS_RAW"
  fi

  mkdir -p "$(dirname "$TARGET")"

  "$FFMPEG" -y -ss "$TS" -i "$VIDEO" -vframes 1 \
    -vf "scale=$MAX_WIDTH:-2" "$TARGET"

  chown root:root "$TARGET"
  chmod 644 "$TARGET"

  log "Création auto : $NAME"

done

synoindex -R video
log "TRAITEMENT TERMINÉ"
log "=============================="
-------------------------------------------------------
 
  • J'aime
Réactions: morgyann
File station est avant tout un explorateur de fichiers ; tu n'a effectivement pas les vignettes des vidéo , mais cela n'empêche pas leur lecture . Pour les photos les vignettes sont présentes . Perso cela ne me gêne pas.