Debian-facile

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

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

#1 26-11-2019 17:02:54

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 4.19.77-1-lts & 5.3.1-arch1-1-ARCH
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Script HandBrakeCLI

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é :


LIMIT=2
nvenc_h265
 



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

Dernière modification par golgot200 (11-12-2019 09:08:34)

Hors ligne

Pied de page des forums