Debian-facile

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

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

#1 27-05-2019 16:06:09

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

Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Lien vers le tuto :

Page : Liste des scripts debian-facile :
https://debian-facile.org/doc:programma … ian-facile

Ou directement :
Script : FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc):
https://debian-facile.org/doc:programmation:bash:ffmpeg


encoder x264

Vérification si un DVD-Vidéo est chargé dans le lecteur. (Si deux lecteurs, un seul DVD-Vidéo devra être monté)
Tous les autres support afficheront à un message d'avertissement.

Le travail se fera où le commande sera lancé.

Une fois les conditions requises, un choix de nom de dossier sera proposé. Label par défaut ou personalisé.
Ce choix deux peut servir, car certains Dvd-vidéo peuvent porter le même nom. "DVD_VIDEO" par exemple.

Une fois sont choix fait, le script créera le dossier "title" ainsi deux dossiers à l'intèrieur de celui-ci. "IFOS" et "VOBSUBS"

Ensuite, le script détectera le bitrate d'origine du titre et sera proposé. Le bitrate peut-être différent entre titres, il sera pris en compte.
Si le bitrate est trop important pour vous, un choix de mettre un même bitrate personnalisé sera proposé sur tous les titres. il sera indentique pour tout les titres.

Maintenant, le script peut commencer.

****Il prendra en compte tous les titres, peut importe la durée.****
même les fioritures.

Dans un premier temps, il dump le titre en un fichier vob avec mplayer.
Il analysera si ce vob est entrelacé ou non. Pour chaque cas, il appliquera yadif ou pas.
Il comptabilisera le nombre d'audio présent sur le titre.
Il prendra en compte le FPS d'origine.
Il détectera les "Audio: ac3, 0 channels" et les supprimera. (sans cette fonction, le titre ne pouvait pas être encodé)
Il prendra les infos utiles sur les streams audios pour ensuite les tagguer dans la vidéo.
Au final, pas d'audio, mp2, ac3, dts, lpcm seront traités et taggués. (tous ça en gardant le bon ordre et les bonnes informations)
pour ce qui est de l'audio LPCM (concert principalement), un dump se fera pour sauvegarder cette bande son dans un dossier "WAVE" crée pour l'occasion.
Ensuite sur le titre encodé, et grace au tags, il regardera si un ou plusieurs audios sont en français. Il ne gardera que celles-ci. Sinon, il laissera le titre dans l'état.
On incorporera aussi les chapitres.
Si présent, tout les sous-titres français seront intégrés (avec le ratio et une vérification de l'ID en fr). Pour ce point, il peut arriver que certains soit nul. Ils seront isolés dans le dossier "VOBSUBS"
et pas intégrés dans la vidéo.
Tous les vobsubs, mauvais confondus, seront sauvegardés dans le dossier.
Les sous-titres dans la vidéo seront aussi taggués.
On créera aussi un fichier des caractéristiques pour chacun des titres en sortie avec mediainfo.
On se servira des infos pour renommer les titres dans le dossier.

Rajout :
Que français dès que c'est possible
ou
All



Merci à enicar et tous les autres pour leur aide

wink


apt-get install mplayer ffmpeg lsdvd ogmtools mkvtoolnix mencoder util-linux





Bonjour,
je met cette commande de côté :


ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS  -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
 



Avec une carte graphique MSI Geforce GTX 1050 Ti.
Un film ripper en VOB  d'une durée de 1H37mn.
Un fichier final de 1.6 Go.
Temps d'encodage environ 3 minutes. [Hors rippage 2 minutes environ].
mpeg2_cuvid pour le décodage du VOB.
h264_nvenc  pour l'encodage.
Environ 1000 fps.
C'est pour plus tard dans un script.



Script TEST13_FINAL_RC_CHOIX_LANGS
29-04-2020


#!/bin/bash

## golgot200
## Testeur smolski
## 29/04/2020

START_TIME=$(date +%s)


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

## CONDITION : UN SEUL DVD-VIDÉO.
mounting_directory=$( mount | grep  '/dev/sr' | grep -Po 'on\K.*(?=type)'  | sed 's|\(.*\)/.*|\1|' | uniq )
COUNT_VIDEO_TS=$(find ${mounting_directory} -maxdepth 3 -name 'VIDEO_TS.IFO' 2> /dev/null | wc -l)

DEVICE=$(blkid /dev/sr* | awk '{print $1}' | sed -e 's/://g')
COUNT_DEVICE=$(blkid /dev/sr* | awk '{print $1}' | sed -e 's/://g' | wc -l)


if [[ "$COUNT_VIDEO_TS" -eq 0 ]]; then
    echo -e "\e[3;4;32m Aucun DVD-VIDEO monté : Abandon\e\n[0m"
    exit 0
elif [[ "$COUNT_VIDEO_TS" -gt 1 ]];  then
    echo -e "\e[3;4;32m Il y a plus d'un DVD-VIDEO détecté : Abandon\e\n[0m"
    exit 0


  fi



if [[ "$COUNT_VIDEO_TS" -eq 1 ]] && [[ "$COUNT_DEVICE" -eq 1 ]]; then
echo -e "\e[3;4;32m Les conditions sont réunies : On continue\e\n[0m"

TITLE=$(lsdvd /dev/sr0 | head -1 | awk '{print $3}')
TITLE_COUNT=$(lsdvd "$DEVICE" | grep -c ^'Title: ')


  fi


    echo "Proceed..."



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

    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[32mOui\e[0m"
    echo ""
    mkdir -p "$TITLE/IFOS"
    mkdir -p "$TITLE/VOBSUBS"
  ;;
    [nN][oO]|[nN])
    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[33mNon\e[0m"
read -r -p "Entrer un nouveau nom: " TITLE
if [[ -z "$TITLE" ]]; then
    echo "Invalid input..."
    echo "Quit"
     exit 1
else
    echo ""
    mkdir -p "$TITLE/IFOS"
    mkdir -p "$TITLE/VOBSUBS"
fi
  ;;
    *)
 echo "Invalid input..."
 echo "Quit"
 exit 1
 ;;
esac



default_limit=-1



    echo -e "\e[3;4;32m La limite est fixée pour encoder tous les titres.\e[0m"
read -r -p "Encoder tous les titres ? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])

    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[32mOui, on encode tous les titres.\e[0m"
    echo "$default_limit" >> "$TITLE/time_limit.txt"
    echo ""
 ;;
    [nN][oO]|[nN])
    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[33mNon, je ne veux encoder que les titres d'une certaine durée.\e[0m"
read -r -p "Entrer une limite (ex:1800) en secondes: " time_limit
if [[ -z "$time_limit" ]]; then
    echo "Invalid input..."
    echo "Quit"
    rm -r "$TITLE"
    echo -e "Supression du dossier \e[32m$TITLE\e[0m"
 exit 1
else
 times=$((time_limit / 60))
    echo -e "Seul les titres de \e[94m$times minutes\e[0m et plus seront pris en compte."
    echo "$time_limit" >> "$TITLE/time_limit.txt"
    echo ""
fi
      ;;
    *)
    echo "Invalid input..."
    echo "Quit"
    rm -r "$TITLE"
    echo -e "Supression du dossier \e[32m$TITLE\e[0m"
 exit 1
 ;;
esac



echo -e "\e[3;4;32m la langue française est privilégiée par défaut.\e[0m"
read -r -p "Privilégier cette option ? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])

    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[32mOui, on garde cette option.\e\n[0m"
    echo "1" > "$TITLE/choix_langues.txt"
 ;;
    [nN][oO]|[nN])
    echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[33mNon, on garde toutes les langues.\e[0m"
    echo "0" > "$TITLE/choix_langues.txt"

  ;;
    *)
 echo "Invalid input..."
 echo "Quit"
 rm -r "$TITLE"
 echo -e "Supression du dossier \e[32m$TITLE\e[0m"
 exit 1
 ;;
esac



read -r -p "Conserver le bitrate d'origine ? [Y/n] " input
case $input in
     [yY][eE][sS]|[yY])
 
     echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[32mOui\e[0m"
 
for (( i=1; i<=TITLE_COUNT; i++ ))
do

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')
    echo "$BITRATE" >> "$TITLE/bitrate.txt"
done

 ;;
     [nN][oO]|[nN])
     echo -e "\e[3;4;32m Réponse:\n\e[0m  \e[33mNon, on applique un bitrate de son choix\e[0m"
 
read -r -p "Appliquer un nouveau Bitrate (ex 1500): " newbitrate
     echo -e "\e[3;4;33mChoix du bitrate:\n\e[0m \e[3;6;94m$newbitrate kbits/s\e[0m (pour tous les titres)"
     
if [[ -z "$newbitrate" ]]; then
     echo -e " \e[3;6;94m Bitrate erroné\e[0m"
     echo "Quit"
     rm -r "$TITLE"
     echo -e "Supression du dossier \e[32m$TITLE\e[0m"
 exit 1
else
for (( i=1; i<=TITLE_COUNT; i++ ))
do
     echo "$newbitrate" >> "$TITLE/bitrate.txt"
done
fi      ;;
      *)
     echo "Invalid input..."
     echo "Quit"
     rm -r "$TITLE"
     echo -e "Supression du dossier \e[32m$TITLE\e[0m"
 exit 1
 ;;
esac





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


bv=$(sed -n "$i p" "$TITLE/bitrate.txt")
bitrate_k=$((bv/1))k
bufsize_k=$((bv/2))k

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')
           
#time_limit=$(sed q "$TITLE/time_limit.txt") ## utilité ? ##
    [[ "$LENGTH" -le "$time_limit" ]] && continue


    mplayer -noconfig all -nocache -dvd-device "$DEVICE" dvdnav://"$i" \
            -dumpstream -dumpfile "$TITLE/$i-$TITLE.vob"
           


INTERLEAVED_FRAMES=$(ffmpeg -filter:v idet -frames:v 200 -an -f rawvideo \
             -y /dev/null -i "$TITLE/$i-$TITLE.vob" 2>&1 | \
          awk '/(Single|Multi) frame detection/ {sum += $8+$10}
              END { print sum }'
)

if [[ "$INTERLEAVED_FRAMES" -gt "100" ]]; then
    FILTERS='-filter:v yadif=0:-1:0,hue=b=0.0:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t'
else
    FILTERS='-filter:v hue=b=0.0:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t'




    fi    




COUNT_AUDIO=$(ffprobe "$TITLE/$i-$TITLE.vob" 2>&1 | grep -c "Audio:")
FPS=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.vob" 2>/dev/null | grep "VIDEO:" | awk '{print$6}')

       

RATIO=$(lsdvd -x "$DEVICE" -t "$i" | grep -m1 "Aspect ratio:" | awk '{print$11}' | sed -e 's/\//\:/g' | tr -d ',')

O_CHANNELS=$(ffprobe "$TITLE/$i-$TITLE.vob" 2>&1 | grep -c '(Audio: ac3, 0 channels)')
         
REMOVE_O_CHANNELS=$(ffprobe "$TITLE/$i-$TITLE.vob" 2>&1 | awk '/Stream/ && /Audio:/ && /kb\/s|\(LC\),/ { print $2 }' | \
          cut -d "[" -f2 | cut -d "]" -f1 | awk '{ printf " -map i:"$0" " }')
                       
ALLSHOW_TAG=$(mplayer -vo null -ao null -frames 0 -identify dvdnav://"$i" -dvd-device "$DEVICE"  2>/dev/null | \
          awk '/audio stream:/  {printf " -metadata:s:a:"$3" language="$8" -metadata:s:a:"$3" title="$5$6""}')
                       
MAP_ID_STREAMS=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null | grep "Language:" | sed -e 's/c/1c/g'  | awk '{ printf " -map i:"$21"" }')        
                                                 
MAP_ID_STREAMS_LPCM=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null | grep "lpcm" | awk '{ printf " -map i:"$22"" }')
                                                                                                                 
COUNT_LPCM=$(lsdvd -a "$DEVICE" -t "$i" |grep -c 'lpcm')
   
AIDS_LPCM=$(lsdvd -a "$DEVICE" -t "$i" | awk '/lpcm/ { print $22 }')


## VOB PRÉSENT.
## AUCUN AUDIO.
if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -eq "0" ]]; then

echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m"
sleep 2

     ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \
         -map 0:v -metadata title="$TITLE" \
         -c:v libx264 -b:v "$bitrate_k" -maxrate "$bitrate_k" -bufsize "$bufsize_k" \
         -loglevel repeat+verbose -movflags faststart \
         -x264opts 'keyint=300:min-keyint=25:8x8dct:sliced-threads=0' \
         -an -movflags +faststart -max_muxing_queue_size 9999 \
         -deblock 1:1 -flags +loop -qcomp 0.60 -qblur 0.5 -coder 1 -me_range 6 -sc_threshold 42 -bf 10 -trellis 2 -mbtree 1 -qmin 0 -qmax 52 \
         $FILTERS \
         -preset veryfast -y "$TITLE/$i-$TITLE.mkv"

         
rm -f "$TITLE/$i-$TITLE.vob"
       
         
                       

   
    fi




## VOB PRÉSENT.
## AU MOINS UN AUDIO OU PLUS.
## SANS 0 CHANNEL.
## SANS LPCM.
if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "1" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then

echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m"
sleep 2            

     ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \
         -map 0:v -metadata title="$TITLE" \
         -c:v libx264 -b:v "$bitrate_k" -maxrate "$bitrate_k" -bufsize "$bufsize_k" \
         -loglevel repeat+verbose -movflags faststart \
         -x264opts 'keyint=300:min-keyint=25:8x8dct:sliced-threads=0' \
         ${MAP_ID_STREAMS} -c:a copy ${ALLSHOW_TAG} -movflags +faststart -max_muxing_queue_size 9999 \
         -deblock 1:1 -flags +loop -qcomp 0.60 -qblur 0.5 -coder 1 -me_range 6 -sc_threshold 42 -bf 10 -trellis 2 -mbtree 1 -qmin 0 -qmax 52 \
         $FILTERS \
         -preset veryfast -y "$TITLE/$i-$TITLE.mkv"
           

#        ffmpeg -hwaccel auto -c:v mpeg2_cuvid -analyzeduration 1000M -probesize 1000M -i "$TITLE/$i-$TITLE.vob" \
#            -map 0:v -metadata title="$TITLE" \
#            -c:v h264_nvenc -preset medium -b:v $BITRATE_K -bufsize $BUFSIZE_K -profile:v high -bf 3 -b_ref_mode 0 -temporal-aq 1 -rc-lookahead 20 -vsync 0 \
#            -loglevel repeat+verbose \
#            -filter:v hue=b=0.0:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t \
#            ${MAP_ID_STREAMS} -c:a copy $ALLSHOW_TAG -movflags +faststart \
#            -y "$TITLE/$i-$TITLE.mkv"  


rm -f "$TITLE/$i-$TITLE.vob"
 


   
   
     fi



## VOB PRÉSENT.
## AU MOINS UN AUDIO OU PLUS.
## UN 0 CHANNEL OU PLUS.
## SANS LPCM.

if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "1" ]] && [[ "$O_CHANNELS" -ge "1" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then

echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m"
sleep 2

     ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \
         -map 0:v -metadata title="$TITLE" \
         -c:v libx264 -b:v "$bitrate_k" -maxrate "$bitrate_k" -bufsize "$bufsize_k" \
         -loglevel repeat+verbose -movflags faststart \
         -x264opts 'keyint=300:min-keyint=25:8x8dct:sliced-threads=0' \
         ${REMOVE_O_CHANNELS} -c:a copy ${ALLSHOW_TAG} -movflags +faststart -max_muxing_queue_size 9999 \
         -deblock 1:1 -flags +loop -qcomp 0.60 -qblur 0.5 -coder 1 -me_range 6 -sc_threshold 42 -bf 10 -trellis 2 -mbtree 1 -qmin 0 -qmax 52 \
         $FILTERS \
         -preset veryfast -y "$TITLE/$i-$TITLE.mkv"


rm -f "$TITLE/$i-$TITLE.vob"




   
    fi



## VOB PRÉSENT.
## AVEC OU SANS AUDIO(S).
## SANS 0 CHANNEL.
## AU MOINS UN LPCM OU PLUS.

if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "0" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -ge "1" ]]; then

echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m"
sleep 2

     ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \
         -map 0:v -metadata title="$TITLE" \
         -c:v libx264 -b:v "$bitrate_k" -maxrate "$bitrate_k" -bufsize "$bufsize_k" \
         -loglevel repeat+verbose -movflags faststart \
         -x264opts 'keyint=300:min-keyint=25:8x8dct:sliced-threads=0' \
         ${MAP_ID_STREAMS_LPCM} -acodec pcm_s16be ${ALLSHOW_TAG} -movflags +faststart -max_muxing_queue_size 9999 \
         -deblock 1:1 -flags +loop -qcomp 0.60 -qblur 0.5 -coder 1 -me_range 6 -sc_threshold 42 -bf 10 -trellis 2 -mbtree 1 -qmin 0 -qmax 52 \
         $FILTERS \
         -preset veryfast -y "$TITLE/$i-$TITLE.mkv"

rm -f "$TITLE/$i-$TITLE.vob"

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




choix_langues=$(sed q "$TITLE/choix_langues.txt")
COUNT_AUDIO_FR=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE.mkv" 2>/dev/null |awk '/-alang fr,/ { print $9 }' | wc -w)

## AU MOINS UN AUDIO FRANÇAIS OU PLUS.
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_AUDIO_FR" -ge "1" ]] && [[ "$choix_langues" -eq "1" ]] ; 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
 
 


## 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.
## INTÉGRATION DES CHAPITRES.
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"
      dvdxchap -t  "$i" "$DEVICE" > "$TITLE/$i-$TITLE-Chapters.txt"
      mkvmerge "$TITLE/$i-$TITLE-[Audio: $INFO].mkv" --chapters "$TITLE/$i-$TITLE-Chapters.txt" -o "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv"        
      rm -f "$TITLE/$i-$TITLE-[Audio: $INFO].mkv"
      rm -f "$TITLE/$i-$TITLE-Chapters.txt"
      mediainfo "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO + Chapters].log"                
   


   fi
   



SIDFR=$(lsdvd -s "$DEVICE" -t "$i" 2> /dev/null |awk '/Subtitle:/ && /Language: fr/ { sub(/,$/ ,"", $2);
                                      if ($2 ~ /^[0-9]+$/) print (--$2) }'
)
                                     
                                     
                                                                   
COUNT_SID_FR=$(echo "$SIDFR" |wc -w)

## AU MOINS UN SUB FRANÇAIS OU PLUS (ON EXTRAIT TOUT ÇA).
if [[ "$COUNT_SID_FR" -ge "1" ]]; then

mkdir -p "$TITLE/VOBSUBS/$i-$TITLE"

for n in $SIDFR; do mencoder -dvd-device "$DEVICE" dvdnav://"$i" -nosound -ovc frameno -force-avi-aspect "$RATIO" -o /dev/null \
               -ifo "/run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO" -sid "$n" -vobsubout "$TITLE/$n-vobsubs-fr" -vobsuboutindex "$n"

## ON CORRIGE LES ID VIDES SI BESOIN.
sed -i 's/id:.*,/id: fr,/g' "$TITLE/$n-vobsubs-fr.idx"

taille_idx=$(stat -c%s "$TITLE/$n-vobsubs-fr.idx")
taille_sub=$(stat -c%s "$TITLE/$n-vobsubs-fr.sub")

if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then

echo -e "\e[32m$n-vobsubs-fr.idx et $n-vobsubs-fr.sub sont bons.\e[0m"

   else

## ON ISOLE LES VOBSUBS INVALIDES DANS LE DOSSIER VOBSUBS
echo -e "\e[32m$n-vobsubs-fr.idx ou $n-vobsubs-fr.sub incorrect ... déplacement des deux.\e[0m"

   mv "$TITLE/$n-vobsubs-fr.idx" "$TITLE/$n-vobsubs-fr.sub" "$TITLE/VOBSUBS/$i-$TITLE"


 fi


done          




   fi



## ON COMPTE CE QU'IL RESTE DE BON EN IDX/SUB.
COUNT_IDX_FR=$(find "$TITLE" -maxdepth 1 -name '*.idx' | wc -l)
COUNT_SUB_FR=$(find "$TITLE" -maxdepth 1 -name '*.sub' | wc -l)


## CONDITION : UN IDX/SUB OU PLUS.
if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -ge "1" ] && [ "$COUNT_SUB_FR" -ge "1" ]
then

mkvmerge "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" --language "0:fre" "$TITLE"/*.idx  -o "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub].mkv"

## ON DÉPLACE LE RESTANT DES VOBSUBS UNE FOIS MIXÉS AVEC LES INVALIDES.
mv "$TITLE"/*.idx "$TITLE"/*.sub "$TITLE/VOBSUBS/$i-$TITLE"
rm -f "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv"


INFO_SUB=$(mplayer -vo null -ao null -frames 0 -identify "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub].mkv" 2>/dev/null | \
          awk '/slang/ && /fre/  { x = x $9 ","}
              END { sub(/,*$/, "", x); print x }'
)
             
                 
     mv "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub].mkv" "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub: $INFO_SUB].mkv"
     mediainfo "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub: $INFO_SUB].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO + Chapters + Sub: $INFO_SUB].log"

rm -f "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO + Chapters].log"  




    fi




## AUCUN IDX ET SUB. ON TAG EN NOSUB
if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -eq "0" ] && [ "$COUNT_SUB_FR" -eq "0" ]
then

mv "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters NoSub].mkv"
mediainfo "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters NoSub].mkv" >> "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO + Chapters NoSub].log"

rm -f "$TITLE/IFOS/$i-$TITLE-[Audio: $INFO + Chapters].log"


   
    fi



## PAS D'INFO ET UN SEUL AUDIO. ON TAG EN UND
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. ON TAG EN NOSOUND
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

rm -f "$TITLE/bitrate.txt"
rm -f "$TITLE/time_limit.txt"
rm -f "$TITLE/choix_langues.txt"
echo -e "\e[32mJob terminé.\e[0m"

echo -e "\e[32mTemps total écoulé:\e[0m \e[3;6;94m$(date -ud "@$(($(date +%s) - START_TIME))" +%T)\e[0m  (HH:MM:SS)"

Dernière modification par golgot200 (29-04-2020 05:40:21)

Hors ligne

#2 27-05-2019 18:26:22

Herve5
Membre
Lieu : région de Cannes, France
Distrib. : Debian 10
Noyau : Linux 5.7.0-3-amd64
(G)UI : Mate 1.20.4
Inscription : 02-03-2019

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Wow!
Il y a les sous-titres? (je sais, question de newbie...)

--
Hervé S.
deux machines de type Clevo (donc pas très solides) de 2017, l'une sous Debian 10, l'autre Ubuntu 16LTS, plus depuis peu un beau Lenovo Thinkpad P53 sous Debian Testing Xfce

Hors ligne

#3 27-05-2019 20:46:43

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Herve5 a écrit :

Wow!
Il y a les sous-titres? (je sais, question de newbie...)



Bonsoir,
Oui, si une bande son et non française.


EDIT: Tous les sous-titres français seront intégrés et seulement ceux-ci.

Dernière modification par golgot200 (30-05-2019 20:31:30)

Hors ligne

#4 28-05-2019 06:34:33

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Mis le post en lien dans le tuto ffmpeg :
https://debian-facile.org/doc:media:ffm … vob-en-mkv cool

"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)

En ligne

#5 30-05-2019 20:26:17

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Bonsoir,

Fonction dans le script

Détection du DVD-vidéo dans le lecteur.
Création du dossier Title dans son Bureau.
Les Metadata pour le genre d'audio AC3 2.0 5.1, DTS, mpeg1 etc sont OK.
Les MAP audio se font par les AID, que ce soit pour l'AC3 DTS ainsi que pour le mpeg1 et le LPCM.
Il comptabilisera toutes les bandes audio.
Un réglage de temps, ce qui permettra si on veux, de ripper plusieurs titres (DVD seasons).
Un option Crop, pas implantée mais pas encore placée.
Intégration des chapitres dans le mkv.
Si des sous-titres français sont présents, ils seront tous intégrés dans le MKV.
Le MKV sera nommé avec le nom du 1-titre-[fr,eng,deutch ...+SUBVF].mkv  ou sans etc ...
Suppression des fichiers temporaires à chaque travaux effectués ( ça c'est moins propre ) Mon TMP sur ma Arch est limité à 4 Go.

Il faudra obligatoirement passer par l'accélération graphique .( pour l'instant )

et les programmes :

# MPlayer
# ffmpeg
# lsdvd
# ogmtools  (dvdxchap)
# mkvtoolnix-cli (mkvmerge)
# mencoder
# mediainfo

Voilà, c'est à peu près tout.

EDIT: modification de mon post 3.

Dernière modification par golgot200 (25-04-2020 10:31:34)

Hors ligne

#6 31-05-2019 08:27:45

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Bonjour,

Un dvd récalitrant "ALEXANDRE" avec la commande de mon post 1 :


 ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS  -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
 




Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scaler_0'
 



Passer -hwaccel cuvid en auto semble résoudre le problème.


 ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS  -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
 



la vitesse d'encodage en sera juste réduite de moitié smile

Dernière modification par golgot200 (31-05-2019 08:30:40)

Hors ligne

#7 31-05-2019 08:34:21

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

## FILTERS

Je place ces filtres qui fonctionneront avec cette commande modifié en sauvegarde :


-filter:v hue=b=0.1:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t
 




qui me donnera donc:


ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i $FOLDER/"$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -filter:v hue=b=0.1:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t -y $FOLDER/$i-$TITLE.mkv
 

Dernière modification par golgot200 (31-05-2019 08:38:31)

Hors ligne

#8 31-05-2019 08:40:05

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

## UN SEUL DVD-VIDÉO



COUNT_DEVICE=$(blkid /dev/sr* | awk '{print $1}' | sed -e 's/://g' | awk '{x=x+NF}END{print x}')

if [[ "$COUNT_DEVICE" -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
 

Hors ligne

#9 31-05-2019 09:00:19

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

#######################################################################################################################################
## DEVICE

DEVICE=$(blkid /dev/sr* | awk '{print $1}' | sed -e 's/://g')




/dev/sr0
 




#########################################################################################################################################
## TITLE

TITLE=$(lsdvd "$DEVICE" | head -1 | awk '{print $3}')




SLEEPLESS_IN_SEATTLE
 



###########################################################################################################################################
## NOMBRE DE TITRES SUR LE DVD

TITLE_COUNT=$(lsdvd "$DEVICE" | grep ^'Title: ' | wc -l)




3
 




###########################################################################################################################################
## METADATA POUR LES BANDES AUDIO
## Lien :
https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1


FR=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: fr/ && /format:/  {printf "-metadata:s:a:"$3" language=fra -metadata:s:a:"$3" title="$5$6" "}')
FR_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: fr/ && /format: lpcm/  {printf "-metadata:s:a:0 language=fra -metadata:s:a:0 title="$5$6" "}')
....
....
 




-metadata:s:a:1 language=fra -metadata:s:a:1 title=ac3(stereo)
....
....
 




TAGS_ID_STREAMS=$FR.....
TAGS_ID_STREAMS_LPCM=$FR_LPCM....
 




##############################################################################################################################################
## TITRES D'UNE DURÉE DE PLUS DE .... SECONDES [ ICI, 1200 SECONDES = 20 minutes]


LIMIT_TIME=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | grep ID_LENGTH | sed 's/.*=\([0-9]*\)/\1/' | sed "s/\..*//")
B=1200
 




6051
 



##############################################################################################################################################
LE DUMP :


mplayer -identify -dvd-device "$DEVICE" dvd://"$i" -nocache -dumpstream -dumpfile $FOLDER/"$i-$TITLE.vob"
 



## DISNEY A-R-C-C-O-S


mplayer dvdnav://"$i" -dvd-device "$DEVICE" -dumpstream -dumpfile "$i-$TITLE.vob"
 



##############################################################################################################################################
Le MAP


MAP_ID_STREAMS=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep "Audio:" | sed -n -e "s/.*\(0x\)/\1/p" | sed -e 's/c/1c/g' | awk '/0x/{gsub (/^/,"-map i:")}1')
MAP_ID_STREAMS_LPCM=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep 'lpcm' | sed -n -e "s/.*\(0x\)/\1/p" | sed -e 's/c/1c/g' | awk '/0x/{gsub (/^/,"-map i:")}1')
 




-map i:0x80 -map i:0x81 -map i:0x82 -map i:0x83 -map i:0x84 -map i:0x85 -map i:0x86
 




##############################################################################################################################################
## POUR LES SOUS-TITRES


SIDFR=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | 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}')
COUNT_SID_FR=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE" 2>/dev/null | grep "subtitle ( sid ):" | grep "language: fr" | awk '{print$7}' | awk '{x=x+NF}END{print x}')
RATIO=$(lsdvd -x $DEVICE -t "$i" 2> /dev/null | head -3 | grep "Aspect ratio:" | awk '{print$11}' | sed '$ s/.$//' | sed 's/\//:/')
 




1 20
2
16:9
 




###############################################################################################################################################
## LE CROP


CROP=$(ffmpeg -i "$i-$TITLE.vob" -ss 60 -t 15 -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
 




crop=704:544:10:14
 




###############################################################################################################################################
## INFO CHAPITRES ET MUTIPLEXAGE AU MKV


dvdxchap -t  "$i" "$DEVICE" > $FOLDER/"$i-$TITLE-CHAPTERS.txt"
mkvmerge $FOLDER/$i-$TITLE.mkv --chapters $FOLDER/"$i-$TITLE-CHAPTERS.txt" -o $FOLDER/"$i-$TITLE+CHAPTERS.mkv"
 




CHAPTER01=00:00:00.000
CHAPTER01NAME=Chapter 01
CHAPTER02=00:05:17.560
CHAPTER02NAME=Chapter 02
CHAPTER03=00:12:17.080
...
...
 




################################################################################################################################################
LA PARTIE SOUS-TITRAGE :


for n in $SIDFR; do mencoder -dvd-device $DEVICE dvd://"$i" -nosound -ovc copy -force-avi-aspect $RATIO  -o /dev/null -ifo /run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO  -sid $n -vobsubout $FOLDER/$i-vobsubs-fr -vobsuboutindex $n ; done
mkvmerge $FOLDER/"$i-$TITLE+CHAPTERS.mkv" -a fre --default-language fr $FOLDER/*.idx  -o $FOLDER/"$i-$TITLE-[Language:$INFO_AC3_DTS_MPEG1]+SUBVF.mkv"




# VobSub index file, v7 (do not modify this line!)
#
# Generated by MPlayer SVN-r38139
# See <URL:http://www.mplayerhq.hu/> for more information about MPlayer
# See <URL:http://wiki.multimedia.cx/index.php?title=VOBsub> for more information about Vobsub
#
size: 720x576
palette: 101010, 6e6e6e, cbcbcb, 202020, b4b4b4, 1e1e1e, 626262, d7d7d7, 808080, 808080, 808080, 808080, 808080, 808080, 808080, 808080
# ON: displays only forced subtitles, OFF: shows everything
forced subs: OFF

# Language index in use
langidx: 1

id: fr, index: 1
timestamp: 00:00:41:400, filepos: 000000000
timestamp: 00:00:46:999, filepos: 000001000
timestamp: 00:00:50:359, filepos: 000001800
timestamp: 00:00:54:160, filepos: 000002800
timestamp: 00:01:21:079, filepos: 000003800
...
...


id: fr, index: 20
timestamp: 00:00:35:680, filepos: 000014800
timestamp: 00:00:38:639, filepos: 000016000
timestamp: 00:00:41:840, filepos: 000017000
timestamp: 00:00:43:400, filepos: 000017800
...
...
 

Dernière modification par golgot200 (02-06-2019 15:05:33)

Hors ligne

#10 31-05-2019 09:03:09

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Plus que les conditions à mettre en place et ça, c'est pas bien mon truc hmm

Hors ligne

#11 31-05-2019 09:21:59

Debian Alain
Adhérent(e)
Lieu : Bretagne
Distrib. : stable / testing
Noyau : Linux 5.8.0-1-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

j'ai pas tout suivi mais y a pas plus simple avec handbrake et winff ????

en graphique , donc  ?

golgot200 a écrit :

C'est pour plus tard dans un script.


arf ! , j'avais pas vu ...

pardon

Dernière modification par Debian Alain (31-05-2019 09:31:54)

En ligne

#12 09-06-2019 13:16:44

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Bonjour,

Bon apparement mencoder est maintenant dans stretch, ça facilitera les choses. Par contre ffmpeg est en version 3.2. Mes tests se font sur la version 4
Je ne sais pas cette 3.2 est compilé pour l'encodage par le GPU.
Si quelqu'un pouvait me vérifier ça ?

Qui ferait une installation des paquets :


apt-get install mplayer ffmpeg lsdvd ogmtools mkvtoolnix mencoder util-linux
 



ogmtools  ===>| (dvdxchap)
mkvtoolnix ====> (mkvmerge)

Dernière modification par golgot200 (10-06-2019 20:11:29)

Hors ligne

#13 09-06-2019 13:23:43

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Ha oui aussi, si des pros du script voient des trucs pas correct dans les quelques lignes à mes posts 7, 8 et 9, ça serait cool de me le signaler pour la suite. ( des remarques, des questions aussi )  smile

Hors ligne

#14 09-06-2019 13:34:14

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Si tu pouvais tout cela dans un seul cadre de balise code, oui j'y regarderai
depuis mon éditeur favori. Parce que ce n'est pas facile sur le forum
quand c'est en plusieurs morceaux.

Hors ligne

#15 09-06-2019 17:01:10

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Ok, je post ça smile

Hors ligne

#16 09-06-2019 17:07:05

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

GPU_LIGHT.sh



#!/bin/bash

#### Golgot200 ###############################################################################
# 22-03-2019
# Archlinux
# MPlayer SVN-r38101
# ffmpeg version n4.1.1
# lsdvd 0.17
# ogmtools v1.5 (dvdxchap)
# mkvtoolnix-cli 32.0.0-1 (mkvmerge)
# mencoder-38125-5
##############################################################################################

## CONDITION : UN SEUL DVD-VIDÉO
COUNT_DEVICE=$(blkid /dev/sr* | awk '{print $1}' | sed -e 's/://g' | awk '{x=x+NF}END{print x}')

if [[ "$COUNT_DEVICE" -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 /dev/sr* | awk '{print $1}' | sed -e 's/://g')

## LABEL DU DVD-VIDÉO & NOMBRE TOTAL DE TITRES SUR CELUI-CI
TITLE=$(lsdvd "$DEVICE" | head -1 | awk '{print $3}')
TITLE_COUNT=$(lsdvd "$DEVICE" | grep ^'Title: ' | wc -l)


DIR=$(xdg-user-dir DESKTOP)
FOLDER=$DIR/$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

## METADATAS DIVERS [À COMPLETER AU CAS OÙ IL MANQUERAIT QUELQUES LANGUES]
## https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1
FR=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: fr/ && /format:/  {printf "-metadata:s:a:"$3" language=fra -metadata:s:a:"$3" title="$5$6" "}')
FR_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: fr/ && /format: lpcm/  {printf "-metadata:s:a:0 language=fra -metadata:s:a:0 title="$5$6" "}')
EN=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: en/ && /format:/  {printf "-metadata:s:a:"$3" language=en -metadata:s:a:"$3" title="$5$6" "}')
EN_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: en/ && /format: lpcm/  {printf "-metadata:s:a:0 language=en -metadata:s:a:0 title="$5$6" "}')
DE=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: de/ && /format:/  {printf "-metadata:s:a:"$3" language=ger -metadata:s:a:"$3" title="$5$6" "}')
DE_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: de/ && /format: lpcm/  {printf "-metadata:s:a:0 language=ger -metadata:s:a:0 title="$5$6" "}')
IT=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: it/ && /format:/  {printf "-metadata:s:a:"$3" language=ita -metadata:s:a:"$3" title="$5$6" "}')
IT_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: it/ && /format: lpcm/  {printf "-metadata:s:a:0 language=ita -metadata:s:a:0 title="$5$6" "}')
ES=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: es/ && /format:/  {printf "-metadata:s:a:"$3" language=spa -metadata:s:a:"$3" title="$5$6" "}')
ES_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: es/ && /format: lpcm/  {printf "-metadata:s:a:0 language=spa -metadata:s:a:0 title="$5$6" "}')
NL=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: nl/ && /format:/  {printf "-metadata:s:a:"$3" language=nld -metadata:s:a:"$3" title="$5$6" "}')
NL_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: nl/ && /format: lpcm/  {printf "-metadata:s:a:0 language=nld -metadata:s:a:0 title="$5$6" "}')
HE=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: he/ && /format:/  {printf "-metadata:s:a:"$3" language=heb -metadata:s:a:"$3" title="$5$6" "}')
HE_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: he/ && /format: lpcm/  {printf "-metadata:s:a:0 language=heb -metadata:s:a:0 title="$5$6" "}')
HU=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: hu/ && /format:/  {printf "-metadata:s:a:"$3" language=hun -metadata:s:a:"$3" title="$5$6" "}')
HU_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: hu/ && /format: lpcm/  {printf "-metadata:s:a:0 language=hun -metadata:s:a:0 title="$5$6" "}')
PL=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: pl/ && /format:/  {printf "-metadata:s:a:"$3" language=pol -metadata:s:a:"$3" title="$5$6" "}')
PL_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: pl/ && /format: lpcm/  {printf "-metadata:s:a:0 language=pol -metadata:s:a:0 title="$5$6" "}')
CS=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: cs/ && /format:/  {printf "-metadata:s:a:"$3" language=cze -metadata:s:a:"$3" title="$5$6" "}')
CS_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: cs/ && /format: lpcm/  {printf "-metadata:s:a:0 language=cze -metadata:s:a:0 title="$5$6" "}')
JA=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: ja/ && /format:/  {printf "-metadata:s:a:"$3" language=jpn -metadata:s:a:"$3" title="$5$6" "}')
JA_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: ja/ && /format: lpcm/  {printf "-metadata:s:a:0 language=jpn -metadata:s:a:0 title="$5$6" "}')
SV=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: sv/ && /format:/  {printf "-metadata:s:a:"$3" language=swe -metadata:s:a:"$3" title="$5$6" "}')
SV_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: sv/ && /format: lpcm/  {printf "-metadata:s:a:0 language=swe -metadata:s:a:0 title="$5$6" "}')
UNKNOWN=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: unknown/ && /format:/  {printf "-metadata:s:a:"$3" language=und -metadata:s:a:"$3" title="$5$6" "}')
UNKNOWN_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '/language: unknown/ && /format: lpcm/  {printf "-metadata:s:a:0 language=und -metadata:s:a:0 title="$5$6" "}')
EMPTY_LANG=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '(/language:  aid:/) && /format:/ {printf "-metadata:s:a:"$3" language=und -metadata:s:a:"$3" title="$5$6" "}')
EMPTY_LANG_LPCM=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | awk '(/language:  aid:/) && /format: lpcm/ {printf "-metadata:s:a:0 language=und -metadata:s:a:0 title="$5$6" "}')


TAGS_ID_STREAMS=$FR$EN$DE$IT$ES$NL$HE$HU$PL$CS$JA$SV$UNKNOWN$EMPTY_LANG
TAGS_ID_STREAMS_LPCM=$FR_LPCM$EN_LPCM$DE_LPCM$IT_LPCM$ES_LPCM$NL_LPCM$HE_LPCM$HU_LPCM$PL_LPCM$CS_LPCM$JA_LPCM$SV_LPCM$UNKNOWN_LPCM$EMPTY_LANG_LPCM

## TITRES D'UNE DURÉE DE PLUS DE .... SECONDES [ ICI, 1200 SECONDES = 20 MINUTES]
LIMIT_TIME=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null | grep ID_LENGTH | sed 's/.*=\([0-9]*\)/\1/' | sed "s/\..*//")
B=1200




if [[ "$LIMIT_TIME" -gt "$B" ]]; then

mplayer -identify -dvd-device "$DEVICE" dvd://"$i" -nocache -dumpstream -dumpfile $FOLDER/"$i-$TITLE.vob"


## DISNEY A-R-C-C-O-S
#mplayer dvdnav://"$i" -dvd-device "$DEVICE" -dumpstream -dumpfile "$i-$TITLE.vob"



COUNT_LPCM=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep 'lpcm' | awk '{print$8}' | awk '{x=x+NF}END{print x}')
COUNT_AC3_DTS_MPEG1=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep 'ac3,\|dts,\|mpeg1,' | awk '{print$8}' | awk '{x=x+NF}END{print x}')

MAP_ID_STREAMS=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep "Audio:" | sed -n -e "s/.*\(0x\)/\1/p" | sed -e 's/c/1c/g' | awk '/0x/{gsub (/^/,"-map i:")}1')
MAP_ID_STREAMS_LPCM=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | grep 'lpcm' | sed -n -e "s/.*\(0x\)/\1/p" | sed -e 's/c/1c/g' | awk '/0x/{gsub (/^/,"-map i:")}1')

SIDFR=$(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null | 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}')
COUNT_SID_FR=$(mplayer -vo null -ao null -frames 0 -identify dvd://"$i" -dvd-device "$DEVICE" 2>/dev/null | grep "subtitle ( sid ):" | grep "language: fr" | awk '{print$7}' | awk '{x=x+NF}END{print x}')

RATIO=$(lsdvd -x $DEVICE -t "$i" 2> /dev/null | head -3 | grep "Aspect ratio:" | awk '{print$11}' | sed '$ s/.$//' | sed 's/\//:/')


CROP=$(ffmpeg -i $FOLDER/"$i-$TITLE.vob" -ss 60 -t 15 -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)


INFO_AC3_DTS_MPEG1=$(lsdvd -x $DEVICE -t "$i" 2> /dev/null | awk '/ac3,/  {printf ""$4","}'  | sed -e 's/,*$//g')
INFO_LPCM=$(lsdvd -x $DEVICE -t "$i" 2> /dev/null | awk '/ac3,/  {printf ""$4","}' | sed -e 's/,*$//g')



## ENCODAGE
## GPU
## FILMS
## AC3 & DTS & MPEG1
## SOUS-TITRAGE(S) VF
if [[ "$COUNT_LPCM" -eq "0" ]] && [[ "$COUNT_AC3_DTS_MPEG1" -ge "1" ]] && [[ "$COUNT_SID_FR" -ge "1" ]]; then

ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i $FOLDER/"$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset slow -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -filter:v hue=b=0.1:s=0.7,hqdn3d=1.5:1.5:4:4,unsharp=luma_msize_x=5:luma_msize_y=5:luma_amount=0.5,noise=c0s=2:c1s=2:c2s=2:c0f=a+t -y $FOLDER/$i-$TITLE.mkv


rm -f $FOLDER/"$i-$TITLE.vob"

dvdxchap -t  "$i" "$DEVICE" > $FOLDER/"$i-$TITLE-CHAPTERS.txt"
mkvmerge $FOLDER/$i-$TITLE.mkv --chapters $FOLDER/"$i-$TITLE-CHAPTERS.txt" -o $FOLDER/"$i-$TITLE+CHAPTERS.mkv"

rm -f $FOLDER/"$i-$TITLE-CHAPTERS.txt"
rm -f $FOLDER/"$i-$TITLE.mkv"

for n in $SIDFR; do mencoder -dvd-device $DEVICE dvd://"$i" -nosound -ovc copy -force-avi-aspect $RATIO  -o /dev/null -ifo /run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO  -sid $n -vobsubout $FOLDER/$i-vobsubs-fr -vobsuboutindex $n ; done
mkvmerge $FOLDER/"$i-$TITLE+CHAPTERS.mkv" -a fre --default-language fr $FOLDER/*.idx  -o $FOLDER/"$i-$TITLE-[Language:$INFO_AC3_DTS_MPEG1]+SUBVF.mkv"


rm -f $FOLDER/*.idx
rm -f $FOLDER/*.sub
rm -f $FOLDER/"$i-$TITLE+CHAPTERS.mkv"




## ENCODAGE
## GPU
## CONCERTS LIVE
## LPCM (ON GARDE QUE LA PISTE LPCM)
## PAS DE SOUS-TITRAGE

elif [[ "$COUNT_LPCM" -ge "1" ]] && [[ "$COUNT_AC3_DTS_MPEG1" -ge "0" ]] && [[ "$COUNT_SID_FR" -eq "0" ]]; then

ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i $FOLDER/"$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS_LPCM -acodec pcm_s16be $TAGS_ID_STREAMS_LPCM -movflags +faststart -qmin 18 -qmax 23 -y $FOLDER/$i-$TITLE.mkv

rm -f $FOLDER/"$i-$TITLE.vob"

dvdxchap -t  "$i" "$DEVICE" > $FOLDER/"$i-$TITLE-CHAPTERS.txt"
mkvmerge $FOLDER/$i-$TITLE.mkv --chapters $FOLDER/"$i-$TITLE-CHAPTERS.txt" -o $FOLDER/"$i-$TITLE-[Language:$INFO_LPCM].mkv"

rm -f $FOLDER/"$i-$TITLE.mkv"
rm -f $FOLDER/"$i-$TITLE-CHAPTERS.txt"



## ENCODAGE
## GPU
## CONCERTS LIVE
## LPCM (ON GARDE QUE LA PISTE LPCM)
## SOUS-TITRAGE(S) VF

elif [[ "$COUNT_LPCM" -ge "1" ]] && [[ "$COUNT_AC3_DTS_MPEG1" -ge "0" ]] && [[ "$COUNT_SID_FR" -ge "1" ]]; then

ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i $FOLDER/"$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS_LPCM -acodec pcm_s16be $TAGS_ID_STREAMS_LPCM -movflags +faststart -qmin 18 -qmax 23 -y $FOLDER/$i-$TITLE.mkv

rm -f $FOLDER/"$i-$TITLE.vob"

dvdxchap -t  $FOLDER/"$i" "$DEVICE" > $FOLDER/"$i-$TITLE-CHAPTERS.txt"
mkvmerge $FOLDER/$i-$TITLE.mkv --chapters $FOLDER/"$i-$TITLE-CHAPTERS.txt" -o $FOLDER/"$i-$TITLE+CHAPTERS.mkv"

rm -f $FOLDER/"$i-$TITLE-CHAPTERS.txt"
rm -f $FOLDER/"$i-$TITLE.mkv"

for n in $SIDFR; do mencoder -dvd-device $DEVICE dvd://"$i" -nosound -ovc copy -force-avi-aspect $RATIO  -o /dev/null -ifo /run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO  -sid $n -vobsubout $FOLDER/$i-vobsubs-fr -vobsuboutindex $n ; done
mkvmerge $FOLDER/"$i-$TITLE+CHAPTERS.mkv" -a fre --default-language fr $FOLDER/*.idx  -o $FOLDER/"$i-$TITLE-[Language:$INFO_LPCM]+SUBVF.mkv"


rm -f $FOLDER/*.idx
rm -f $FOLDER/*.sub
rm -f $FOLDER/"$i-$TITLE+CHAPTERS.mkv"





 
## LA PETITE MAISON DANS LA PRAIRIE
elif [[ "$COUNT_LPCM" -eq "0" ]] && [[ "$COUNT_AC3_DTS_MPEG1" -ge "1" ]] && [[ "$COUNT_SID_FR" -eq "0" ]]; then
ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i $FOLDER/"$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose  $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -y $FOLDER/$i-$TITLE.mkv
 
rm -f $FOLDER/"$i-$TITLE.vob"

dvdxchap -t  "$i" "$DEVICE" > $FOLDER/"$i-$TITLE-CHAPTERS.txt"
mkvmerge $FOLDER/$i-$TITLE.mkv --chapters $FOLDER/"$i-$TITLE-CHAPTERS.txt" -o $FOLDER/"$i-$TITLE-[Language:$INFO_AC3_DTS_MPEG1].mkv"

rm -f $FOLDER/"$i-$TITLE-CHAPTERS.txt"
rm -f $FOLDER/"$i-$TITLE.mkv"
 
 
      fi
     
     fi

done
 



Ce script dans l'état à été testé sur environ 50 dvd sans problème ...  (pour l'instant) smile

Dernière modification par golgot200 (09-06-2019 17:23:40)

Hors ligne

#17 09-06-2019 17:21:29

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Je commence par une chose que je t'ai déjà dite. Si dans ton script
tu as « #! /bin/bash » ne l'appelle pas GPU_LIGHT.sh mais GPU_LIGHT.bash
car sh ≠ bash.
Maintenant dans debian c'est dash qui est utilisé pour sh et de nombreuse syntaxes de
bash ne sont pas comprises par dash). Je ne sais pas comment ça marche dans archlinux
ceci dit, mais c'est une bonne habitude à prendre. Ça évite des mauvaises surprises.

Hors ligne

#18 09-06-2019 17:30:06

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

enicar a écrit :

Je commence par une chose que je t'ai déjà dite. Si dans ton script
tu as « #! /bin/bash » ne l'appelle pas GPU_LIGHT.sh mais GPU_LIGHT.bash
car sh ≠ bash.
Maintenant dans debian c'est dash qui est utilisé pour sh et de nombreuse syntaxes de
bash ne sont pas comprises par dash). Je ne sais pas comment ça marche dans archlinux
ceci dit, mais c'est une bonne habitude à prendre. Ça évite des mauvaises surprises.



OK smile

GPU_LIGHT sans extension serait mieux ?

Sous Debian, je ne pourrais pas le tester par contre. neutral

Hors ligne

#19 09-06-2019 17:38:21

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

J'ai mis

#!/bin/sh



Pas de problème, ça fait son job smile

Hors ligne

#20 09-06-2019 17:39:31

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

J'ouvre une petite parenthèse.
Je ne sais pas ce que tu utilises comme éditeur pour écrire tes scripts, mais
il y a un excellent programme qui permet d'améliorer substantiellement les shell script :


shellcheck
 


Dans debian c'est dans le paquet éponyme.

Je l'utilise via syntastic quand j'utilise vim et via flycheck quand j'utilise emacs.
Je ne sais pas comment il est possible de l'utiliser avec d'autres environnements
mais ça doit être possible.

Note, on peut aussi l'utiliser avec ALE sous vim ou neovim.
ALE est le successeur de syntastic, en mieux (car il fait les choses
en arrière plan de façon asynchrone).
Bon je ferme cette parenthèse.

Hors ligne

#21 09-06-2019 17:41:59

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

enicar a écrit :

J'ouvre une petite parenthèse.
Je ne sais pas ce que tu utilises comme éditeur pour écrire tes scripts, mais
il y a un excellent programme qui permet d'améliorer substantiellement les shell script :


shellcheck
 


Dans debian c'est dans le paquet éponyme.

Je l'utilise via syntastic quand j'utilise vim et via flycheck quand j'utilise emacs.
Je ne sais pas comment il est possible de l'utiliser avec d'autres environnements
mais ça doit être possible.

Note, on peut aussi l'utiliser avec ALE sous vim ou neovim.
ALE est le successeur de syntastic, en mieux (car il fait les choses
en arrière plan de façon asynchrone).
Bon je ferme cette parenthèse.



Je regarde pour Arch ...

EDIT :

https://www.archlinux.org/packages/comm … hellcheck/

Dernière modification par golgot200 (09-06-2019 17:43:10)

Hors ligne

#22 09-06-2019 17:42:56

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

golgot200 a écrit :

J'ai mis

#!/bin/sh



Pas de problème, ça fait son job smile



Euh, justement non, dans ton script tu utilises au moins une syntaxe qui ne fait partie
du sh posix, par exemple :


for (( i=1; i<=TITLE_COUNT; i++ ))
do
#… le code ici
done
 


J'ai viré le $ à TITLE_COUNT, ça marche sans les $ dans les évaluations arithmétiques.

Hors ligne

#23 09-06-2019 17:47:19

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

enicar a écrit :

golgot200 a écrit :

J'ai mis

#!/bin/sh



Pas de problème, ça fait son job smile



Euh, justement non, dans ton script tu utilises au moins une syntaxe qui ne fait partie
du sh posix, par exemple :


for (( i=1; i<=TITLE_COUNT; i++ ))
do
#… le code ici
done
 


J'ai viré le $ à TITLE_COUNT, ça marche sans les $ dans les évaluations arithmétiques.



Ok, je vire le $ et je passe à b=30 pour prendre en compte plusieurs titres et je teste dans la foulée smile

Hors ligne

#24 09-06-2019 17:48:21

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

Te sers tu de la variable CROP définie par :


 CROP=$(ffmpeg -i $FOLDER/"$i-$TITLE.vob" -ss 60 -t 15 -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
 


Il semblerait que non car shellcheck produit un avertissement à ce sujet.

Hors ligne

#25 09-06-2019 17:53:10

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

Re : Script: FFMPEG : Ripper et Encoder ses DVD pour archivage (SUBFR,etc)

enicar a écrit :

Te sers tu de la variable CROP définie par :


 CROP=$(ffmpeg -i $FOLDER/"$i-$TITLE.vob" -ss 60 -t 15 -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
 


Il semblerait que non car shellcheck produit un avertissement à ce sujet.




OK, là de toutes façon, je ne l'ai pas encore implanté. Tu peux la commenter.

Dernière modification par golgot200 (09-06-2019 17:57:48)

Hors ligne

Pied de page des forums