logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

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

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

#51 09-06-2019 21:45:06

Anonyme
Invité

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

C'est pour que quand j'ai activé cette fonction dans pluma, je n'ai jamais remarqué de différence ?

#52 09-06-2019 21:49:49

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Anonyme a écrit :

C'est pour que quand j'ai activé cette fonction dans pluma, je n'ai jamais remarqué de différence ?


je n'ai compris ce que tu veux dire.

Hors ligne

#53 09-06-2019 21:55:30

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

C'est pour que quand j'ai activé cette fonction dans pluma, je n'ai jamais remarqué de différence ?


je n'ai compris ce que tu veux dire.



l'indentation dans les préférences de pluma.

#54 09-06-2019 22:15:56

Anonyme
Invité

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

Je teste ton script wink

   
Stream #0:20[0x27]: Subtitle: dvd_subtitle
Stream #0:21[0x26]: Subtitle: dvd_subtitle
[NULL @ 0x55b687abb8c0] Unable to find a suitable output format for 'audio'
audio: Invalid argument



je cherche tongue

#55 09-06-2019 22:54:37

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Bon, j'ai corrigé mon script, j'ai modifié le code dans le post #37.
Il faut que tu le copies à nouveau.

Hors ligne

#56 09-06-2019 23:11:17

Anonyme
Invité

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

Tout fonctionne !!!!

les bandes audio et les tags correspondes
les sous-titres sont OK.


il y a un truc que je n'arrive pas à faire dans cette partie. C'est quand c'est vide pour la langue.

language: vide aid: ...





    FR=$(mplayer_identify "$i" | awk_lang fr fra)
    FR_LPCM=$(mplayer_identify "$i" | awk_lpcm fr fra)
    EN=$(mplayer_identify "$i" | awk_lang en en)
    EN_LPCM=$(mplayer_identify "$i" | awk_lpcm en en)
    DE=$(mplayer_identify "$i" | awk_lang de ger)
    DE_LPCM=$(mplayer_identify "$i" | awk_lpcm de ger)
    IT=$(mplayer_identify "$i" | awk_lang it ita)
    IT_LPCM=$(mplayer_identify "$i" | awk_lpcm it ita)
    ES=$(mplayer_identify "$i" | awk_lang es spa)
    ES_LPCM=$(mplayer_identify "$i" | awk_lpcm es spa)
    NL=$(mplayer_identify "$i" | awk_lang nl nld)
    NL_LPCM=$(mplayer_identify "$i" | awk_lpcm nl nld)
    HE=$(mplayer_identify "$i" | awk_lang he heb)
    HE_LPCM=$(mplayer_identify "$i" | awk_lpcm he heb)
    HU=$(mplayer_identify "$i" | awk_lang hu hun)
    HU_LPCM=$(mplayer_identify "$i" | awk_lpcm hu hun)
    PL=$(mplayer_identify "$i" | awk_lang pl pol)
    PL_LPCM=$(mplayer_identify "$i" | awk_lpcm pl pol)
    CS=$(mplayer_identify "$i" | awk_lang cs cze)
    CS_LPCM=$(mplayer_identify "$i" | awk_lpcm cs cze)
    JA=$(mplayer_identify "$i" | awk_lang ja jpn)
    JA_LPCM=$(mplayer_identify "$i" | awk_lpcm ja jpn)
    SV=$(mplayer_identify "$i" | awk_lang sv swe)
    SV_LPCM=$(mplayer_identify "$i" | awk_lpcm sv swe)
    UNKNOWN=$(mplayer_identify "$i" | awk_lang unknown und)
    UNKNOWN_LPCM=$(mplayer_identify "$i" | awk_lpcm unknown und)

EMPTY_LANG=$(mplayer_identify "$i" | awk '(/language:  aid:/) && /format:/ {printf "-metadata:s:a:"$3" language=und -metadata:s:a:"$3" title="$5$6" "}')
EMPTY_LANG_LPCM=$(mplayer_identify "$i" | awk '(/language:  aid:/) && /format: lpcm/ {printf "-metadata:s:a:0 language=und -metadata:s:a:0 title="$5$6" "}')
 



PS : nl aussi est en rouge

Dernière modification par Anonyme (09-06-2019 23:23:56)

#57 09-06-2019 23:51:07

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Je vois tu peux toujours laisser comme ça. Sinon il faudrait voir
ce que donne


EMPTY_LANG=$(mplayer_identify "$i" |awk_lang ' aid:' und)
EMPTY_LANG_LPCM=$(mplayer_identify |awk_lpcm ' aid:' und)
 


Il faut forcer un espace en plus avant le « aid: ». Pour cela je lui
donne « ' aid:' » comme chaîne. Et par conséquent dans la fonction
on a  « ilang=" aid:" » (sans les « " »).

Hors ligne

#58 09-06-2019 23:52:49

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Anonyme a écrit :

PS : nl aussi est en rouge


Oui mais ça, c'est juste la coloration syntaxique, on s'en fiche. Il se trouve que « nl » est
une commande qui permet de numéroter les lignes d'un fichier.

Hors ligne

#59 09-06-2019 23:57:39

Anonyme
Invité

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

Pour ton post 57, je vais avoir du mal à tester. Je ne sais plus quel dvd c'est. Et ma collection est énorme. Je garderai mes 2 lignes commentée au dessous des tiennes.

#60 10-06-2019 00:03:42

Anonyme
Invité

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

Bon les yeux fatigues.
Bonne nuit et merci pour ton aide smile

#61 10-06-2019 00:03:48

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

J'y reviendrais peut-être sur ce script. Je n'ai pas terminé l'indentation.
Mais pour ce soir, je vais me coucher.

Hors ligne

#62 10-06-2019 00:34:38

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Une dernière petite chose avant d'aller me coucher. Je viens d'installer
geany. J'ai ouvert le shell script (GPU_LIGHT.bash). Je suis allé
dans le menu « Construire », j'ai choisi « Lint ». Et hop, geany a lancé shellcheck
Il y avait une fenêtre avec les messages d'avertissements et d'erreurs.
Cliquer sur l'un de ces avertissements permet d'aller directement à l'endroit
où se trouve l'avertissement. Voilà. C'est pour montrer qu'un éditeur spécialisé
pour le développement peut être très utile et pratique, et cela même sans avoir
des tonnes de choses à apprendre comme dans vim et emacs…

Par contre il ne semble pas faire l'indentation automatiquement, c'est vraiment
quelque chose que j'apprécie. J'ai même utilisé des outils pour d'autres langages que
le shell qui allait plus loin dans la mise en forme du code et afficher des zones
pour délimiter les expressions suivant où se trouvait le curseur.
J'ai cela pour les parenthèses dans emacs qui les affiche avec différentes
couleurs suivant leur imbrication. Ça marche aussi pour les crochets et
les accolades. C'est une extension qui s'appelle « rainbow delimiters ».
(C'est à dire que ce n'est pas dans base dans emacs).
Bon malgré cela, je pense que geany peut être utile pour coder.

Sinon, il y a bien vscode de microsoft qui fonctionne sous linux
et qui fonctionne même très bien. Lui, il fait vraiment beaucoup de choses.
Je ne sais pas comment il se débrouille avec les shell scripts… mais je ne peux
pas conseiller de l'utiliser (ce n'est pas libre, juste open source).

Il faudrait voir comment se débrouille gedit. Il paraît qu'il fait du bon travail également.
Mais je n'ai pas testé.

Hors ligne

#63 10-06-2019 08:09:50

Anonyme
Invité

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

enicar a écrit :

Une dernière petite chose avant d'aller me coucher. Je viens d'installer
geany. J'ai ouvert le shell script (GPU_LIGHT.bash). Je suis allé
dans le menu « Construire », j'ai choisi « Lint ». Et hop, geany a lancé shellcheck ...



Bonjour,

Juste les "" sur map et tags ferait une compilation terminée avec succès sur ta dernière majoration mais ça ce n'est pas possible smile

Dernière modification par Anonyme (10-06-2019 08:10:17)

#64 10-06-2019 12:21:26

Anonyme
Invité

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

Bonjour,

@enicar

je vois que tu as mis une fonction mplayer_identify
je peux aussi mettre une fonction lsdvd_identify pour alléger les lignes de code non ?:)

#65 10-06-2019 12:24:39

Anonyme
Invité

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

Par contre sur deux de tes fonctions, j'ai vraiment du mal. Mais je préfère attendre avant de te demander une explication.

#66 10-06-2019 13:47:59

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Anonyme a écrit :

Juste les "" sur map et tags ferait une compilation terminée avec succès sur ta dernière majoration mais ça ce n'est pas possible smile


Vu la définition de ces deux variables je me demande si on ne peut pas faire quelque
chose avec des tableaux de façon simple.

Il faudrait que tu me donnes un exemple de ces variables avec les différents éléments
qui les composent. Par exemple la valeur de :


TAGS_ID_STREAMS
 


Avec les valeurs séparées des éléments qui la compose :


FR
EN
DE

 


Mais j'ai une idée simple pour utiliser des tableaux pour
MAP_ID_STREAM et MAP_ID_STREAMS_LPCM. J'explique
sur un exemple simple. Soit le script :


#! /bin/bash

affiche () {
    echo "Taille du tableau : $#"
    echo 'Liste des éléments du tableau :'
    for s in "$@"; do
        echo "$s"
    done
}

mapfile -t -d$' ' essai < <(echo -n "coucou ça va")
affiche "${essai[@]}"
read -r -a essai < <(echo "oui, très bien")
affiche "${essai[@]}"
 



Ici la variable, je l'ai appelé essai. J'ai demandé à mapfile
de découper par rapport aux espaces (-d$' ') et de supprimer ces
espaces (-t). La syntaxe « < <(… ) » permet de donner en entrée
standard de mapfile (qui est une commande interne de bash), la sortie
de la commande. Le seul soucis de cette méthode est que ça va laisser
un caractère nouvelle ligne à la fin du dernier élément. C'est pour
cela que j'ai utilisé « echo -n ». Par contre avec « read -r -a », on
n'a pas ce porblème. Bref allons y avec read, donc !

Je te propose cette version, où j'ai utilisé cette technique :


#!/bin/bash

#### Anonyme ###############################################################################
# 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
##############################################################################################

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 () {
    local i="$1"
    if [[  "${#MPLAYER_IDENTIFY[@]}" -eq 0 ]]; then
        mapfile MPLAYER_IDENTIFY < <(mplayer -vo null -ao null -frames 0 \
                -identify dvd://"$i" -dvd-device "$DEVICE"  2>/dev/null)
    fi
    echo -n "${MPLAYER_IDENTIFY[@]}"
}

awk_lang () {
    local ilang="$1"
    local olang="$2"
    awk "/language: $ilang/ && /format:/ \
        {printf \"-metadata:s:a:\"\$3\" language=$olang -metadata:s:a:\"\$3\" title=\"\$5\$6\" \"}"

}

awk_lpcm () {
    local ilang="$1"
    local olang="$2"
    awk "/language: $ilang/ && /format: lpcm/ \
        {printf \"-metadata:s:a:0 language=$olang -metadata:s:a:0 title=\"\$5\$6\" \"}"

}

lsdvd_x () {
    local i="$1"
    if [[ "${#LSDVD_X[@]}" -eq 0  ]]; then
        mapfile LSDVD_X < <(lsdvd -x "$DEVICE" -t "$i" 2> /dev/null)
    fi
    echo -n "${LSDVD_X[@]}"
}

## 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 -c ^'Title: ')


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_identify "$i" | awk_lang fr fra)
    FR_LPCM=$(mplayer_identify "$i" | awk_lpcm fr fra)
    EN=$(mplayer_identify "$i" | awk_lang en en)
    EN_LPCM=$(mplayer_identify "$i" | awk_lpcm en en)
    DE=$(mplayer_identify "$i" | awk_lang de ger)
    DE_LPCM=$(mplayer_identify "$i" | awk_lpcm de ger)
    IT=$(mplayer_identify "$i" | awk_lang it ita)
    IT_LPCM=$(mplayer_identify "$i" | awk_lpcm it ita)
ES=$(mplayer_identify "$i" | awk '/language: es/ && /format:/  {printf "-metadata:s:a:"$3" language=spa -metadata:s:a:"$3" title="$5$6" "}')
ES_LPCM=$(mplayer_identify "$i" | awk '/language: es/ && /format: lpcm/  {printf "-metadata:s:a:0 language=spa -metadata:s:a:0 title="$5$6" "}')
NL=$(mplayer_identify "$i" | awk '/language: nl/ && /format:/  {printf "-metadata:s:a:"$3" language=nld -metadata:s:a:"$3" title="$5$6" "}')
NL_LPCM=$(mplayer_identify "$i" | awk '/language: nl/ && /format: lpcm/  {printf "-metadata:s:a:0 language=nld -metadata:s:a:0 title="$5$6" "}')
HE=$(mplayer_identify "$i" | awk '/language: he/ && /format:/  {printf "-metadata:s:a:"$3" language=heb -metadata:s:a:"$3" title="$5$6" "}')
HE_LPCM=$(mplayer_identify "$i" | awk '/language: he/ && /format: lpcm/  {printf "-metadata:s:a:0 language=heb -metadata:s:a:0 title="$5$6" "}')
HU=$(mplayer_identify "$i" | awk '/language: hu/ && /format:/  {printf "-metadata:s:a:"$3" language=hun -metadata:s:a:"$3" title="$5$6" "}')
HU_LPCM=$(mplayer_identify "$i" | awk '/language: hu/ && /format: lpcm/  {printf "-metadata:s:a:0 language=hun -metadata:s:a:0 title="$5$6" "}')
PL=$(mplayer_identify "$i" | awk '/language: pl/ && /format:/  {printf "-metadata:s:a:"$3" language=pol -metadata:s:a:"$3" title="$5$6" "}')
PL_LPCM=$(mplayer_identify "$i" | awk '/language: pl/ && /format: lpcm/  {printf "-metadata:s:a:0 language=pol -metadata:s:a:0 title="$5$6" "}')
CS=$(mplayer_identify "$i" | awk '/language: cs/ && /format:/  {printf "-metadata:s:a:"$3" language=cze -metadata:s:a:"$3" title="$5$6" "}')
CS_LPCM=$(mplayer_identify "$i" | awk '/language: cs/ && /format: lpcm/  {printf "-metadata:s:a:0 language=cze -metadata:s:a:0 title="$5$6" "}')
JA=$(mplayer_identify "$i" | awk '/language: ja/ && /format:/  {printf "-metadata:s:a:"$3" language=jpn -metadata:s:a:"$3" title="$5$6" "}')
JA_LPCM=$(mplayer_identify "$i" | awk '/language: ja/ && /format: lpcm/  {printf "-metadata:s:a:0 language=jpn -metadata:s:a:0 title="$5$6" "}')
SV=$(mplayer_identify "$i" | awk '/language: sv/ && /format:/  {printf "-metadata:s:a:"$3" language=swe -metadata:s:a:"$3" title="$5$6" "}')
SV_LPCM=$(mplayer_identify "$i" | awk '/language: sv/ && /format: lpcm/  {printf "-metadata:s:a:0 language=swe -metadata:s:a:0 title="$5$6" "}')
UNKNOWN=$(mplayer_identify "$i" | awk '/language: unknown/ && /format:/  {printf "-metadata:s:a:"$3" language=und -metadata:s:a:"$3" title="$5$6" "}')
UNKNOWN_LPCM=$(mplayer_identify "$i" | awk '/language: unknown/ && /format: lpcm/  {printf "-metadata:s:a:0 language=und -metadata:s:a:0 title="$5$6" "}')
EMPTY_LANG=$(mplayer_identify "$i" | awk '(/language:  aid:/) && /format:/ {printf "-metadata:s:a:"$3" language=und -metadata:s:a:"$3" title="$5$6" "}')
EMPTY_LANG_LPCM=$(mplayer_identify "$i" | 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_identify "$i" | 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 "$i" |grep 'lpcm' | awk '{print$8}' | \
                     awk '{x=x+NF}END{print x}')
    COUNT_AC3_DTS_MPEG1=$(lsdvd_x "$i" | grep 'ac3,\|dts,\|mpeg1,' | \
                              awk '{print$8}' |awk '{x=x+NF}END{print x}')
#    MAP_ID_STREAMS=( $(lsdvd_x "$i" |grep "Audio:" | \
#                         sed -n -e 's/.*\(0x\)/\1/p' |sed -e 's/c/1c/g' | \
#                         awk '/0x/{gsub (/^/,"-map i:")}1') )
    read -r -a MAP_ID_STREAMS < <(lsdvd_x "$i" |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 "$i" |grep 'lpcm' | \
#                              sed -n -e 's/.*\(0x\)/\1/p' | sed -e 's/c/1c/g' | \
#                              awk '/0x/{gsub (/^/,"-map i:")}1')
    read -r -a MAP_ID_STREAMS_LPCM < <(lsdvd_x "$i" |grep 'lpcm' | \
                             n -e 's/.*\(0x\)/\1/p' | sed -e 's/c/1c/g' | \
                             awk '/0x/{gsub (/^/,"-map i:")}1')

    SIDFR=$(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}')
    COUNT_SID_FR=$(mplayer_identify "$i" | \
                       grep "subtitle ( sid ):" | grep "language: fr" | \
                       awk '{print$7}' | awk '{x=x+NF}END{print x}')

    RATIO=$(lsdvd_x i"$i" | 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 "$i" |awk '/ac3,/  {printf ""$4","}'  | \
                             sed -e 's/,*$//g')
    INFO_LPCM=$(lsdvd_x "$i" |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"


    menage



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


    menage

## 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

 


J'ai aussi créer une autre fonction lsdvd_x pour factoriser un peu
plus le code. Comme cela on se rend compte qu'il y a une autre chose
que l'on peut optimiser. Comme tu renouvelles cet appel plusieurs fois
on pourrait mettre le résultat de la commande dans un tableau
et ensuite reservir ces lignes aux différents filtres (grep, sed,
awk). On pourrait faire de même pour mplayer_identify. Dans ces deux
cas il faudrait utiliser mapfile… Je vais voir si je mets tout cela en place.

ADDENDUM :
J'ai intégré ces modifications dans le script. J'ai aussi
créé des tableaux pour les variables TAGS_ID_STREAMS et
TAGS_ID_STREAMS_LPCM. Shellcheck ne produit plus aucun avertissement,
mais ça ne marchera peut-être pas…

NOTE : Suppressions des tableaux pour les variables
TAGS_ID_STREAMS et TAGS_ID_STREAMS_LPCM car c'est comme ça que ça doit
être. Il ne faut pas toujours suivre les recommandations de
shellcheck.

Dernière modification par enicar (10-06-2019 14:47:00)

Hors ligne

#67 10-06-2019 14:18:33

Anonyme
Invité

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

Résultat

Sur un dvd où il n'y a que des bandes AC3, on n'encode que la première bande audio.
A la ligne 141 , j'ai en retour :

./1: ligne 141: n : commande introuvable



Je pense que c'est normal vu qu'il n'a pas de bande lpcm.

Je te post ce que tu demande ....

#68 10-06-2019 14:23:12

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Anonyme a écrit :

Sur un dvd où il n'y a que des bandes AC3, on n'encode que la première bande audio.
A la ligne 141 , j'ai en retour :


Sur quel version du script ?

ADDENDUM : Je te demande cela car dans mon script
ligne 141, il n'y a rien…

Dernière modification par enicar (10-06-2019 14:31:09)

Hors ligne

#69 10-06-2019 14:23:59

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-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)

avé Anonyme !  big_smile

quand ton script sera prêt , par curiosité , je veux bien le tester sur un disque , ici  (chez moi)  .

Hors ligne

#70 10-06-2019 14:31:23

Anonyme
Invité

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

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



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




EN=$(mplayer -vo null -ao null -frames 0 -identify dvd://01 -dvd-device /dev/sr0  2>/dev/null | awk '/language: en/ && /format:/  {printf "-metadata:s:a:"$3" language=en -metadata:s:a:"$3" title="$5$6" "}')



-metadata:s:a:0 language=en -metadata:s:a:0 title=ac3(stereo) -metadata:s:a:5 language=en -metadata:s:a:5 title=ac3(stereo) -metadata:s:a:6 language=en -metadata:s:a:6 title=ac3(unknown)






DE=$(mplayer -vo null -ao null -frames 0 -identify dvd://01 -dvd-device /dev/sr0  2>/dev/null | awk '/language: de/ && /format:/  {printf "-metadata:s:a:"$3" language=ger -metadata:s:a:"$3" title="$5$6" "}')



-metadata:s:a:2 language=ger -metadata:s:a:2 title=ac3(stereo)





IT=$(mplayer -vo null -ao null -frames 0 -identify dvd://01 -dvd-device /dev/sr0  2>/dev/null | awk '/language: it/ && /format:/  {printf "-metadata:s:a:"$3" language=ita -metadata:s:a:"$3" title="$5$6" "}')



-metadata:s:a:3 language=ita -metadata:s:a:3 title=ac3(stereo)





ES=$(mplayer -vo null -ao null -frames 0 -identify dvd://01 -dvd-device /dev/sr0  2>/dev/null | awk '/language: es/ && /format:/  {printf "-metadata:s:a:"$3" language=spa -metadata:s:a:"$3" title="$5$6" "}')



-metadata:s:a:4 language=spa -metadata:s:a:4 title=ac3(stereo)





Et le TAGS_ID_STREAMS

-metadata:s:a:1 language=fra -metadata:s:a:1 title=ac3(stereo) -metadata:s:a:0 language=en -metadata:s:a:0 title=ac3(stereo) -metadata:s:a:5 language=en -metadata:s:a:5 title=ac3(stereo) -metadata:s:a:6 language=en -metadata:s:a:6 title=ac3(unknown) -metadata:s:a:2 language=ger -metadata:s:a:2 title=ac3(stereo) -metadata:s:a:3 language=ita -metadata:s:a:3 title=ac3(stereo) -metadata:s:a:4 language=spa -metadata:s:a:4 title=ac3(stereo)

Dernière modification par Anonyme (10-06-2019 14:39:45)

#71 10-06-2019 14:36:02

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

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

Bon alors je pense que les dernières modifications que j'ai faites ne servent à rien.
Il faut laisser ces deux variables comme elles étaient. Je vais changer le script du post #66.
Tel quel il ne fonctionnera pas.

Dernière modification par enicar (10-06-2019 14:57:50)

Hors ligne

#72 10-06-2019 14:36:41

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

Sur un dvd où il n'y a que des bandes AC3, on n'encode que la première bande audio.
A la ligne 141 , j'ai en retour :


Sur quel version du script ?

ADDENDUM : Je te demande cela car dans mon script
ligne 141, il n'y a rien…



Script du post 66

#73 10-06-2019 14:38:02

Anonyme
Invité

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

enicar a écrit :

Bon alors je pense que les dernières modifications que j'ai faites ne servent à rien.
Il faut laisser ces deux variables comme elles étaient. Je vais change le script du post #66.
Tel quel il ne fonctionnera pas.




vi big_smile car là, je suis en train de couler !!!!! lol

#74 10-06-2019 14:44:15

Anonyme
Invité

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

Debian Alain a écrit :

avé Anonyme !  big_smile

quand ton script sera prêt , par curiosité , je veux bien le tester sur un disque , ici  (chez moi)  .



Tu as quoi comme carte graphique ?

#75 10-06-2019 14:48:18

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-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)

pas  grand  chose , une petite AMD/ATI Sapphire Radeon RX 550 Pulse (4 Go) (polaris 12)

Dernière modification par Debian Alain (10-06-2019 14:51:58)

Hors ligne

Pied de page des forums