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

#101 10-06-2019 15:57:03

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

ffmpeg encode que le premier stream :


Et c'est un problème ?



big_smile big_smile

Ben, il manque les autres streams audio tongue


EDIT: comme là à l'encodage :


Output #0, matroska, to '/home/patrick/Desktop/SLEEPLESS_IN_SEATTLE/1-SLEEPLESS_IN_SEATTLE.mkv':
  Metadata:
    title           : SLEEPLESS_IN_SEATTLE
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (h264_nvenc) (High), 1 reference frame (H264 / 0x34363248), yuv420p(left), 720x576 [SAR 64:45 DAR 16:9], q=18-23, 2000 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.35.100 h264_nvenc
    Side data:
      cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: -1
    Stream #0:1(en): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:2(fra): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:3(ger): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:4(ita): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:5(spa): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:6(en): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : ac3(stereo)
    Stream #0:7(en): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 3.0, fltp, 448 kb/s
    Metadata:
      title           : ac3(unknown)
frame=  202 fps=101 q=17.0 Lsize=    1654kB time=00:00:08.22 bitrate=1647.8kbits/s speed=4.12x    
video:28kB audio:1611kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.939729%

 

Dernière modification par Anonyme (10-06-2019 15:59:45)

#102 10-06-2019 16:03:44

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 ça :


local ilang="$1"
local olang="$2"
 


C'est la déclaration deux variables locales (en fait elles ne sont pas
vraiment locale, mais dans ce cas ci, elles le sont vraiment… oui je
sais on a l'impression que je me contredit big_smile).

$1 contient la valeur du premier paramètre passé à la fonction.
$2 contient la seconde.
et je donne à ilang la valeur qu'il y a dans $1.
Même chose pour olang.

Je trouvais plus claire d'utiliser des variables avec de vrais noms,
plutôt que des chiffres dans la fonction.

En ligne

#103 10-06-2019 16:05:03

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 :

Ben, il manque les autres streams audio


Et ton script encode tous les streams normalement, c'est ça ?

En ligne

#104 10-06-2019 16:06: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 vais regarder. Mais pour l'instant je vais manger…

En ligne

#105 10-06-2019 16:10:30

Anonyme
Invité

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

Mais quel bur...

c'est plus clair

FR=$(mplayer_identify "$i" | awk_lang fr fra)
...



smile

Dernière modification par Anonyme (10-06-2019 16:11:20)

#106 10-06-2019 16:13:54

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

Ben, il manque les autres streams audio


Et ton script encode tous les streams normalement, c'est ça ?




C'est ça wink

+ ne garde que les sous-titres en français, si il y en a.

#107 10-06-2019 16:17:01

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 je viens de corriger une erreur ligne 161 pour la variable RATIO.
Un « i » supplémentaire s'était glissé là. Encore une faute de frappe.
J'ai juste modifié le post #80.

En ligne

#108 10-06-2019 16:22:52

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)

Il faut peut être revenir en arrière. Ne pas utiliser de tableau pour MAP_ID_STREAMS
et MAP_ID_STREAMS_LPCM. Ce n'est pas beaucoup de chose à faire mais je mange d'abord !
Cette fois, j'y vais !

En ligne

#109 10-06-2019 16:29:52

Anonyme
Invité

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

Sur ton script, tu as commenté la ligne 142 et 148 pour les remplacer par des :

read -r -a MAP_ID_STREAMS
read -r -a MAP_ID_STREAMS_LPCM

C'est ici qu'on a perdu les autres streams audios.

J'ai commenté inversement et ça refonctionne tongue

EDIT
message croisé smile

Dernière modification par Anonyme (10-06-2019 16:30:47)

#110 10-06-2019 16:38:21

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)

La question que je me pose c'est pourquoi ?

En ligne

#111 10-06-2019 16:45:29

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)

Il me faudrait un exemple de ce qui est attendu par ffmpeg avec la bonne valeur
et voir ce qui est passé avec les tableau.
Remarque, quand tu utilises un tableau pour récupérer toutes les valeurs
il faut utiliser « "${MAP_ID_STREAMS[@]}" », pas juste
$MAP_ID_STREAMS qui correspond justement au premier élément du tableau.
C'est l'un des pièges des tableaux. J'avais bien pris soin de changer toutes
les occurrences de « $MAP_ID_STREAMS » et « "${MAP_ID_STREAMS[@]}" »
voilà pourquoi je ne comprends pas…

En ligne

#112 10-06-2019 17:10:54

Anonyme
Invité

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

ffmpeg


ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i 1-SLEEPLESS_IN_SEATTLE.vob -map 0:v -metadata title=SLEEPLESS_IN_SEATTLE -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose -map i:0x80 -map i:0x81 -map i:0x82 -map i:0x83 -map i:0x84 -map i:0x85 -map i:0x86 -acodec copy -metadata:s:a:0 language=en -metadata:s:a:0 title=ac3(stereo) -metadata:s:a:1 language=fra -metadata:s:a:1 title=ac3(stereo) -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) -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)  -movflags +faststart -qmin 18 -qmax 23 -y 1-SLEEPLESS_IN_SEATTLE.mkv
 

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

#113 10-06-2019 17:57:39

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 repéré la ligne, c'est le ffmpeg de la ligne 252.
Mais ça m'aide pas tellement. Est-ce que tu pourrais faire tourner ce
petit test :


#! /bin/bash
PATH=$PATH:/sbin:/usr/sbin

declare -a MPLAYER_IDENTIFY
declare -a LSDVD_X

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


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

## CONDITION : UN SEUL DVD-VIDÉO
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

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


    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')
    echo "MAP_ID_STREAMS=${MAP_ID_STREAMS}"
    echo
    read -r -a MAP_ID_STREAMS_array < <(lsdvd_x "$i" |grep "Audio:" | \
                                  sed -n -e 's/.*\(0x\)/\1/p' |sed -e 's/c/1c/g' | \
                                  awk '/0x/{gsub (/^/,"-map i:")}1')
    echo "MAP_ID_STREAMS_array=" "${MAP_ID_STREAMS_array[@]}"
    echo
    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')
    echo "MAP_ID_STREAMS_LPCM=${MAP_ID_STREAMS_LPCM}"
    echo
    read -r -a MAP_ID_STREAMS_LPCM_array < <(lsdvd_x "$i" |grep 'lpcm' | \
                             sed -n -e 's/.*\(0x\)/\1/p' | sed -e 's/c/1c/g' | \
                             awk '/0x/{gsub (/^/,"-map i:")}1')
    echo "MAP_ID_STREAMS_LPCM_array=" "${MAP_ID_STREAMS_LPCM_array[@]}"
fi
done

 


C'est un extrait de ton script dans lequel j'ai juste gardé ce qui est
nécessaire pour voir la différence entre les deux. Comme ça je
visualiserai mieux. Parce que sinon, c'est un peu abstrait.

En ligne

#114 10-06-2019 18:03:13

Anonyme
Invité

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

Voilà :


[patrick@PC1 Desktop]$ ./1
Proceed...
MPlayer SVN-r38139 (C) 2000-2019 MPlayer Team
225 audio & 465 video codecs

Playing dvd://1.
ID_DVD_TITLES=3
ID_DVD_TITLE_1_CHAPTERS=28
ID_DVD_TITLE_1_ANGLES=1
ID_DVD_TITLE_2_CHAPTERS=2
ID_DVD_TITLE_2_ANGLES=1
ID_DVD_TITLE_3_CHAPTERS=2
ID_DVD_TITLE_3_ANGLES=1
ID_DVD_TITLE_1_LENGTH=6051.000
ID_DVD_TITLE_2_LENGTH=151.000
ID_DVD_TITLE_3_LENGTH=384.600
ID_DVD_DISC_ID=646F796347A5A97D1D9BBEF2E283BE7F
ID_DVD_VOLUME_ID=SLEEPLESS_IN_SEATTLE
There are 3 titles on this DVD.

ID_DVD_CURRENT_TITLE=1
There are 1 angles in this DVD title.

libdvdread: Attempting to retrieve all CSS keys
libdvdread: This can take a _long_ time, please be patient

libdvdread: Get key for /VIDEO_TS/VIDEO_TS.VOB at 0x00000160
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_01_0.VOB at 0x00008ee0
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_01_1.VOB at 0x000162d5
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_02_0.VOB at 0x002c5d00
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_02_1.VOB at 0x002c5e20
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_03_0.VOB at 0x002d4180
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_03_1.VOB at 0x002d42a0
libdvdread: Elapsed time 0
libdvdread: Found 3 VTS's
libdvdread: Elapsed time 0
audio stream: 0 format: ac3 (stereo) language: en aid: 128.

ID_AUDIO_ID=128
ID_AID_128_LANG=en
audio stream: 1 format: ac3 (stereo) language: fr aid: 129.

ID_AUDIO_ID=129
ID_AID_129_LANG=fr
audio stream: 2 format: ac3 (stereo) language: de aid: 130.

ID_AUDIO_ID=130
ID_AID_130_LANG=de
audio stream: 3 format: ac3 (stereo) language: it aid: 131.

ID_AUDIO_ID=131
ID_AID_131_LANG=it
audio stream: 4 format: ac3 (stereo) language: es aid: 132.

ID_AUDIO_ID=132
ID_AID_132_LANG=es
audio stream: 5 format: ac3 (stereo) language: en aid: 133.

ID_AUDIO_ID=133
ID_AID_133_LANG=en
audio stream: 6 format: ac3 (unknown) language: en aid: 134.

ID_AUDIO_ID=134
ID_AID_134_LANG=en
number of audio channels on disk: 7.
subtitle ( sid ): 0 language: en

ID_SUBTITLE_ID=0
ID_SID_0_LANG=en
subtitle ( sid ): 1 language: fr

ID_SUBTITLE_ID=1
ID_SID_1_LANG=fr
subtitle ( sid ): 2 language: de

ID_SUBTITLE_ID=2
ID_SID_2_LANG=de
subtitle ( sid ): 3 language: it

ID_SUBTITLE_ID=3
ID_SID_3_LANG=it
subtitle ( sid ): 4 language: es

ID_SUBTITLE_ID=4
ID_SID_4_LANG=es
subtitle ( sid ): 5 language: nl

ID_SUBTITLE_ID=5
ID_SID_5_LANG=nl
subtitle ( sid ): 6 language: ar

ID_SUBTITLE_ID=6
ID_SID_6_LANG=ar
subtitle ( sid ): 7 language: cs

ID_SUBTITLE_ID=7
ID_SID_7_LANG=cs
subtitle ( sid ): 8 language: da

ID_SUBTITLE_ID=8
ID_SID_8_LANG=da
subtitle ( sid ): 9 language: fi

ID_SUBTITLE_ID=9
ID_SID_9_LANG=fi
subtitle ( sid ): 10 language: el

ID_SUBTITLE_ID=10
ID_SID_10_LANG=el
subtitle ( sid ): 11 language: iw

ID_SUBTITLE_ID=11
ID_SID_11_LANG=iw
subtitle ( sid ): 12 language: hi

ID_SUBTITLE_ID=12
ID_SID_12_LANG=hi
subtitle ( sid ): 13 language: hu

ID_SUBTITLE_ID=13
ID_SID_13_LANG=hu
subtitle ( sid ): 14 language: is

ID_SUBTITLE_ID=14
ID_SID_14_LANG=is
subtitle ( sid ): 15 language: no

ID_SUBTITLE_ID=15
ID_SID_15_LANG=no
subtitle ( sid ): 16 language: pl

ID_SUBTITLE_ID=16
ID_SID_16_LANG=pl
subtitle ( sid ): 17 language: pt

ID_SUBTITLE_ID=17
ID_SID_17_LANG=pt
subtitle ( sid ): 18 language: sv

ID_SUBTITLE_ID=18
ID_SID_18_LANG=sv
subtitle ( sid ): 19 language: tr

ID_SUBTITLE_ID=19
ID_SID_19_LANG=tr
subtitle ( sid ): 20 language: fr

ID_SUBTITLE_ID=20
ID_SID_20_LANG=fr
subtitle ( sid ): 21 language: de

ID_SUBTITLE_ID=21
ID_SID_21_LANG=de
subtitle ( sid ): 22 language: it

ID_SUBTITLE_ID=22
ID_SID_22_LANG=it
subtitle ( sid ): 23 language: es

ID_SUBTITLE_ID=23
ID_SID_23_LANG=es
subtitle ( sid ): 24 language: nl

ID_SUBTITLE_ID=24
ID_SID_24_LANG=nl
number of subtitles on disk: 25

CHAPTERS: 00:00:00.000,00:05:17.560,00:12:17.080,00:14:25.280,00:21:32.560,00:23:40.360,00:25:24.400,00:28:44.440,00:30:10.880,00:32:52.800,00:38:08.080,00:39:56.480,00:41:15.640,00:43:04.640,00:49:02.840,00:51:11.280,00:52:45.440,00:56:47.560,01:01:27.320,01:09:41.200,01:11:49.680,01:17:42.400,01:22:25.400,01:24:14.880,01:26:26.520,01:27:59.120,01:29:44.080,01:31:58.720,
dump: 79294464 bytes written (~1.4%)


MPlayer interrupted by signal 2 in module: dumpstream
ID_SIGNAL=2
dump: 81121280 bytes written to '/home/patrick/Desktop/SLEEPLESS_IN_SEATTLE/1-SLEEPLESS_IN_SEATTLE.vob'.
Core dumped ;)

Exiting... (End of file)
ID_EXIT=EOF
MAP_ID_STREAMS=-map i:0x80
-map i:0x81
-map i:0x82
-map i:0x83
-map i:0x84
-map i:0x85
-map i:0x86

MAP_ID_STREAMS_array= -map i:0x80

MAP_ID_STREAMS_LPCM=

MAP_ID_STREAMS_LPCM_array=
[patrick@PC1 Desktop]$
 

#115 10-06-2019 18:04:23

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)

sans disque

alain@Alain-PC:~/Téléchargements$ bash ./test


Aucun DVD-Vidéo ou 2 DVD-Vidéos/DVD-ROM ... dans différents lecteurs ?



alain@Alain-PC:~/Téléchargements$ ./test


Aucun DVD-Vidéo ou 2 DVD-Vidéos/DVD-ROM ... dans différents lecteurs ?



au premier chargement :

 ./test


Proceed...
/home/alain/Bureau/CONSTANTINE_DISC_1 n'existe pas !
Création Du Dossier /home/alain/Bureau/CONSTANTINE_DISC_1
 



chargements suivants (même disque) :

./test


Proceed...
 

Dernière modification par Debian Alain (10-06-2019 18:10:15)

Hors ligne

#116 10-06-2019 18:08:57

Anonyme
Invité

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

@Debian Alain

Question à 100 balles, c'est bien un DVD-Vidéo ? tongue

Tu n'aurais pas 2 lecteurs avec un DVD dans chaque lecteurs ?

EDIT : Ha ben si tu édites en même temps !!!  big_smile
Ne tiens pas compte de ce post.

Dernière modification par Anonyme (10-06-2019 18:13:05)

#117 10-06-2019 18:14:54

Anonyme
Invité

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

@Debian Alain

ça va pas plus loin que :


Proceed...
 



?

#118 10-06-2019 18:16:36

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, c'est fois j'ai compris ce qui se passe.
« read -a … » s'est arrêté de lire dès qu'il a rencontré une nouvelle ligne.

Quand on utilise pas read -a, bash remplace automatiquement les nouvelles
lignes par des espaces.
Je pourrait essayer d'utiliser mapfile finalement dont le séparateur par défaut
est la nouvelle ligne.
Là on touche la limite de ce que l'on peut faire proprement avec un script bash.

En ligne

#119 10-06-2019 18:17:32

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)

non , je n'ai que 1 lecteur et c'est le disque de "constantine"  , DVD Video , Zone 2 , Dolby Digital .

http://www.allocine.fr/video/player_gen … 48082.html

https://www.youtube.com/watch?v=2jfDHq2bq_g

1560188727.png

Dernière modification par Debian Alain (10-06-2019 18:27:27)

Hors ligne

#120 10-06-2019 18:19:52

Anonyme
Invité

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

En fait ce qui nous ammène a tout ça, c'est cette double quote pour MAP_ID_STREAMS etc ? C'est bien cela ?

#121 10-06-2019 18:21:06

Anonyme
Invité

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

Debian Alain a écrit :

non , je n'ai que 1 lecteur et c'est le disque de "constantine"  , DVD Video , Zone 2 , Dolby Digital .

http://www.allocine.fr/video/player_gen … 48082.html

https://www.youtube.com/watch?v=2jfDHq2bq_g




Mais ça rip, ça encode ?
Dans ton terminal, tu vois quoi ? smile

#122 10-06-2019 18:25:10

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 je poste la nouvelle version, dans laquelle, j'espère, je n'aurais
pas glissé d'erreurs.


#!/bin/bash

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

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

## CONDITION : UN SEUL DVD-VIDÉO
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_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_lang ' aid:' und)
    EMPTY_LANG_LPCM=$(mplayer_identify "$i" |awk_lpcm ' aid:' und)


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')
    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')
    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" | 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 auto -c:v mpeg2_cuvid -i 1-SLEEPLESS_IN_SEATTLE.vob -map 0:v -metadata title=SLEEPLESS_IN_SEATTLE -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose -map i:0x80 -map i:0x81 -map i:0x82 -map i:0x83 -map i:0x84 -map i:0x85 -map i:0x86 -acodec copy -metadata:s:a:0 language=en -metadata:s:a:0 title=ac3(stereo) -metadata:s:a:1 language=fra -metadata:s:a:1 title=ac3(stereo) -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) -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)  -movflags +faststart -qmin 18 -qmax 23 -y 1-SLEEPLESS_IN_SEATTLE.mk
    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 mis à jour les $MAP_ID_STREAMS et $MAP_ID_STREAMS_LPCM
en enlevant le « [@] » qui est inutile.

Je suis quand même content de cette mise en mémoire pour
mplayer_identify et lsdvd_x. Bien sûr on peut encore amélioré,
mais je m'arrête là.

Note :Script mis à jour.

Dernière modification par enicar (10-06-2019 18:36:23)

En ligne

#123 10-06-2019 18:31:25

Anonyme
Invité

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

@enicar

le script fonctionne smile


juste le fameux

   
NL=$(mplayer_identify "$i" |awk_lang nl nld)
NL_LPCM=$(mplayer_identify "$i" |awk nl nld)
 



awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)



je corrige ça wink

#124 10-06-2019 18:32:55

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 :

En fait ce qui nous ammène a tout ça, c'est cette double quote pour MAP_ID_STREAMS etc ? C'est bien cela ?


Oui, mais enfin. Je me suis trompé pour le read -a j'aurais du faire :


read -r -d$'\n' -a MAP_ID_STREAMS < <()
 


Mais va savoir, il faudrait tester.
Ou alors :


mapfile -t MAP_ID_STREAMS < <()
 


De cette façon quand on interpole avec :


"${MAP_ID_STREAMS[@]}"
 


bash remplace cette expression avec tous les éléments du tableau
séparés par des espaces (et sans les caractères nouvelles lignes).

En ligne

#125 10-06-2019 18:33:05

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)

./test


Proceed...
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
awk: fatal : impossible d'ouvrir le fichier « nld » en lecture (Aucun fichier ou dossier de ce type)
 



pendant ce temps , vlc s'ouvre et charge le disque  . j'ai le droit à la  video (sur vlc) .

Dernière modification par Debian Alain (10-06-2019 18:35:12)

Hors ligne

Pied de page des forums