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

#326 19-06-2019 09:35:23

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 :

Il y a un truc qui me chagrine avec ta modification. Je teste dans la journée .


Il me faudrait le retour de la commande :


cat /proc/mounts
 


quand un dvd est introduit dans le lecteur. Je ne sais pas trop comment
tu peux arriver à lire quelque chose dans « /run/media/$USER/$TITLE ».
Chez moi je n'ai déjà pas « /run/media ».


Sinon tu peux me dire ce qui te chagrine plus précisément, car le test semble
fonctionner. La seule chose c'est qu'il faudrait rajouter un système pour savoir
si le dvd monté est vraiment un dvd vidéo.

Dernière modification par enicar (19-06-2019 10:16:08)

Hors ligne

#327 19-06-2019 10:38:00

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, pour arrêter le script quand il n'y a pas de dvd vidéo y a un
dvd de données,  je propose de remplacer :


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


par :


## LABEL DU DVD-VIDÉO & NOMBRE TOTAL DE TITRES SUR CELUI-CI
TITLE=$(lsdvd "$DEVICE" | awk 'NR == 1 {print $3; exit}')
if [[ -z "$TITLE" ]]; then
    echo "Pas de dvd vidéo trouvé : abandon"
    exit 0
fi
TITLE_COUNT=$(lsdvd "$DEVICE" | grep -c '^Title: ')
 


J'ai juste rajouté un test sur la variable TITLE, si cette variable
est vide, c'est qu'il n'y a pas de dvd vidéo. Je suppose qu'un dvd
vidéo sans titre n'existe pas. Mais est-ce vrai ?

D'ailleurs, j'ai une autre idée. Dans le cas où plusieurs dvd ont été
détecté, il doit être possible de savoir si seulement un des deux est
un dvd vidéo (au cas où il y aurait un dvd de données et un dvd
vidéo).

Dernière modification par enicar (19-06-2019 10:42:42)

Hors ligne

#328 19-06-2019 13:10:06

Anonyme
Invité

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

enicar a écrit :


Il me faudrait le retour de la commande :


cat /proc/mounts
 




/dev/sr0 /run/media/patrick/SLEEPLESS_IN_SEATTLE udf ro,nosuid,nodev,relatime,uid=1000,gid=998,iocharset=utf8 0 0
/dev/sr1 /run/media/patrick/X17-59479 udf ro,nosuid,nodev,relatime,uid=1000,gid=998,iocharset=utf8 0 0
 



enicar a écrit :


quand un dvd est introduit dans le lecteur. Je ne sais pas trop comment
tu peux arriver à lire quelque chose dans « /run/media/$USER/$TITLE ».
Chez moi je n'ai déjà pas « /run/media ».



C'est bizarre car moi j'ai bien mon dvd qui se monte dans un dossier de nom title avec son sous-dossier VIDEO_TS

ls /run/media/patrick/SLEEPLESS_IN_SEATTLE



VIDEO_TS



Non le seul truc qui me chagrinait c'était un DVD-vidéo  + un DVD-Rom et que le script m'indique :

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


Il m'avait semblé que mon script partait en encodage si la formule DVD-vidéo  + un DVD-Rom était de ce type.
Ma vieille formule et ton amélioration ne pose donc pas de problème sur le fonctionnement. La tienne rend le script plus portable wink


enicar a écrit :

La seule chose c'est qu'il faudrait rajouter un système pour savoir
si le dvd monté est vraiment un dvd vidéo.



ça fait un momment que je cherche cette astuce.

Dernière modification par Anonyme (19-06-2019 13:17:06)

#329 19-06-2019 13:14:57

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 :

Non le seul truc qui me chagrinait c'était un DVD-vidéo  + un DVD-Rom et que le script m'indique :


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


Je pense que ta version faisait la même chose. C'est quelque chose que l'on peut améliorer.
Ça n'est pas forcément très compliqué.

Hors ligne

#330 19-06-2019 13:19:04

Anonyme
Invité

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

J'ai pas testé ton post 327. J'essaie.

#331 19-06-2019 13:21:20

Anonyme
Invité

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

Dis, et encoder les 2 dvd-vidéo en même temps ??? out.gif

Dernière modification par Anonyme (19-06-2019 20:24:36)

#332 19-06-2019 13:32:08

Anonyme
Invité

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

Post 327 :

Sans ta modification :


[patrick@PC1 Desktop]$ ./318
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed
libdvdread: Can't open file VIDEO_TS.BUP.
Can't open main ifo!
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed
libdvdread: Can't open file VIDEO_TS.BUP.
Can't open main ifo!
[patrick@PC1 Desktop]$
 



Avec ta modification :


[patrick@PC1 Desktop]$ ./318
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed
libdvdread: Can't open file VIDEO_TS.BUP.
Can't open main ifo!
Pas de dvd vidéo trouvé : abandon
[patrick@PC1 Desktop]$

On enlève la répétition des messages
 

#333 19-06-2019 13:33:33

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'ai eu une autre idée pour TITLE et TITLE_COUNT.
Je me disais qu'il était dommage d'appeler deux fois « lsdvd $DEVICE ».
Ceci dit ce n'est pas grave non plus. Mais j'ai mis au point une
solution en pur bash (sans awk ni grep).
Nous avons :


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


et je propose :


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

unset num regexp
 


Ça consiste à lire la sortie de « lsdvd $DEVICE » une seule fois
et à fixer les variables en passant. Pour extraire le titre
du dvd, je me sers de l'expansion de variable de bash. Ici je demande
juste de supprimer au début de ligne tout caratère (*) suivit de « : »
et d'un espace uniquement sur la première ligne.
Sinon je regarde avec une expression rationnelle de bash si la ligne
contient le motif « ^Title: », si oui j'incrémente la variable
TITLE_COUNT (précédemment initialisée à zéro).
Je ne sais pas si ça vaut le coup… Ça fait pas mal de code.
En plus ça ne fonctionnera pas avec des vieilles versions de bash
à cause de la regexp (je ne sais plus dans quelle version ça a été
introduit).

Hors ligne

#334 19-06-2019 13:40: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)

Anonyme a écrit :

Dis et encoder les 2 dvd-vidéo en même temps ??? out.gif


Je m'y attendais un peu lol
Et en plus ça doit être possible. Mais ça demanderait des
modifications du script pas banales. Je ne sais pas comment il faudrait
s'y prendre.

Hors ligne

#335 19-06-2019 13:44:13

Anonyme
Invité

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

enicar a écrit :

J'ai eu une autre idée pour TITLE et TITLE_COUNT.
Je me disais qu'il était dommage d'appeler deux fois « lsdvd $DEVICE ».
Ceci dit ce n'est pas grave non plus. Mais j'ai mis au point une
solution en pur bash (sans awk ni grep).
Nous avons :


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


et je propose :


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

unset num regexp
 


Ça consiste à lire la sortie de « lsdvd $DEVICE » une seule fois
et à fixer les variables en passant. Pour extraire le titre
du dvd, je me sers de l'expansion de variable de bash. Ici je demande
juste de supprimer au début de ligne tout caratère (*) suivit de « : »
et d'un espace uniquement sur la première ligne.
Sinon je regarde avec une expression rationnelle de bash si la ligne
contient le motif « ^Title: », si oui j'incrémente la variable
TITLE_COUNT (précédemment initialisée à zéro).
Je ne sais pas si ça vaut le coup… Ça fait pas mal de code.
En plus ça ne fonctionnera pas avec des vieilles versions de bash
à cause de la regexp (je ne sais plus dans quelle version ça a été
introduit).



SUR UN DVD-ROM :


[patrick@PC1 Desktop]$ ./318
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed
libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed
libdvdread: Can't open file VIDEO_TS.BUP.
Can't open main ifo!
 



AVEC UN SEUL DVD-VIDEO :


[patrick@PC1 Desktop]$ ./318
/home/patrick/Desktop/SLEEPLESS_IN_SEATTLE n'existe pas !
Création Du Dossier /home/patrick/Desktop/SLEEPLESS_IN_SEATTLE
MPlayer SVN-r38139 (C) 2000-2019 MPlayer Team
225 audio & 465 video codecs
....
 




AVEC UN MIX:


[patrick@PC1 Desktop]$ ./318
Aucun DVD-Vidéo ou 2 DVD-Vidéos/DVD-ROM ... dans différents lecteurs ?
 



wink

#336 19-06-2019 13:45:56

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

Dis et encoder les 2 dvd-vidéo en même temps ??? https://debian-facile.org/img/smilies/xtras/out.gif


Je m'y attendais un peu lol
Et en plus ça doit être possible. Mais ça demanderait des
modifications du script pas banales. Je ne sais pas comment il faudrait
s'y prendre.



Il y a un gars qui a pontu le truc. Une tour avec une dizaine de lecteurs. J'essaierai de retrouver le lien.

EDIT: je ne sais pas pourquoi, je suis en train de penser à quelqu'un en éditant ce message big_smile

Dernière modification par Anonyme (19-06-2019 13:48:22)

#337 19-06-2019 13:52:36

Anonyme
Invité

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

Dis moi, c'est peut-être bête, mais on ne pourrait pas faire un truc avec simplement VIDEO_TS ?

un VIDEO_TS
deux VIDEO_TS 
pas de VIDEO_TS


Quoique non, j'y avais pensé mais le problème était :


Si plein de VIDEO_TS  sur un dique dur hmm

Dernière modification par Anonyme (19-06-2019 13:54:39)

#338 19-06-2019 13:57: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 :

Dis moi, c'est peut-être bête, mais on ne pourrait pas faire un truc avec simplement VIDEO_TS ?


Non ce n'est pas bête, vu que le dvd doit être monté.  Je fais une pause repas et
je regarde après.

Hors ligne

#339 19-06-2019 17:58:20

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)

Un premier jet pour pouvoir utiliser le premier dvd vidéo trouvé.
C'est un script de test :


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

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

for dev in "${BLKID[@]}"; do
    mnt=$(awk "/${dev//\//\\\/}/ { print \$2 }" </proc/mounts)
    [[ -z "$mnt" ]] && continue
    if [[ -d "$mnt/VIDEO_TS" ]]; then
        DEVICE="$dev"
        MOUNT_POINT="$mnt"
        break
    fi
done
unset dev mnt

echo "BLKID: " "${BLKID[@]}"
unset BLKID
echo "DEVICE: $DEVICE"
echo "MOUNT_POINT: $MOUNT_POINT"

if [[ -z "$MOUNT_POINT" ]]; then
    echo "Aucun dvd video n'est monté : abandon"
    exit 0
fi

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

unset num regexp
echo "TITLE: $TITLE"
echo "TITLE_COUNT: $TITLE_COUNT"

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

echo "Proceed..."
 


Voilà, tu peux tester ce script et me dire ce qu'il renvoit, stp ?

Hors ligne

#340 19-06-2019 19:18:54

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)

Second jet qui ne fait le reste que si 1 et 1 seul dvd vidéo est
monté.  Comme précédemment il s'agit juste d'un extrait pour tester :


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

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

idx=0
for dev in "${BLKID[@]}"; do
    mnt=$(awk "/${dev//\//\\\/}/ { print \$2 }" </proc/mounts)
    [[ -z "$mnt" ]] && continue
    if [[ -f "$mnt/VIDEO_TS/VIDEO_TS.IFO" ]]; then
        DEVICES[$idx]="$dev"
        MOUNT_POINTS[$idx]="$mnt"
        idx=$((idx+1))
    fi
done

echo "BLKID: " "${BLKID[@]}"
echo "DEVICES: " "${DEVICES[@]}"
echo "MOUNT_POINTS: " "${MOUNT_POINTS[@]}"

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

DEVICE=${DEVICES[0]}
MOUNT_POINT=${MOUNT_POINTS[0]}
echo "DEVICE: $DEVICE"
echo "MOUNT_POINT: $MOUNT_POINT"

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

unset num regexp dev mnt idx BLKID DEVICES MOUNT_POINTS

echo "TITLE: $TITLE"
echo "TITLE_COUNT: $TITLE_COUNT"

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

echo "Proceed..."
 


Celui-ci se comporte plus comme ce que tu voulais. Tu me diras si ça
marche, comme d'habitude.

Hors ligne

#341 19-06-2019 19:40:05

Anonyme
Invité

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

Je suis en test sur le 340 wink

#342 19-06-2019 20:09:02

Anonyme
Invité

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

Le rapport :

UN DVD-VIDEO dans mon lecteur interne + externe vide:

[patrick@PC1 Desktop]$ ./FORMULE
BLKID:  /dev/sr1
DEVICES:  /dev/sr1
MOUNT_POINTS:  /run/media/patrick/JOYEUX_NOEL
DEVICE: /dev/sr1
MOUNT_POINT: /run/media/patrick/JOYEUX_NOEL
TITLE: JOYEUX_NOEL
TITLE_COUNT: 5
Proceed...
[patrick@PC1 Desktop]$




Je charge un DVD-ROM dans le lecteur interne tout en laissant le DVD-VIDEO dans le lecteur principal :

[patrick@PC1 Desktop]$ ./FORMULE
BLKID:  /dev/sr0 /dev/sr1
DEVICES:  /dev/sr1
MOUNT_POINTS:  /run/media/patrick/JOYEUX_NOEL
DEVICE: /dev/sr1
MOUNT_POINT: /run/media/patrick/JOYEUX_NOEL
TITLE: JOYEUX_NOEL
TITLE_COUNT: 5
Proceed...
[patrick@PC1 Desktop]$




Un DVD-VIDEO dans chaque lecteurs :

[patrick@PC1 Desktop]$ ./FORMULE
BLKID:  /dev/sr0 /dev/sr1
DEVICES:  /dev/sr0 /dev/sr1
MOUNT_POINTS:  /run/media/patrick/JOYEUX_NOEL /run/media/patrick/SLEEPLESS_IN_SEATTLE
Deux dvd video ou plus détectés : Abandon
[patrick@PC1 Desktop]$




Un DVD-VIDEO interne + un CD-AUDIO externe

[patrick@PC1 Desktop]$ ./FORMULE
BLKID:  /dev/sr1
DEVICES:  /dev/sr1
MOUNT_POINTS:  /run/media/patrick/SLEEPLESS_IN_SEATTLE
DEVICE: /dev/sr1
MOUNT_POINT: /run/media/patrick/SLEEPLESS_IN_SEATTLE
TITLE: SLEEPLESS_IN_SEATTLE
TITLE_COUNT: 3
Proceed...
[patrick@PC1 Desktop]$




Rien dans les lecteurs :

[patrick@PC1 Desktop]$ ./FORMULE
Aucun DVD trouvé: abandon
[patrick@PC1 Desktop]$



C'est parfait smile

#343 19-06-2019 20:14:17

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 parfait smile


Bon alors, je l'intègre au script sans les echo de débogage wink

Hors ligne

#344 19-06-2019 20:16:29

Anonyme
Invité

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

Oui,

Tu postes le script aussi qu'on lui donne le numéro du post wink

EDIT: Pour dire que le test au 339 fonctionnait aussi wink

Dernière modification par Anonyme (19-06-2019 20:20:37)

#345 19-06-2019 20:19: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)

Ok, il faut que je fasse une fusion de ma version avec celle que j'avais postée.

Dernière modification par enicar (19-06-2019 20:19:53)

Hors ligne

#346 19-06-2019 20:22:25

Anonyme
Invité

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

Je peux virer mon lecteur externe ? Car il me fout le boxon.

Dernière modification par Anonyme (19-06-2019 20:22:47)

#347 19-06-2019 20:30:40

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)

Voilà, c'est fait :


#!/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
##############################################################################################
# Modifications par enicar 09-19/06/2019
##############################################################################################

declare -a MPLAYER_IDENTIFY
declare -a LSDVD_X

mplayer_identify () {
    if [[  "${#MPLAYER_IDENTIFY[@]}" -eq 0 ]]; then
        mapfile MPLAYER_IDENTIFY < \
                <(mplayer -noconfig all -nocache -vo null -ao null -frames 0 \
                          -identify -dvd-device "$DEVICE" dvd://"$1" 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[@]}"
}

merge_chapters () {
    local output="$2"
    dvdxchap -t  "$1" "$DEVICE" > "$FOLDER/$1-$TITLE-CHAPTERS.txt"
    mkvmerge "$FOLDER/$1-$TITLE.mkv" --chapters "$FOLDER/$1-$TITLE-CHAPTERS.txt" \
             -o "$output"

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

encode_sidfr_and_merge () {
    local output="$2"
    for n in $SIDFR; do
        mencoder -dvd-device "$DEVICE" "dvd://$1" \
                 -nosound -ovc copy -force-avi-aspect "$RATIO" \
                 -o /dev/null -ifo "$MOUNT_POINT/VIDEO_TS/VTS_01_0.IFO" \
                 -sid "$n" -vobsubout "$FOLDER/$i-vobsubs-fr" -vobsuboutindex "$n"
    done

    mkvmerge "$FOLDER/$1-$TITLE+CHAPTERS.mkv" -a fre --default-language fr \
             "$FOLDER"/*.idx -o "$output"
}

menage () {
    rm -f "$FOLDER"/*.idx
    rm -f "$FOLDER"/*.sub
    rm -f "$FOLDER/$1-$TITLE+CHAPTERS.mkv"
}


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

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

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

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

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

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

unset regexp dev mnt idx BLKID DEVICES MOUNT_POINTS

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

echo "Proceed..."

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
    MPLAYER_IDENTIFY=()
    LSDVD_X=()
    ## TITRES D'UNE DURÉE DE PLUS DE .... SECONDES [ ICI, 1200 SECONDES = 20 MINUTES]
    #LENGTH=$(mplayer_identify "$i" | grep ID_LENGTH | sed -E 's/.*=([0-9]*)/\1/' | sed 's/\..*//')
    LENGTH=$(mplayer_identify "$i" |sed -E -n 's/^.*ID_LENGTH=([0-9]+).*$/\1/p')
    LIMIT=1200
    [[ "$LENGTH" -le "$LIMIT" ]] && continue

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

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

    COUNT_LPCM=$(lsdvd_x "$i" |grep -c 'lpcm')
    COUNT_AC3_DTS_MPEG1=$(lsdvd_x "$i" | grep -c -E 'ac3,|dts,|mpeg1,')

    # MAP_ID_STREAMS=$(lsdvd_x "$i" |grep "Audio:" | \
    #                     sed -E -n -e 's/.*(0x)/\1/p' |sed -e 's/c/1c/g' | \
    #                     awk '/0x/{gsub (/^/,"-map i:")}1')
    MAP_ID_STREAMS=$(lsdvd_x "$i" |sed -E -n '/Audio:/s/.*(0x)/\1/p' | \
                         awk '{ gsub(/c/, "1c") }
                              /0x/ {gsub (/^/,"-map i:")}
                              { print $0 }'
)

    # 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')
    MAP_ID_STREAMS_LPCM=$(lsdvd_x "$i" | sed -n -E '/lpcm/s/.*(0x)/\1/p' | \
                              awk '{ gsub(/c/, "1c") }
                                   /0x/ { gsub (/^/,"-map i:")}
                                   { print $0 }'
)

    # 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}')

    # SIDFR=$(lsdvd_x "$i" |awk '/Subtitle:/ && /Language: fr/ { sub(/.$/, "", $2); print $2 }' | \
    #             awk 'BEGIN { RS="[^0-9]"; OFS=""; ORS=""; } {if(length($0)) {print ($0-1);}print RT}')
    SIDFR=$(lsdvd_x "$i" |awk '/Subtitle:/ && /Language: fr/ { sub(/,$/ ,"", $2);
                                     if ($2 ~ /^[0-9]+$/) print (--$2) }'
)

    # COUNT_SID_FR=$(mplayer_identify "$i" |grep "subtitle ( sid ):" | \
    #                    grep -c "language: fr")
    COUNT_SID_FR=$(echo "$SIDFR" |wc -w)

    RATIO=$(lsdvd_x "$i" | \
                awk 'NR <= 3 && /Aspect ratio:/ {sub(/\//, ":", $11); x = x " " $11}
                          END { sub(/.$/, "", x); print x}'
)

    # INFO_AC3_DTS_MPEG1=$(lsdvd_x "$i" |awk '/ac3,|dts,|mpeg1,/  {printf ""$4","}'  | \
    #                         sed -e 's/,*$//g')
    INFO_AC3_DTS_MPEG1=$(lsdvd_x "$i" | \
                awk '/ac3,|dts,|mpeg1,/  { x = x $4 ","}
                    END { sub(/,*$/, "", x); print x }'
)

    INFO_LPCM=$(lsdvd_x "$i" | awk '/lpcm/ { print $4 }')

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

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

    ## 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"
        merge_chapters "$i" "$FOLDER/$i-$TITLE+CHAPTERS.mkv"
        encode_sidfr_and_merge "$i" "$FOLDER/$i-$TITLE-[Language:$INFO_AC3_DTS_MPEG1]+SUBVF.mkv"
        menage "$i"

    ## 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"
        merge_chapters "$i" "$FOLDER/$i-$TITLE-[Language:$INFO_LPCM].mkv"

    ## 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"
        merge_chapters "$i" "$FOLDER/$i-$TITLE+CHAPTERS.mkv"
        encode_sidfr_and_merge "$i" "$FOLDER/$i-$TITLE-[Language:$INFO_LPCM]+SUBVF.mkv"
        menage "$i"

    ## 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"
        merge_chapters "$i" "$FOLDER/$i-$TITLE-[Language:$INFO_AC3_DTS_MPEG1].mkv"
    fi
done
 


Ne soit pas étonné, si ça ne marche pas, j'ai intégré d'autres
modifications. Toutefois, ça devrait aller, mais le suspense est à son
comble wink

EDIT :Script corrigé wink
EDIT2 : Détection du point de montage affiné pour
gérer les noms de dossiers avec des espaces (l'ennemi des shell
scripts). Je vais réfléchir pour trouver une meilleure méthode…

Dernière modification par enicar (19-06-2019 23:51:28)

Hors ligne

#348 19-06-2019 20:34: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 :

Je peux virer mon lecteur externe ? Car il me fout le boxon.


Tu fais comme tu veux, c'était juste pour tester la partie qui gère le nombre
de dvd. À priori, cette partie fonctionne.

Hors ligne

#349 19-06-2019 20:36:50

Anonyme
Invité

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

enicar a écrit :

Anonyme a écrit :

Je peux virer mon lecteur externe ? Car il me fout le boxon.


Tu fais comme tu veux, c'était juste pour tester la partie qui gère le nombre
de dvd. À priori, cette partie fonctionne.



Je vire et ..................... je teste le 347  big_smile

EDIT : Je vire les filtres et je passe à 30 secondes pour prendre un max de titres sur le DVD-VIDEO
Tests en cours ... tongue

Dernière modification par Anonyme (19-06-2019 20:47:31)

#350 19-06-2019 20:52:59

Anonyme
Invité

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

Ha, sur un titre, je dis bien un titre sur un DVD-vIDEO je ce message :


./347: ligne 55: /home/patrick/Desktop/JOYEUX_NOEL//home/patrick/Desktop/JOYEUX_NOEL/2-JOYEUX_NOEL-[Language:xx].mkv-JOYEUX_NOEL-CHAPTERS.txt: Aucun fichier ou dossier de ce type
mkvmerge v34.0.0 ('Sight and Seen') 64-bit
Erreur : pas de nom de fichier destination fourni.

mkvmerge -o out [global options] [options1] <file1> [@option-file.json] …

 Options globales :
  -v, --verbose            Augmenter la verbosité.
  -q, --quiet              Supprimer les messages d'état.
  -o, --output cible       Écrit vers le fichier « cible ».
  -w, --webm               Crée un fichier conforme WebM.
  --title <title>          Le titre pour ce fichier destination.
  --global-tags <file>     Lit les balises globales depuis un fichier XML.


 Gestion des chapitres :
  --chapters <file>        Lit les informations de chapitres du fichier.
  --chapter-language <lng> Définit la langue dans les entrées de chapitres.
  --chapter-charset <cset> Jeu de caractères pour un fichier de
chapitres simple.
  --chapter-sync <d[,o[/p]]>
                           Synchronise, ajuste les horodatages de chapitres
                           de « d » ms.
                           « o/p » : ajuste les horodatages en multipliant par
                           « o/p » pour régler les décalages linéaires. « p » est 1 par
                           défault si omis. « o » et « p » peuvent être des nombres à
                           virgule flottante.
  --cue-chapter-name-format <format>
                           Modèle de conversion des entrées de la feuille
                           de montage CUE en noms de chapitres.
  --default-language <lng> Utilise cette langue pour toutes les pistes
                           sauf si supplantée par l'option --language.
  --generate-chapters <mode>
                           Génère automatiquement les chapitres selon le
                           mode (« when-appending » ou « interval:<duration> »).
  --generate-chapters-name-template <template>
                           Modèle pour les nouveaux noms de chapitres générés
                           (par défaut : « Chapitre <NUM:2> »).

 Gestion des informations de segment :
  --segmentinfo <file>     Lit les informations de segment depuis le fichier.
  --segment-uid <SID1,[SID2…]>
                           Fixe les UID des segments à SID1, SID2, etc.

Contrôle général en sortie (options globales avancées) :
  --track-order <FileID1:TID1,FileID2:TID2,FileID3:TID3,...>
                           Une liste d'ID de fichiers et de pistes,
                           séparée par des virgules, qui contrôle
                           l'ordre des pistes dans le fichier de
                           destination.
  --cluster-length <n[ms]> Place au plus n blocs de données dans chaque grappe.
                           Si le nombre est suivi de « ms », place au plus
                           n millisecondes de données dans chaque grappe.
  --no-cues                N'écrit pas les données (l'index) CUE.
  --clusters-in-meta-seek  Écrit les métadonnées de positionnement pour les grappes.
  --no-date                N'écrit pas le champ « date » dans les entêtes d'informations de segment.
  --disable-lacing         Ne pas utiliser le laçage.
  --enable-durations       Active les durées de tous les blocs.
  --timestamp-scale <n>    Fixe le facteur d'échelle des horodatages à n.
  --disable-track-statistics-tags
                           N'écrit pas de balises avec les statistiques de piste.

 Scission, liage et concaténation des fichiers (options globales étendues) :
  --split <d[K,M,G]|HH:MM:SS|s>
                           Crée un nouveau fichier au bout de d octets
                           (ko, Mo, Go) ou d'un certain temps.
  --split timestamps:A[,B…]
                           Crée un nouveau fichier après chaque horodatage
                           A, B, etc.
  --split parts:start1-end1[,[+]start2-end2,…]
                           Conserve les intervalles d'horodatages de début-fin
                           dans les fichiers séparés ou ajoute au fichier
                           de l'intervalle précédent si préfixé par « + ».
  --split parts-frames:start1-end1[,[+]start2-end2,…]
                           Comme pour « parts », mais « startN »/« endN »
                           sont des numéros de trame/champ et non
                           des horodatages.
  --split frames:A[,B…]
                           Crée un fichier après chaque trame/champ A, B
                           etc.
  --split chapters:all|A[,B…]
                           Crée un fichier avant chaque chapitre (avec « all »)
                           ou avant les chapitres A, B, etc.
  --split-max-files <n>    Crée au plus n fichiers.
  --link                   Lie les fichiers scindés.
  --link-to-previous <SID> Lie le premier fichier au SID fourni.
  --link-to-next <SID>     Lie le dernier fichier au SID fourni.
  --append-to <QFID1:QTID1:ZFID1:ZTID1,QFID2:QTID2:ZFID2:ZTID2,…>
                           Liste d'ID de fichiers et de pistes séparés par une
                           virgule déterminant quelle piste d'un fichier est
                           concaténée à quelle autre du fichier précédent.
  --append-mode <file|track>
                           Détermine comment mkvmerge calcule les horodatages
                           lors de la concaténation de fichiers.
  <file1> + <file2>        Concatène file2 à file1.
  <file1> +<file2>         Identique à « <file1> + <file2> ».
  [ <file1> <file2> ]      Identique à « <file1> + <file2> ».
  = <file>                 Ne recherche pas et concatène les fichiers de
                           même nom de base mais de suffixe numérique différent.
  =<file>                  Identique à « = <file> ».
  ( <file1> <file2> )      Traite file1 et file2 comme s'ils étaient concaténés
en un seul fichier.

 Prise en charge des pièces jointes (options globales étendues) :
  --attachment-description <desc>
                           Description de la pièce jointe suivante.
  --attachment-mime-type <mime type>
                           Type MIME de la pièce jointe suivante.
  --attachment-name <name> Nom pour la pièce jointe suivante
qui doit être enregistré.
  --attach-file <file>     Crée une pièce jointe dans le
fichier Matroska.
  --attach-file-once <file>
                           Crée une pièce jointe dans le premier fichier Matroska écrit.

 Options pour chaque fichier source :
  -a, --audio-tracks <n,m,…>
                           Copie les pistes audio n, m, etc.
                           Par défaut : copie toutes les pistes audio.
  -A, --no-audio           Ne copie aucune piste audio de ce fichier.
  -d, --video-tracks <n,m,…>
                           Copie les pistes vidéo n, m, etc.
                           Par défaut : copie toutes les pistes vidéo.
  -D, --no-video           Ne copie aucune piste vidéo de ce fichier.
  -s, --subtitle-tracks <n,m,…>
                           Copie les pistes de sous-titres n, m, etc.
                           Par défaut : copie toutes les pistes de sous-titres.
  -S, --no-subtitles       Ne copie aucune piste de sous-titres de ce fichier.
  -b, --button-tracks <n,m,…>
                           Copie les pistes de boutons n, m, etc.
                           Par défaut : copie toutes les pistes de boutons.
  -B, --no-buttons         Ne copie aucune piste de boutons de ce fichier.
  -m, --attachments <n[:all|first],m[:all|first],...>
                           Copie les pièces jointes avec les IDs n, m, etc.
                           vers tous ou seulement le premier fichier
                           destination. Par défaut, copie toutes les
                           pièces jointes vers tous les fichiers
                           destination.
  -M, --no-attachments     Ne copie aucune pièce jointe de ce fichier source.
  -t, --tags <TID:name> Lit les balises pour la piste
                           depuis un fichier XML.
  --track-tags <n,m,…>   Copie les balises pour les pistes n, m, etc. Par
                           défaut, copie les balises pour toutes les pistes.
  -T, --no-track-tags      Ne copie pas les balises pour les pistes
                           du fichier source.
  --no-global-tags         Ne conserve pas les balises globales
                           du fichier source.
  --no-chapters            Ne conserve pas les chapitres du fichier source.
  -y, --sync <TID:d[,o[/p]]>
                           Synchronise, ajuste les horodatages
                           de la piste d'identifiant « TID » de « d » ms.
                           « o/p » ajuste les horodatages par multiplication
                           pour corriger les dérives linéaires.
                           « p » vaut 1 par défaut s'il est omis.
                           « o » et « p » peuvent être des nombres décimaux.
  --default-track <TID[:bool]>
                           Pose le signal « Piste par défaut » pour cette piste
                           ou l'oblige à ne pas être présente si bool est 0.
  --forced-track <TID[:bool]>
                           Pose le signal « Piste forcée » pour cette piste
                           ou l'oblige à ne pas être présente si bool est 0.
  --blockadd <TID:x>       Définit le nombre maximum de niveaux
                           supplémentaires de blocs pour cette piste.
  --track-name <TID:name>   Définit le nom d'une piste.
  --cues <TID:none|iframes|all>
                           Crée les entrées (index) CUE pour cette piste :
                           aucune, pour les trames I seules, pour toutes.
  --language <TID:lang>  Définit la langue pour la piste
                           (code ISO639-2, voir --list-languages).
  --aac-is-sbr <TID[:0|1]> La piste avec l'ID est de type HE-AAC/AAC+/SBR-AAC
                           ou pas. La valeur « :1 » peut être omise.
  --reduce-to-core <TID>   Ne conserve que le noyau des pistes audio prenant
                           en charge les extensions HD au lieu de copier à la fois
                           le noyau et les extensions.
  --remove-dialog-normalization-gain <TID>
                           Retire ou minimise le gain de normalisation des dialogues
                           en modifiant les entêtes de trame audio.
  --timestamps <TID:file> Lit les horodatages depuis un fichier.
  --default-duration <TID:Xs|ms|us|ns|tps>
                           Remplace la durée par défaut d'une piste par X.
                           X peut être un nombre décimal ou une fraction.
  --fix-bitstream-timing-information <TID[:bool]>
                           Ajuste la fréquence de trame ou de champ stockée
                           dans le flux vidéo sur la durée par défaut de la piste.
  --nalu-size-length <TID:n>
                           Contraint la taille de NALU à n octets avec
                           2 <= n <= 4, 4 étant la valeur par défaut.

 Options ne s'appliquant qu'aux pistes vidéo :
  -f, --fourcc <FOURCC>    Force la valeur spécifiée pour le FourCC.
                           Ne fonctionne qu'avec les pistes vidéo.
  --aspect-ratio <TID:f|a/b>
                           Définit les dimensions à l'écran (largeur et
                           hauteur) relatives au ratio d'aspect indiqué.
  --aspect-ratio-factor <TID:f|a/b>
                           Calcule d'abord le ratio d'aspect en multi-
                           pliant celui d'origine par ce facteur puis
                           en déduit les dimensions à l'écran.
  --display-dimensions <TID:width>x<height>
                           Définit explicitement les dimensions à l'écran.
  --cropping <TID:left,top,right,bottom>
                           Définit les paramètres de recadrage.
  --field-order <TID:n>    Définit le paramètre de l'ordre de tramage de la vidéo
                           (voir la documentation pour les valeurs correctes).
  --stereo-mode <TID:n|keyword>
                           Définit le paramètre de mode stéréo :
                           un nombre entre 0 et 14 ou un mot-clé
                           (liste complète dans la documentation).
  --colour-matrix-coefficients <TID:n>
                           Définit les coefficients de matrice de la vidéo utilisés pour
                           déduire les valeurs de luma et chroma depuis les couleurs  rouge, vert
                           et bleu primaires.
  --colour-bits-per-channel <TID:n>
                           Définit le nombre de bits codés pour un canal de
                           couleur. Une valeur de 0 indique que le nombre
                           n'est pas spécifié.
  --chroma-subsample <TID:hori,vert>
                           Le nombre de pixels à enlever dans les canaux Cr et Cb
                           pour chaque pixel non retiré horizontalement
                           et verticalement.
  --cb-subsample <TID:hori,vert>
                           Le nombre de pixels à retirer du canal Cb
                           pour chaque pixel non retiré horizontalement
                           et verticalement. Cela vient en addition de
                           --chroma-subsample.
  --chroma-siting <TID:hori,vert>
                            Comment la chroma is positionnée horizontalement/verticalement.
  --colour-range <TID:n>   Coupure selon les limites de couleurs.
  --colour-transfer-characteristics <TID:n>
                           Les caractéristiques de transfert de la vidéo.
  --colour-primaries <TID:n>
                           Les couleurs primaires de la vidéo.
  --max-content-light <TID:n>
                           Luminosité maximum d'un pixel unique en candelas
                           par mètre carré (cd/m²).
  --max-frame-light <TID:n>
                           Luminosité maximale par trame moyenne en candelas
                           par mètre carré (cd/m²).
  --chromaticity-coordinates <TID:red-x,red-y,green-x,green-y,blue-x,blue-y>
                           Coordonnées de la chromaticité Rouge/Vert/Bleu définie
                           selon CIE 1931.
  --white-colour-coordinates <TID:x,y>
                           Coordonnées de la chromaticité de la couleur blanche définie
                           selon CIE 1931.
  --max-luminance <TID:float>
                           Luminance maximale en candelas par mètre carré
                           (cd/m²).
  --min-luminance <TID:float>
                           Luminance minimale en candelas par mètre carré
                           (cd/m²).
  --projection-type <TID:method>
                           Méthode de projection utilisée (0–3).
  --projection-private <TID:data>
                           Données privées s'appliquant seulement à une projection
                           spécifique (en nombre hex).
  --projection-pose-yaw <TID:float>
                           Une rotation en lacet de la projection.
  --projection-pose-pitch <TID:float>
                           Une rotation en tangage de la projection.
  --projection-pose-roll <TID:float>
                           Une rotation en roulis de la projection.

 Options ne s'appliquant qu'aux pistes de sous-titres texte :
  --sub-charset <TID:charset>
                           Détermine le jeu de caractères des sous-titres
                           texte pour la conversion en UTF-8.

 Options ne s'appliquant qu'aux pistes de sous-titres VobSub :
  --compression <TID:mode>
                           Définit le mode de compression utilisé pour la
                           piste spécifiée (« aucun » ou « zlib »).


 Autres options :
  -i, --identify <file>    Affiche les informations sur le fichier source.
  -J <file>                Ceci est un alias commode pour
                           « --identification-format json --identify fichier ».

  -F, --identification-format <format>
                           Définit le format des résultats d'identification
                           (« text » ou « json » ; par défaut « text »).
  --probe-range-percentage <percent>
                           Définit la taille maximale à examiner pour les pistes en pourcentage
                           de la taille totale du fichier pour certains types de fichiers
                           (par défaut : 0.3).
  -l, --list-types         Types de fichiers source pris en charge par les listes.
  --list-languages         Liste toutes les langues ISO639 et leurs
                           codes ISO639-2.
  --capabilities           Liste les fonctions optionnelles avec lesquelles mkvmerge a été compilé.
  --priority <priority>    Définit la priorité d'exécution de mkvmerge.
  --ui-language <code>     Utilise la traduction en langue « code ».
  --command-line-charset <charset>
                           Jeu de caractères pour les chaînes de la ligne de commande.
  --output-charset <cset>  Présente les messages dans ce jeu de caractères.
  -r, --redirect-output <file>
                           Redirige tous les messages vers ce fichier.
  --flush-on-close         Transfert toutes les données cachées vers le
                         stockage en fermant un fichier ouvert en écriture.
  --abort-on-warnings      Abandonne le programme après le premier
                           avertissement.
  --debug <topic>          Active un rapport de débogage sur « sujet ».
  --engage <feature>       Active la fonction expérimentale « fonction ».
  @option-file.json        Lit des options supplémentaires de ligne de
                           commandes depuis le fichier JSON spécifié (voir la page du manuel).
  -h, --help               Affiche cette aide.
  -V, --version            Affiche les informations de version.


Lire la page d'aide ou la documentation HTML de mkvmerge.
Elle donne des explications détaillées qui ne se trouvent pas ici.

 

Pied de page des forums