Bonjour,
je vous propose ce script pour encoder tous les titres sur un DVD-vidéo avec HandBrakeCLI. (Le GUI Handbrake le fait, mais pas en automatique.)
Je ne compresse pas la vidéo. Je garde le même bitrate, que je prends en info sur chaque titre pour le porter dans la commande. Ainsi, je ne me pose plus la question du "mieux".
j'ai mis un style de comparateur "
lsdvd VS dvdnav" pour détecter des incohérences sur d'éventuelles bandes audios à "o ko"
Il sortira le mkv en français et ses soustitres fr. Si ce n'est pas possible, il le sortira en "VO" avec des sous-titres fr
J'ai choisi
nvenc_h265 mais comme je n'ai mis aucune option à part le bitrate automatique et mes filtres fétiches, on peut changer ce choix facilement.
Mais avec nvenc_h265 je suis à 300 fps d'encodage tout de même et 13 minutes de "RIP/encodage" sur un film de 1H06. Au niveau taille, c'est un peu plus petit que la taille originale. En qualité ... c'est mieux que l'original car ma combinaison de filtres est là pour ça.
Chez moi, ça passe sur tous mes dvd les plus durs.
Une option pour la sauvegarde du LPCM sur un DVD concert est présente dans ce script. Handbrake ne gère pas le direct copy sur un lpcm, il l'encode par défaut en aac. (C'est bien dommage)
Les chapitres, c'est lui qui gère. (Rien à rajouter)
Je ne retouche pas les couleurs. (pas de filtre hue)
## x264
## x264_10bit
## nvenc_h264
## x265
## x265_10bit
## x265_12bit
## nvenc_h265
## mpeg4
## mpeg2
## VP8
## VP9
## theora
Donc en résumé :
sont à adapter comme vous le voudrez.
Les paquets à installer :
apt install handbrake mplayer lsdvd xdg-user-dirs
Le script: (HandBrakeCLI_5)
#!/bin/bash
## Golgot200
## sudo pacman -S handbrake mplayer lsdvd xdg-user-dirs
## x264
## x264_10bit
## nvenc_h264
## x265
## x265_10bit
## x265_12bit
## nvenc_h265
## mpeg4
## mpeg2
## VP8
## VP9
## theora
PATH=$PATH:/sbin:/usr/sbin
## 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=$(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..."
UUID=$(blkid /dev/sr* | grep "UUID=" | awk '{print$2}')
DIR=$(xdg-user-dir DESKTOP)
FOLDER="$DIR/ARCHIVAGE_DVD/$TITLE-$UUID"
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, 2 seconde]
LENGTH=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | \
sed -E -n 's/^.*ID_LENGTH=([0-9]+).*$/\1/p')
LIMIT=2
[[ "$LENGTH" -le "$LIMIT" ]] && continue
## COMPARAISON ENTRE DVDNAV (INFO RÉEL) & LSDVD (INFO) SUR LA RÉALITÉ EXISTANTE DES STREAMS AUDIOS.
LAVF_STREAM_DVDNAV=$(mplayer -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | awk '/-aid/ { print $7 }' )
COUNT_LAVF_STREAM_DVDNAV=$(echo "$LAVF_STREAM_DVDNAV" |wc -w)
COUNT_AUDIO_LSDVD=$(lsdvd -a "$DEVICE" -t "$i" 2>/dev/null | grep -c "Audio:" )
## POUR N'AVOIR QUE LE FRANÇAIS.
AUDIO_FRENCH=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null | grep "Language: fr" | awk '{print$4}' )
COUNT_AUDIO_FRENCH=$(lsdvd -a "$DEVICE" -t "$i" 2> /dev/null |grep -c 'Language: fr')
AUDIO_LANG_LIST_FRENCH=$(echo $AUDIO_FRENCH | sed 's/[[:blank:]]/,/g')
BITRATE=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | grep "VIDEO:" | awk '{print$8}' | sed 's/\.[^ ]*/ /g')
## [ OPTION 1 ALL ]
## ICI, ON ÉVITERA UN MKV SANS AUDIO. STREAM(S) SIGNALÉ(S) FR MAIS D'UNE DURÉE NUL PAR RAPPORT AU(X) AUTRE(S) SUPPRIMÉES EN [ OPTION 2 ]
## EX : PLUTO T15 (fr null ===> eng seul valide) = OK
if [[ "$COUNT_LAVF_STREAM_DVDNAV" != "$COUNT_AUDIO_LSDVD" ]]; then
HandBrakeCLI --no-dvdnav \
--input $DEVICE --title $i \
--all-audio --all-subtitles --subtitle-lang-list fr \
-e nvenc_h265 -b $BITRATE \
--hqdn3d=y-spatial=1.5:cb-spatial=1.5:cr-spatial=1.5:y-temporal=4:cb-temporal=4:cr-temporal=4 --unsharp=y-strength=0.5:y-size=5:cb-strength=0.5:cb-size=5 \
--crop 0:0:0:0 \
--aencoder copy \
--output "$FOLDER/$i - $TITLE-[ OPTION 1 ALL ].mkv"
fi
## [ OPTION 2 ]
## QUE FRANÇAIS SI PRÉSENT OU AUTRES SI PAS LE CHOIX.
## SOUSTITRES FRANÇAIS DANS LES DEUX CAS.
## SANS AUDIO = OK
## ANY (UNKNOWN AUDIO) = OK
## LPCM ==> AAC = OK
if [[ "$COUNT_LAVF_STREAM_DVDNAV" == "$COUNT_AUDIO_LSDVD" ]]; then
HandBrakeCLI --no-dvdnav \
--input $DEVICE --title $i \
--all-audio --audio-lang-list "$AUDIO_LANG_LIST_FRENCH" --all-subtitles --subtitle-lang-list fr \
-e nvenc_h265 -b $BITRATE \
--hqdn3d=y-spatial=1.5:cb-spatial=1.5:cr-spatial=1.5:y-temporal=4:cb-temporal=4:cr-temporal=4 --unsharp=y-strength=0.5:y-size=5:cb-strength=0.5:cb-size=5 \
--crop 0:0:0:0 \
--aencoder copy \
--output "$FOLDER/$i - $TITLE-[ OPTION 2 ].mkv"
fi
## SAUVEGARDER UN LPCM EN WAVE D'UN DVD DE CONCERT LIVE.
AIDS_LPCM=$(lsdvd -a "$DEVICE" -t "$i" 2>/dev/null | awk '/lpcm|id:/ { print $22 }')
COUNT_AUDIO_LPCM=$(lsdvd -a "$DEVICE" -t "$i" 2>/dev/null | grep -c "lpcm" )
if [[ "$COUNT_AUDIO_LPCM" -ge "1" ]]; then
mkdir -p "$FOLDER/WAVE"
for n in $AIDS_LPCM; do
mplayer -noconfig all -nocache -benchmark -vc null -vo null \
-ao pcm:fast:file="$FOLDER/WAVE/[$i-($n)]-$TITLE.wav" \
-identify -dvd-device "$DEVICE" dvdnav://$i -ni -aid $n
done
fi
done



Voilà
Dernière modification par golgot200 (26-11-2019 20:21:00)