Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#226 22-01-2020 11:59:58

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.5.2-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

smolski a écrit :

COUNT_VALID_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.mkv" 2>&1 | awk '/Audio:/ && /Stream/ && /kb\/s|\(LC),/ { print $2 }'| cut -c4-4 | wc -w)


DETECT_VALID_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.mkv" 2>&1 | awk '/Audio:/ && /Stream/ && /kb\/s|\(LC),/ { print $2 }'| cut -c4-4)




touches surtout pas ces lignes.

Hors ligne

#227 22-01-2020 12:02:37

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.5.2-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

Le script c'est ça et tu ne touche plus à rien dedans pour l'instant : wink


#!/bin/bash

## Golgot200
## sudo pacman -S ffmpeg handbrake-cli mkvtoolnix-cli mplayer lsdvd mediainfo

##                               x264
##                               x264_10bit
##                               nvenc_h264
##                               x265
##                               x265_10bit
##                               x265_12bit
##                               nvenc_h265
##                               mpeg4
##                               mpeg2
##                               VP8
##                               VP9
##                               theora


PATH=$PATH:/sbin:/usr/sbin

## CONDITION : UN SEUL DVD-VIDÉO.
mapfile -t  BLKID < <(blkid /dev/sr* |sed -E 's/^([^:]+): .*/\1/')

if [[ "${#BLKID[@]}" -eq  "0" ]] ; then
    echo "Aucun DVD trouvé: abandon"
    exit 0
fi

idx=0
for dev in "${BLKID[@]}"; do
    mnt=$(mount |sed -n -E "s/^${dev//\//\\\/} on (.*) type .*\$/\\1/p")
    [[ -z "$mnt" ]] && continue
    if [[ -f "$mnt/VIDEO_TS/VIDEO_TS.IFO" ]]; then
        DEVICES[$idx]="$dev"
        MOUNT_POINTS[$idx]="$mnt"
        idx=$((idx+1))
    fi
done

if [[ "${#DEVICES[@]}" -eq 0 ]]; then
    echo "Aucun dvd vidéo monté : Abandon"
    exit 0
elif [[ "${#DEVICES[@]}" -gt 1 ]];  then
    echo "Il y a plus d'un dvd video détecté : Abandon"
    exit 0
fi

DEVICE=${DEVICES[0]}
MOUNT_POINT=${MOUNT_POINTS[0]}

## LABEL DVD-VIDÉO & NOMBRE TOTAL DE TITRES SUR CELUI-CI.
idx=0
TITLE_COUNT=0
regexp='^Title: '
while read -r line; do
    idx=$((idx+1))
    if [[ "$idx" -eq 1 ]]; then
        TITLE=${line#*: }
    elif [[ "$line" =~ $regexp ]]; then
        TITLE_COUNT=$((TITLE_COUNT+1))
    fi
done < <(lsdvd "$DEVICE" 2>/dev/null)

unset regexp dev mnt idx BLKID DEVICES MOUNT_POINTS

if [[ -z "$TITLE" ]]; then
    echo "Pas de dvd vidéo trouvé : abandon"
    exit 0
fi

echo "Proceed..."





echo "DVD-Vidéo : $TITLE"
read -r -p "Ce nom convient-il ? [Y/n] " input
 
case $input in
    [yY][eE][sS]|[yY])
 echo "Yes"

 mkdir -p "$TITLE/IFOS"
 ;;
    [nN][oO]|[nN])
 echo "No"
 read -p "Entrer un nouveau nom: " TITLE
 
 mkdir -p "$TITLE/IFOS"
       ;;
    *)
 echo "Invalid input..."
 echo "Quit"
 exit 1
 ;;
esac



for (( i=1; i<=TITLE_COUNT; i++ ))
do


## TITRES D4UNE DURÉE ÉGALE OU PLUS DE .... SECONDES [ ICI, 2 SECONDES]
               
    LENGTH=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | \
              sed -E -n 's/^.*ID_LENGTH=([0-9]+).*$/\1/p')
           
    LIMIT=5
    [[ "$LENGTH" -le "$LIMIT" ]] && continue





## FRAMES 15
COUNT_AUDIO_MPLAYER=$(mplayer -noconfig all -nocache -vo null -ao null -frames 15 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | grep -c "AUDIO:")


## POUR N'AVOIR QUE LE FRANÇAIS.
AUDIO_FRENCH=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null | grep "Language: fr" | awk '{print$4}' )
COUNT_AUDIO_FRENCH=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null |grep -c 'Language: fr')  
AUDIO_LANG_LIST_FRENCH=$(echo $AUDIO_FRENCH | sed 's/[[:blank:]]/,/g')


## ICI BITRATE ET RATIO ORIGINAUX.
BITRATE=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | \
          grep "VIDEO:" | awk '{print$8}' | sed 's/\.[^ ]*/ /g')
RATIO=$(lsdvd -x $DEVICE -t "$i" | grep -m1 "Aspect ratio:" | awk '{print$11}' | sed -e 's/\//\:/g' | tr -d ',')



## ENCODAGE DE TOUS LES TITRES DU DVD-VIDÉO.
if [[ "$COUNT_AUDIO_MPLAYER" -ge "0" ]]; then

HandBrakeCLI --no-dvdnav \
--input $DEVICE --title $i \
--all-audio --all-subtitles --subtitle-lang-list fr \
-e x264 -b $BITRATE --loose-anamorphic --modulus 2 \
--hqdn3d=y-spatial=1.5:cb-spatial=1.5:cr-spatial=1.5:y-temporal=4:cb-temporal=4:cr-temporal=4 --unsharp=y-strength=0.5:y-size=5:cb-strength=0.5:cb-size=5 \
--crop 0:0:0:0 \
--aencoder copy \
--output "$TITLE/$i-$TITLE.mkv"


             

### SI LE TITRE N'A PAS D'AUDIO, ON NE FRANCHIRA PAS LES ÉTAPES SUIVANTES.


    fi

## AUDIO(S) INDIQUÉS PAR LSDVD ET AUDIO(S) INDIQUÉS PAR FFPROBE EN CIBLANT KB/S.
COUNT_AUDIO=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null |grep -c 'Audio:')  
#COUNT_VALID_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.mkv" 2>&1 | awk '/Audio:/ && /Stream/ && /ac3,/ && /kb\/s/ { print $2 }'| cut -c4-4 | wc -w)
COUNT_VALID_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.mkv" 2>&1 | awk '/Audio:/ && /Stream/ && /kb\/s|\(LC),/ { print $2 }'| cut -c4-4 | wc -w)

## UN OU PLUSIEURS STREAMS AUDIO.
if [[ "$COUNT_AUDIO_MPLAYER" -ge "1" ]] && [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_AUDIO" != "$COUNT_VALID_AUDIO" ]] ; then
#### VÉRIFICATION ET REJET DES STREAMS AUDIOS INVALIDES (AU CAS OÙ).
DETECT_VALID_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.mkv" 2>&1 | awk '/Audio:/ && /Stream/ && /kb\/s|\(LC),/ { print $2 }'| cut -c4-4)
VALID_AUDIO_PREPARE=$(echo $DETECT_VALID_AUDIO | sed -e 's/\ /\,/g' >> "$TITLE/$i-choix.txt")
VALID_AUDIO=$(head -n 1 "$TITLE/$i-choix.txt" | tail -n 1)
     
       mkvmerge -o "$TITLE/$i-$TITLE-[vérifié].mkv" --atracks $VALID_AUDIO "$TITLE/$i-$TITLE.mkv"
       mv "$TITLE/$i-$TITLE-[vérifié].mkv" "$TITLE/$i-$TITLE.mkv"

#rm -f "$TITLE/$i-choix.txt"

     
 
         
    fi
     


## CETTE ÉTAPE NE SERA UTILISÉE QUE SI IL Y A QU'UN SEUL STREAM AUDIO ET SANS INFO SUR LE LANGUAGE. ON NE PARLE PAS ICI DE (XX ou UNKNOWN)
COUNT=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | grep -c "aid")

NULL_INFO=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | \
               awk '/alang/ { print $9 }' | wc -w)
               
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT" -eq "1" ]] && [[ "$NULL_INFO" -eq "0" ]] ; then
          mkvpropedit "$TITLE/$i-$TITLE.mkv" --edit track:a1 --set language=und
 


    fi    
     


## CETTE ÉTAPE NE SERA UTILISÉE QUE SI IL Y A UN OU PLUSIEURS STREAMS AUDIOS FR AVEC DES STREAMS AUDIOS ETRANGERS (POUR NE LAISSER QUE CELLES-CI).
## SI IL N'Y A QUE DU FRANÇAIS, CETTE OPTION NE SERA PAS UTILISÉE.
VERIF_AUDIO_ALL=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | \
   grep -c "alang")
VERIF_AUDIOFR=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | \
   grep -c "alang fre,")
         
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$VERIF_AUDIOFR" -ge "1" ]] && [[ "$VERIF_AUDIO_ALL" != "$VERIF_AUDIOFR" ]] ; then

      mkvmerge -o "$TITLE/$i-$TITLE-[Language: Français].mkv" -a fre "$TITLE/$i-$TITLE.mkv"

rm -f "$TITLE/$i-$TITLE.mkv"
      mv "$TITLE/$i-$TITLE-[Language: Français].mkv" "$TITLE/$i-$TITLE.mkv"


   
   fi



## CETTE ÉTAPE NE SERA UTILISÉE QUE SI IL Y A UN STREAM AUDIO AU FORMAT LPCM.
## DUMPAUDIO ET SAUVEGARDE DU LPCM EN WAVE D'UN DVD DE CONCERT LIVE.
AIDS_LPCM=$(lsdvd -a "$DEVICE" -t "$i" 2>/dev/null | awk '/lpcm|id:/ { print $22 }')  
COUNT_AUDIO_LPCM=$(lsdvd -a "$DEVICE" -t "$i" 2>/dev/null | grep -c "lpcm" )  

if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_AUDIO_LPCM" -ge "1" ]]; then

mkdir -p "$TITLE/WAVE"

for n in $AIDS_LPCM; do
        mplayer -noconfig all -nocache -benchmark -vc null -vo null \
                 -ao pcm:fast:file="$TITLE/WAVE/[$i-($n)]-$TITLE.wav" \
                 -identify -dvd-device "$DEVICE" dvdnav://$i -ni -aid $n
done  
                                       
   

   fi
   

## ON INDIQUE LA LANGUE DE L'AUDIO DANS LE RENOMAGE DU TITRE ET LE NOMBRE.
INFO=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | \
          awk '/alang/  { x = x $9 ""}
              END { sub(/,*$/, "", x); print x }'
)
COUNT_INFO=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | grep -c "alang")
COUNT=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null | grep -c "aid")

## UNE OU PLUSIEURS INFOS SUR L'AUDIO ET UN OU PLUSIEURS AUDIOS.
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -ge "1" ]] && [[ "$COUNT" -ge "1" ]] ; then      
      mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: $INFO].mkv"        
      mediainfo "$TITLE/$i-$TITLE-[Audio: $INFO].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO].log"                
   

   fi
   

## PAS D'INFO ET UN SEUL AUDIO.
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "1" ]] ; then  
     mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: und].mkv"
     mediainfo "$TITLE/$i-$TITLE-[Audio: und].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: und].log"  


  fi
 
 
## PAS D'AUDIO DONC PAS D'INFO.
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "0" ]] ; then  
    mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: nosound].mkv"
    mediainfo "$TITLE/$i-$TITLE-[Audio: nosound].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: nosound].log"

 
  fi
done
 

Hors ligne

#228 22-01-2020 12:44:08

smolski
quasi...modo
Lieu : AIN
Distrib. : 9 (stretch) 64 bits + backports (buster) 10
Noyau : 4.9.65-3+deb9u2 4.19.0-6-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

j'y teste... ce sera handbrake9 chez moi wink

"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#229 22-01-2020 12:51:31

smolski
quasi...modo
Lieu : AIN
Distrib. : 9 (stretch) 64 bits + backports (buster) 10
Noyau : 4.9.65-3+deb9u2 4.19.0-6-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

En cours... J'y vois pas la création de choix.txt au départ...

"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#230 24-01-2020 14:27:09

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.5.2-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

Bonjour,

je teste maintenant une fonction pour la détection des "sub idx" à 00:00:00.000000000
je peine au niveau des DIR hmm

Dernière modification par golgot200 (24-01-2020 14:28:14)

Hors ligne

#231 24-01-2020 17:03:33

smolski
quasi...modo
Lieu : AIN
Distrib. : 9 (stretch) 64 bits + backports (buster) 10
Noyau : 4.9.65-3+deb9u2 4.19.0-6-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Terminé] Script Ripper tous le DVD-VIDEO avec HandBrakeCLI

J'utilise le script 8 et non pas 9 qui me posait problème.
J'ai ainsi le fichier choix.txt pour certains dvd, il contient à chaque fois uniquement le chiffre 1.

J'installe le script 8 à des primo débutants chez qui j'ai installé un dual boot avec debian, ça va les booster vers la ligne de commande... wink

Encore merci pour tout l'boulot !

"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

Pied de page des forums