Vous n'êtes pas identifié(e).
Tu pourras mettre la variable COUNT_SID_FR après. Si c'est celle du post 269, elle fonctionne.
Non dans le post #269, c'est la variable SIDFR que je triturais
Mais je me suis trompé, je parlais de trucs que tu m'as demandé hier, mais qui ne sont pas
le script que j'ai collé post #274, car ce n'était pas dans le script originel et je ne sais pas
comment tu comptes intégrer tout ça.
Dernière modification par enicar (16-06-2019 18:37:56)
Hors ligne
Je vérifie mais c'est sùr que 0x est général.
D'après ce que j'ai vu, il s'agit de rajouter « -map i: » devant chaque occurrence
de « 0x… ». Et d'après les exemples de ton post #261, il semblerait que ce soit
toujours le cas. D'ailleurs je ne vois pas quel sens cela pourrait avoir si ce n'était pas
le cas pour ffmpeg…
Hors ligne
Or une fois que bash va lire le résultat, il va remplacer les
nouvelles par des espaces. En plus ça serait plus simple (et plus
rapide) de faire la substitution sur la chaîne finale pour tout
afficher d'un seul coup, sans utiliser de boucle for.
Et donc voilà ce que ça pourrait donner :
L'espace que je mets en plus au début n'est pas gênant puisqu'il sera
mangé par bash au moment de l'interpolation de la variable.
EDIT :
D'ailleurs c'est quoi ce caractère qu'on supprime à la fin du dernier élément ?
Dernière modification par enicar (16-06-2019 18:59:00)
Hors ligne
alors que moi il me faudrait
pour le fr
0 pour 1
1 pour 2
20 pour 21
Dernière modification par Anonyme (16-06-2019 18:57:09)
Hors ligne
Hors ligne
et non
Correction du
pour
Dernière modification par Anonyme (16-06-2019 19:32:11)
C'est juste un extrait avec juste ce qui m'intéresse pour SIDFR.
Je dois dire que je trouvais la ligne de code :
assez suspecte. Après je ne connais pas tous les cas qui peuvent se
produire.
Hors ligne
...
Pour me rendre compte de ce qui se passe sur ton dvd, tu pourrais me renvoyer la sortie de ce
script :
#! /bin/bash
declare -a MPLAYER_IDENTIFY
declare -a LSDVD_X
menage () {
rm -f "$FOLDER"/*.idx
rm -f "$FOLDER"/*.sub
rm -f "$FOLDER/$i-$TITLE+CHAPTERS.mkv"
}
mplayer_identify () {
if [[ "${#MPLAYER_IDENTIFY[@]}" -eq 0 ]]; then
mapfile MPLAYER_IDENTIFY < \
<(mplayer -noconfig all -nocache -vo null -ao null -frames 0 \
-identify -dvd-device "$DEVICE" dvd://"$1" 2>/dev/null)
fi
echo -n "${MPLAYER_IDENTIFY[@]}"
}
lsdvd_x () {
if [[ "${#LSDVD_X[@]}" -eq 0 ]]; then
mapfile LSDVD_X < <(lsdvd -x "$DEVICE" -t "$1" 2> /dev/null)
fi
echo -n "${LSDVD_X[@]}"
}
## CONDITION : UN SEUL DVD-VIDÉO
mapfile -t BLKID < <(blkid /dev/sr* |sed -E 's/^([^:]+).*/\1/')
if [[ "${#BLKID[@]}" -eq "1" ]] ; then
echo "Proceed..."
else
echo "Aucun DVD-Vidéo ou 2 DVD-Vidéos/DVD-ROM ... dans différents lecteurs ?"
exit 0
fi
DEVICE=${BLKID[0]}
unset BLKID
## LABEL DU DVD-VIDÉO & NOMBRE TOTAL DE TITRES SUR CELUI-CI
TITLE=$(lsdvd "$DEVICE" | awk 'NR == 1 {print $3; exit}')
TITLE_COUNT=$(lsdvd "$DEVICE" | grep -c ^'Title: ')
DIR=$(xdg-user-dir DESKTOP)
FOLDER="$DIR/tmp/$TITLE"
if [ ! -d "$FOLDER" ]; then
echo "$FOLDER n'existe pas !"
echo "Création Du Dossier $FOLDER"
mkdir -p "$FOLDER"
fi
for (( i=1; i<=TITLE_COUNT; i++ ))
do
MPLAYER_IDENTIFY=()
LSDVD_X=()
## TITRES D'UNE DURÉE DE PLUS DE .... SECONDES [ ICI, 1200 SECONDES = 20 MINUTES]
LENGTH=$(mplayer_identify "$i" | grep ID_LENGTH | sed -E 's/.*=([0-9]*)/\1/' | sed 's/\..*//')
LIMIT=1200
[[ "$LENGTH" -le "$LIMIT" ]] && continue
SIDFR1=$(lsdvd_x "$i" | grep "Subtitle:" | grep "Language: fr" | \
awk '{print $2}' | sed s'/.$//' | \
awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}')
SIDFR2=$(lsdvd_x "$i" |awk '/Subtitle:/ && /Langage: fr/ { sub(/,$/ ,"", $2); print $2 }' | \
awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}')
echo "piste dvd://$i"
echo "SIDFR1: $SIDFR1"
echo
echo "SIDFR2: $SIDFR2"
echo
echo
done
C'est juste un extrait avec juste ce qui m'intéresse pour SIDFR.
Je dois dire que je trouvais la ligne de code :
awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}'
assez suspecte. Après je ne connais pas tous les cas qui peuvent se
produire.
Hors ligne
Dernière modification par Anonyme (16-06-2019 20:01:52)
Je propose :
Chez moi, ça marche, et c'est quand même bien plus simple.
Ce que je ne comprends pas dans ton code c'est le « print RT »
c'est censé affiché quoi ? Normalement RT contient la partie
correspondante à RS, dans ce cas c'est un morceau de chaîne sans
chiffre… (car RS="[^0-9]"). Je ne vois pas à quoi ça sert si tu veux
juste récupérer les numéros des pistes de sous titres…
Il faut que tu m'expliques.
Dernière modification par enicar (16-06-2019 20:24:19)
Hors ligne
Premier test.
Un DVD avec que des audio ac3 ou dts et quelques sub en français : c'est impeccable
je teste maintenant un dvd avec un audio ac3 eng et deux audio mpeg1 en et fr et un sub fr ...
PS: j'ai passé LIMIT à 30 secondes
Par contre en passant à LIMIT 30 secondes, je viens de m'appercevoir que je n'ai plus le sous-titrages français sur les "one audio eng"
Par contre en passant à LIMIT 30 secondes, je viens de m'appercevoir que je n'ai plus le sous-titrages français sur les "one audio eng"
Pas normal… Mais je ne vois pas d'où ça peut venir…
Hors ligne
Anonyme a écrit :Par contre en passant à LIMIT 30 secondes, je viens de m'appercevoir que je n'ai plus le sous-titrages français sur les "one audio eng"
Pas normal… Mais je ne vois pas d'où ça peut venir…
je cherche. je suis revenu sur mon dernier script et ça passe. Je compare le tien et le mien
Dernière modification par Anonyme (16-06-2019 20:18:05)
Enfin ça fonctionne c'est l'essentiel
Je n'aime pas ce genre de comportement, ça doit tout le temps fonctionner.
Hors ligne
Anonyme a écrit :Enfin ça fonctionne c'est l'essentiel
Je n'aime pas ce genre de comportement, ça doit tout le temps fonctionner.
Et oui mais je viens de refaire encore le test et tout est bon. un ctrl + c trop rapide je pense. Ce serait plus plausible avec un idx qui n'a pu se créer à temps. Je n'ai pas du voir l'erreur dans mon terminal.
Et donc je te propose une modification pour la variable SIDFR non
encore intégré dans le post #274. Il s'agit de tout mettre
dans la même commande awk, au lieu de
SIDFR=$(lsdvd_x "$i" |awk '/Subtitle:/ && /Language: fr/ { sub(/.$/, "", $2); print $2 }' | \
awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}')
Je propose :
SIDFR=$(lsdvd_x "$i" |awk '/Subtitle:/ && /Language: fr/ { sub(/,$/ ,"", $2);
if ($2 ~ /^[0-9]+$/) print (--$2) }')
Chez moi, ça marche, et c'est quand même bien plus simple.
Ce que je ne comprends pas dans ton code c'est le « print RT »
c'est censé affiché quoi ? Normalement RT contient la partie
correspondante à RS, dans ce cas c'est un morceau de chaîne sans
chiffre… (car RS="[^0-9]"). Je ne vois pas à quoi ça sert si tu veux
juste récupérer les numéros des pistes de sous titres…
Il faut que tu m'expliques.
Ta modification fonctionne.
Pour ce qui est du « print RT » c'est quand on c'est cassé les dents avec un collègue pour arriver à sortir les sub fr alors qu'on pointait toujours sur de l'étranger. La commande fonctionnant sur plusieurs DVD, on a pas cherché plus loin. Le but étant de continuer pour les autres DVDs et les éventuelles rajouts d'options.
Dernière modification par Anonyme (16-06-2019 20:35:19)
Je ne sais pas où tu as chopé ça…
Ceci dit dans certains cas, ça pourrait être utile. Mais vu le format qui est sortie
à la suite du premier traitement (on récupère un nombre), je ne vois pas l'intérêt.
À moins qu'on ne récupère pas toujours un nombre et qu'il faille utiliser ce résultat
par la suite. Surtout que je viens de voir dans le man de mencoder que l'option
« -sid » prend un nombre de 0 à 31…
EDIT : Nos messages se sont croisés, désolé.
Dernière modification par enicar (16-06-2019 20:52:57)
Hors ligne
Ta modification fonctionne.
Bien, c'est une bonne nouvelle. Et ça me paraît logique. Finalement
j'ai remplacé deux grep, un sed et deux awk par une seule commande
awk… c'est pas mal du tout.
Hors ligne
Je pense que je n'aurais aucune explication de ta part sur :
awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}
Je ne sais pas où tu as chopé ça…
Ceci dit dans certains cas, ça pourrait être utile. Mais vu le format qui est sortie
à suite du premier traitement (on récupère un nombre), je ne vois pas l'intérêt.
À moins qu'on ne récupère pas toujours un nombre et qu'il faille utiliser ce résultat
par la suite. Surtout que je viens de voir dans le man de mencoder que l'option
« -sid » prend un nombre de 0 à 31…
EDIT : Nos messages se sont croisés, désolé.
On cherchait un moyen de toujours commencer par 1 .... 20 au lieu de 2 .... 21 pour ce qui est de print ($0-1) et le collègue à mis ce print RT mais je ne peux pas t'en dire plus. Ou peut-être décaler le 1 du 20 mais je ne suis pas sûr.
Dernière modification par Anonyme (16-06-2019 20:55:50)
Premier test.
Un DVD avec que des audio ac3 ou dts et quelques sub en français : c'est impeccable
je teste maintenant un dvd avec un audio ac3 eng et deux audio mpeg1 en et fr et un sub fr ...
PS: j'ai passé LIMIT à 30 secondes
Le "un audio ac3 eng et deux audio mpeg1 en et fr et un sub fr" c'est impeccable
On chercher un moyen de toujours commencer par 1 .... 20 au lieu de 2 .... 21 pour ce qui est de print ($0-1) et le collègue à mis ce print RT mais je ne peux pas t'en dire plus. Ou peut-être décaler le 1 du 20 mais je ne suis pas sûr.
Le « print RT » peut servir à remettre le séparateur (RS, qui peut
être une regexp et donc la chaîne correspondante n'est pas constante)
dans le flux de sortie. Mais dans ce cas, il me semble que ça ne sert
à rien.
EDIT : Remarque, voilà encore une chose que je ne
connaissais pas et que je viens de découvrir, et ce n'est pas le seul truc
que j'ai apprise en modifiant ton script
Dernière modification par enicar (16-06-2019 21:01:46)
Hors ligne
Celle qui correspond à (AC3 & DTS & MPEG1 SOUS-TITRAGE(S) VF).
Dans les autres cas, il n'y a pas besoin de ce filtre ?
Hors ligne