#1 Le 04/07/2022, à 00:13
- Chmilblick
Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
J'ai longtemps cherché une solution importer mes DVD sur mon PC afin de pouvoir les visionner sans avoir besoin du lecteur DVD au moment de la projection (ex. : faire un petit stock pour les enfants avant les vacances). L'import de DVD avec Handbrake me satisfait que moyennement, car ceci est lent sur mon petit PC portable et surtout souvent il me manque une piste (ex. : moi je préfère tout en VO, les enfants en VF...), je me plante de sous-titre ou une fois le film vu, je me rends compte que j'aimerais bien voir les bonus.
J'ai donc opté pour importer avec dd les DVD vidéo vers des ISO : simple, fiable et rapide. Ça prend plein de place, mais pas grave : en vacances le vieux disque dur 2,5 pouces de 500Go est bien moins volumineux que les 50 DVD jugés indispensables pour les 4 semaines qui suivent (alors même que l'on en regardera que deux, mais c'est une autre histoire).
Il faut juste quelques étapes :
avec isoinfo vérifier la taille.
Au besoin faire un handshake avec VLC.
Lancer dd avec les bonnes options.
Jusqu'ici, je faisais tout ceci à la main, j'avais les commandes inscrites dans un coin de fichier texte. Finalement, voulant apprendre bash j'ai fait un petit script.
Vous le trouverez sur ce dépôt sur GitLab.
Ce type de script existe certainement déjà mais je n'ai pas trouvé. Et vu que je débute avec les scripts en Bash, il y a certainement des choses mieux faites mais pour moi c'est pile ce qui me faut.
N'hésitez pas à me faire des retours : si jamais ça peut servir à quelqu'un d'autre que moi, je suis content. Si j'apprends comment améliorer les choses, encore plus !
Dernière modification par Chmilblick (Le 04/07/2022, à 09:07)
Hors ligne
#2 Le 04/07/2022, à 02:52
- Watael
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
salut,
j'ai déjà vu pire.
ligne 58 tu compares des nombres comme des chaînes : if (( $unlock == 1 )); then...
ligne 63 tu présumes que la variable est correctement assignée sans le vérifier.
je n'aime pas l'idée de répéter grep sur les mêmes données.
je n'ai pas d'exemples de sortie d'isoinfo, donc je me demande si on ne pourrais pas faire ça en une seule passe, avec sed, peut-être...
tu modifies globalement LC_NUMERIC pour la resstaurer tout de suite, quand tu pourrais la définir localement pour la commande qui l'utilise
LC_NUMERIC=C printf -v taille_Go '%.2f' $(echo "$taille_octets/10^9" | bc -l)
ou plus simplement :
taille_Go=$(echo "go=$taille_octets / 10^9; scale=2; print go/1,\"\n\"" | bc -l)
Dernière modification par Watael (Le 04/07/2022, à 02:57)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 04/07/2022, à 04:16
- Chmilblick
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
Chouette ! Je vais apprendre un tas de trucs !
j'ai déjà vu pire.
Me voilà rassuré Ceci dit, pour une première en Bash je dois avouer que par rapports aux quelques autres langages de programmation que j'ai pratiqué, j'ai pas mal galéré.
ligne 58 tu compares des nombres comme des chaînes : if (( $unlock == 1 )); then...
Bien vu ! Grâce à toi je me suis rappelé ces opérateurs assez barbares en Bash (-eq, -nq...) qui à l'époque m'ont rapidement fait migrer faire d'autres langages de script (la facilité, désolé). C'est mieux ?
ligne 63 tu présumes que la variable est correctement assignée sans le vérifier.
En effet. J'imagine que la bonne pratique serait de vérifier la saisie de l'utilisateur (quelque part dans la boucle d'options au -s ?).
je n'aime pas l'idée de répéter grep sur les mêmes données.
je n'ai pas d'exemples de sortie d'isoinfo, donc je me demande si on ne pourrais pas faire ça en une seule passe, avec sed, peut-être....
Là je veux bien une petite piste. Je n'aime pas non plus cette approche mais si ça peut te rassurer (ou pas), j'ai fait pire avant : je stockais le résultat dans un fichier temporaire car j'ignorais comment traiter du multiligne dans une variable...
Voici un exemple de sortie
CD-ROM is in ISO 9660 format
System id:
Volume id: WHISPER_OF_THE_HEART
Volume set id: UNDEFINED
Publisher id:
Data preparer id:
Application id:
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 3380394
NO Joliet present
**BAD RRVERSION (0)
NO Rock Ridge present
tu modifies globalement LC_NUMERIC pour la resstaurer tout de suite, quand tu pourrais la définir localement pour la commande qui l'utilise
LC_NUMERIC=C printf -v taille_Go '%.2f' $(echo "$taille_octets/10^9" | bc -l)
ou plus simplement :
taille_Go=$(echo "go=$taille_octets / 10^9; scale=2; print go/1,\"\n\"" | bc -l)
Oui, ça me plaisait moyen cette idée et dans d'autres langage de script, ce genre de truc n'avait une portée que dans l'environnement d'execution. Ici j'imagine que ça touche tout le système. Donc vraiment pas une bonne idée. Après en terme de lisibilité, la seconde me retourne les neurones ! Mais je crois l'avoir comprise.
Merci ! J'ai corrigé tout ceci sur ce commit.
Dernière modification par Chmilblick (Le 04/07/2022, à 09:06)
Hors ligne
#4 Le 04/07/2022, à 13:28
- Watael
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
j'imagine que ça touche tout le système
non, uniquement l'environnement du script, mais, comme je l'ai montré avec la seconde version du calcul, ce n'est pas nécessaire.
je regarderai ce soir ce qu'on peut faire pour le traitement de isoinfo.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 04/07/2022, à 15:44
- serged
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
Perso, je crée des copies de DVD avec K9copy.
Le projet étant abandonné, puis repris, il faut le compiler et tout, ce qui n'est pas évident. Mais c'est tout ce que j'ai trouvé...
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
En ligne
#6 Le 04/07/2022, à 17:11
- Watael
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
pour traiter isoinfo en une passe :
readarray -t infoISO < <(isoinfo -d -i "$lecteur" | grep -Po '^(Volume (id|size is)|Logical block)[^:]*: \K.*')
par souci de clarté et pour rester cohérent avec la suite du script sans avoir à la modifier, on peut assigner des variables dont le nom sera évocateur de ce qu'elles contiennent :
nom=${infoISO[0]}
taille_blocs=${infoISO[1]}
nb_blocs=${infoISO[2]}
exit donc isoinfo_rez, et bienvenue à infoISO.
Dernière modification par Watael (Le 04/07/2022, à 21:32)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 05/07/2022, à 06:57
- serged
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
Pour tes problèmes de VO / VF, tu peux sauvegarder en MKV (avec handbrake, par exemple), qui permet d'inclure plusieurs pistes son et plusieurs pistes sous-titre, lisibles avec VLC notamment.
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
En ligne
#8 Le 07/07/2022, à 11:54
- Chmilblick
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
Pour tes problèmes de VO / VF, tu peux sauvegarder en MKV (avec handbrake, par exemple), qui permet d'inclure plusieurs pistes son et plusieurs pistes sous-titre, lisibles avec VLC notamment.
Oui, en effet. Ceci est également possible en .m4v. Cependant, cette méthode correspond mieux à mon besoin actuelle car :
Aucun choix à faire. Il m'arrive régulièrement de faire erreur en choisissant la piste audio. Par exemple, il arrive que ce soit celle des commentaires des réalisateurs. Elles peuvent d'ailleurs parfois être mal taguées sur le DVD. Quoi qu'il arrive, lorsque je convertis un DVD avec Handbrake, je suis presque toujours obligé de faire de petits réglages et vérifications. Là mon idée avant de partir de vacances est d'importer le tout en masse (c'est le cas de le dire) sans avoir aucune vérification à effectuer ni aucun choix à faire.
Parallèlisation. Je peux réaliser les importations des DVD en parallèle : nous avons 3 lecteurs DVD USB à la maison. Alors que pour importer via Handbrake, c'est l'un après l'autre (et vu ma machine, j'en ai en général pour 1h par DVD avec mes préréglages).
Facilité pour importer des séries. Pour les séries c'est pénible avec Handbrake (surtout celles avec plein de petits épisodes de 10 min, comme certains petits dessins animés dont les enfants raffolent) : il faut prévoir manuellement un job pour chaque épisode dans Handbrake (je n'ai pas trouvé comment le faire d'un coup). De plus, la continuité entre épisodes est cassée (il faut faire une liste de lecture dans VLC a posteriori).
Faible consommation de CPU. Dernier petit bonus : le processus d'importation ne consommant pratiquement aucune ressource (j'en importe d'ailleurs là 3 en même temps, avec une charge CPU globale < 10%) je peux continuer à utiliser ma machine (et dans le cas présent, j'en ai besoin pour d'autres taches).
Il m'arrive de convertir via Handbrake. Le fait d'avoir déjà l'ISO sur le disque me permet de le faire pour plusieurs (par lot de 10 par exemple) la nuit, lorsque je n'utilise pas ma machine. Je le réalise pour des DVD que l'on revoit régulièrement (les enfants encore... ils ont des passions fixes pour certaines histoires) et que je laisse directement sur le disque interne du PC (qui est limité).
Dernière modification par Chmilblick (Le 07/07/2022, à 12:13)
Hors ligne
#9 Le 07/07/2022, à 12:04
- Chmilblick
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
pour traiter isoinfo en une passe :
readarray -t infoISO < <(isoinfo -d -i "$lecteur" | grep -Po '^(Volume (id|size is)|Logical block)[^:]*: \K.*')
Vraiment intéressant. Je découvre l'utilisation des array en Bash. Cependant, j'ai un doute sur la lisibilité du code par rapport à l'existant. Le code que tu proposes est clairement plus compact, certainement plus élégant et virtuose mais j'ai personnellement plus de mal à le lire. La Regex est relativelement simple à lire mais on ne voit plus d'un coup d'oeil ce que la ligne fait. Est ce que la méthode que j'utilise te parait poser des risques ou est-ce une mauvaise pratique que de faire plusieurs grep ?
Dernière modification par Chmilblick (Le 07/07/2022, à 12:07)
Hors ligne
#10 Le 07/07/2022, à 14:34
- Watael
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
plus il y a de commandes externes, plus le script est lent, donc, quand je peux éviter de le faire piétiner...
on ne voit plus d'un coup d'oeil ce que la ligne fait
tu peux ajouter un commentaire, pour l'expliciter.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 16/07/2022, à 06:57
- Funix
Re : Script d'import de DVD Vidéo vers ISO (avec gestion restriction DVD)
il n'y a pas que mkv ou .m4v pour gérer plusieurs sous titres ou langues, le conteneur mp4 le permet également, perso j'utilise handbrake, ça va générer un fichier bien moins gros qu'un iso
FUNIX - https://www.funix.org
Mettez un pingouin dans votre PC
Blog - https://olivier.hoarau.org
Hors ligne