Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:bash:ffmpeg [27/04/2020 09:59] golgot200 [script - choix du titre et du bitrate] |
doc:programmation:bash:ffmpeg [28/04/2020 07:59] golgot200 [script - choix du titre et du bitrate] |
||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | script utilisant ffmpeg pour copier des dvd video | + | script utilisant ffmpeg pour copier des dvd video où en plus du titre, tu auras le choix du bitrate par défaut ("sans compression)" ou si tu ne veux pas, un autre choix te sera proposé pour le rentrer directement dans le terminal. |
===== Installation ===== | ===== Installation ===== | ||
Ligne 30: | Ligne 29: | ||
## golgot200 | ## golgot200 | ||
## Testeur smolski | ## Testeur smolski | ||
- | ## 24/04/2020 | + | ## 28/04/2020 |
+ | |||
+ | START_TIME=$(date +%s) | ||
Ligne 58: | Ligne 59: | ||
echo -e "\e[32mLes conditions sont réunies : On continue\e[0m" | echo -e "\e[32mLes conditions sont réunies : On continue\e[0m" | ||
- | TITLE=$(lsdvd "$DEVICE" | head -1 | awk '{print $3}') | + | TITLE=$(lsdvd /dev/sr0 | head -1 | awk '{print $3}') |
TITLE_COUNT=$(lsdvd "$DEVICE" | grep -c ^'Title: ') | TITLE_COUNT=$(lsdvd "$DEVICE" | grep -c ^'Title: ') | ||
Ligne 65: | Ligne 66: | ||
- | echo "Proceed..." | + | echo "Proceed..." |
- | echo -e "DVD-Vidéo : \e[32m$TITLE\e[0m" | + | echo -e "DVD-Vidéo : \e[32m$TITLE\e[0m" |
read -r -p "Ce nom convient-il ? [Y/n] " input | read -r -p "Ce nom convient-il ? [Y/n] " input | ||
- | echo "" | ||
case $input in | case $input in | ||
[yY][eE][sS]|[yY]) | [yY][eE][sS]|[yY]) | ||
- | echo -e "Réponse : \e[32mOui\e[0m" | + | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[32mOui\e[0m" |
- | + | echo "" | |
- | mkdir -p "$TITLE/IFOS" | + | mkdir -p "$TITLE/IFOS" |
- | mkdir -p "$TITLE/VOBSUBS" | + | mkdir -p "$TITLE/VOBSUBS" |
- | ;; | + | ;; |
[nN][oO]|[nN]) | [nN][oO]|[nN]) | ||
- | echo "" | + | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[33mNon\e[0m" |
- | echo -e "Réponse : \e[32mNon\e[0m" | + | read -r -p "Entrer un nouveau nom: " TITLE |
- | read -r -p "Entrer un nouveau nom: " TITLE | + | if [[ -z "$TITLE" ]]; then |
- | echo "" | + | echo "Invalid input..." |
- | mkdir -p "$TITLE/IFOS" | + | echo "Quit" |
- | mkdir -p "$TITLE/VOBSUBS" | + | exit 1 |
- | ;; | + | else |
+ | echo "" | ||
+ | mkdir -p "$TITLE/IFOS" | ||
+ | mkdir -p "$TITLE/VOBSUBS" | ||
+ | fi | ||
+ | ;; | ||
*) | *) | ||
echo "Invalid input..." | echo "Invalid input..." | ||
Ligne 97: | Ligne 102: | ||
+ | default_limit=-1 | ||
- | read -r -p "Garder le bitrate d'origine ? [Y/n] " input | + | |
- | echo "" | + | |
+ | echo -e "La limite est fixée pour encoder tous les titres." | ||
+ | read -r -p "Encoder tous les titres ? [Y/n] " input | ||
+ | case $input in | ||
+ | [yY][eE][sS]|[yY]) | ||
+ | |||
+ | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[32mOui, on encode tous les titres.\e[0m" | ||
+ | echo -e "$default_limit" >> "$TITLE/time_limit.txt" | ||
+ | echo "" | ||
+ | ;; | ||
+ | [nN][oO]|[nN]) | ||
+ | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[33mNon,\e[0m \e[32mje veux encoder que les titres d'une certaine durée.\e[0m" | ||
+ | read -r -p "Entrer une limite (ex:1800) en secondes: " time_limit | ||
+ | if [[ -z "$time_limit" ]]; then | ||
+ | echo "Invalid input..." | ||
+ | echo "Quit" | ||
+ | rm -r "$TITLE" | ||
+ | echo -e "Supression du dossier \e[32m$TITLE\e[0m" | ||
+ | exit 1 | ||
+ | else | ||
+ | times=$((time_limit / 60)) | ||
+ | echo -e "Seul les titres de \e[94m$times minutes\e[0m et plus seront pris en compte." | ||
+ | echo -e "$time_limit" >> "$TITLE/time_limit.txt" | ||
+ | echo "" | ||
+ | fi | ||
+ | ;; | ||
+ | *) | ||
+ | echo "Invalid input..." | ||
+ | echo "Quit" | ||
+ | rm -r "$TITLE" | ||
+ | echo -e "Supression du dossier \e[32m$TITLE\e[0m" | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | read -r -p "Conserver le bitrate d'origine ? [Y/n] " input | ||
case $input in | case $input in | ||
[yY][eE][sS]|[yY]) | [yY][eE][sS]|[yY]) | ||
- | echo -e "Réponse : \e[32mOui\e[0m" | + | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[32mOui\e[0m" |
for (( i=1; i<=TITLE_COUNT; i++ )) | for (( i=1; i<=TITLE_COUNT; i++ )) | ||
Ligne 109: | Ligne 154: | ||
BITRATE=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | \ | 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') | + | grep "VIDEO:" | awk '{print$8}' | sed 's/\.[^ ]*/ /g') |
- | echo -e "$BITRATE" >> "$TITLE/bitrate.txt" | + | echo -e "$BITRATE" >> "$TITLE/bitrate.txt" |
done | done | ||
;; | ;; | ||
[nN][oO]|[nN]) | [nN][oO]|[nN]) | ||
- | echo -e "Réponse : \e[32mNon\e[0m" | + | echo -e "\e[3;4;33mRéponse:\n\e[0m \e[33mNon\e[0m" |
- | read -r -p "Entrer un nouveau Bitrate: " newbitrate | + | read -r -p "Appliquer un nouveau Bitrate (ex 1500): " newbitrate |
- | + | if [[ -z "$newbitrate" ]]; then | |
- | for (( i=1; i<=TITLE_COUNT; i++ )) | + | echo "Invalid input..." |
- | do | + | echo "Quit" |
- | echo -e "$newbitrate" >> "$TITLE/bitrate.txt" | + | rm -r "$TITLE" |
- | done | + | echo -e "Supression du dossier \e[32m$TITLE\e[0m" |
- | ;; | + | exit 1 |
- | *) | + | else |
- | echo "Invalid input..." | + | for (( i=1; i<=TITLE_COUNT; i++ )) |
- | echo "Quit" | + | do |
- | rm -r "$TITLE" | + | echo -e "$newbitrate" >> "$TITLE/bitrate.txt" |
- | echo -e "Supression du dossier \e[32m$TITLE\e[0m" | + | done |
+ | fi ;; | ||
+ | *) | ||
+ | echo "Invalid input..." | ||
+ | echo "Quit" | ||
+ | rm -r "$TITLE" | ||
+ | echo -e "Supression du dossier \e[32m$TITLE\e[0m" | ||
exit 1 | exit 1 | ||
;; | ;; | ||
- | esac | + | esac |
Ligne 145: | Ligne 196: | ||
bitrate_k=$((bv/1))k | bitrate_k=$((bv/1))k | ||
bufsize_k=$((bv/2))k | bufsize_k=$((bv/2))k | ||
- | echo "" | ||
- | echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m" | ||
- | echo "Proceed..." | ||
- | |||
- | sleep 2 | ||
- | |||
LENGTH=$(mplayer -noconfig all -nocache -vo null -ao null -frames 0 -identify -dvd-device "$DEVICE" dvdnav://"$i" 2>/dev/null | \ | 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') | sed -E -n 's/^.*ID_LENGTH=([0-9]+).*$/\1/p') | ||
- | LIMIT=0 | + | #time_limit=$(sed q "$TITLE/time_limit.txt") ## utilité ? ## |
- | [[ "$LENGTH" -le "$LIMIT" ]] && continue | + | [[ "$LENGTH" -le "$time_limit" ]] && continue |
Ligne 177: | Ligne 222: | ||
- | fi | + | fi |
Ligne 210: | Ligne 255: | ||
if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -eq "0" ]]; then | if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -eq "0" ]]; then | ||
+ | echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m" | ||
+ | sleep 2 | ||
ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ||
Ligne 222: | Ligne 269: | ||
- | rm -f "$TITLE/$i-$TITLE.vob" | + | rm -f "$TITLE/$i-$TITLE.vob" |
Ligne 234: | Ligne 281: | ||
## VOB PRÉSENT. | ## VOB PRÉSENT. | ||
- | ## AVEC OU SANS AUDIO(S). | + | ## AU MOINS UN AUDIO OU PLUS. |
## SANS 0 CHANNEL. | ## SANS 0 CHANNEL. | ||
## SANS LPCM. | ## SANS LPCM. | ||
- | if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "0" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then | + | if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "1" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then |
+ | |||
+ | echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m" | ||
+ | sleep 2 | ||
ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ||
Ligne 260: | Ligne 310: | ||
rm -f "$TITLE/$i-$TITLE.vob" | rm -f "$TITLE/$i-$TITLE.vob" | ||
- | + | | |
Ligne 275: | Ligne 325: | ||
if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "1" ]] && [[ "$O_CHANNELS" -ge "1" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then | if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "1" ]] && [[ "$O_CHANNELS" -ge "1" ]] && [[ "$COUNT_LPCM" -eq "0" ]]; then | ||
+ | |||
+ | echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m" | ||
+ | sleep 2 | ||
ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ||
Ligne 303: | Ligne 356: | ||
if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "0" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -ge "1" ]]; then | if [[ -e "$TITLE/$i-$TITLE.vob" ]] && [[ "$COUNT_AUDIO" -ge "0" ]] && [[ "$O_CHANNELS" -eq "0" ]] && [[ "$COUNT_LPCM" -ge "1" ]]; then | ||
+ | |||
+ | echo -e "Le bitrate du titre n°\e[94m$i\e[0m sera donc de : \e[32m$bitrate_k\e[0m" | ||
+ | sleep 2 | ||
ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ffmpeg -hide_banner -analyzeduration 1000M -probesize 1000M -vsync 2 -r "$FPS" -i "$TITLE/$i-$TITLE.vob" \ | ||
Ligne 313: | Ligne 369: | ||
$FILTERS \ | $FILTERS \ | ||
-preset veryfast -y "$TITLE/$i-$TITLE.mkv" | -preset veryfast -y "$TITLE/$i-$TITLE.mkv" | ||
- | |||
rm -f "$TITLE/$i-$TITLE.vob" | rm -f "$TITLE/$i-$TITLE.vob" | ||
- | |||
- | |||
- | |||
- | dvdxchap -t "$i" "$DEVICE" > "$TITLE/$i-$TITLE-Chapters.txt" | ||
- | |||
- | mkvmerge "$TITLE/$i-$TITLE.mkv" --chapters "$TITLE/$i-$TITLE-Chapters.txt" \ | ||
- | -o "$TITLE/$i-$TITLE-[Out_Chapters].mkv" | ||
- | |||
- | rm -f "$TITLE/$i-$TITLE.mkv" | ||
- | rm -f "$TITLE/$i-$TITLE-Chapters.txt" | ||
- | mv "$TITLE/$i-$TITLE-[Out_Chapters].mkv" "$TITLE/$i-$TITLE.mkv" | ||
- | |||
mkdir -p "$TITLE/WAVE" | mkdir -p "$TITLE/WAVE" | ||
Ligne 349: | Ligne 392: | ||
## AU MOINS UN AUDIO FRANÇAIS OU PLUS. | ## AU MOINS UN AUDIO FRANÇAIS OU PLUS. | ||
- | if [[ "$COUNT_AUDIO_FR" -ge "1" ]]; then | + | if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_AUDIO_FR" -ge "1" ]]; then |
mkvmerge -o "$TITLE/$i-$TITLE-[Language: Français].mkv" -a fre "$TITLE/$i-$TITLE.mkv" | mkvmerge -o "$TITLE/$i-$TITLE-[Language: Français].mkv" -a fre "$TITLE/$i-$TITLE.mkv" | ||
Ligne 401: | Ligne 444: | ||
for n in $SIDFR; do mencoder -dvd-device "$DEVICE" dvdnav://"$i" -nosound -ovc frameno -force-avi-aspect "$RATIO" -o /dev/null \ | for n in $SIDFR; do mencoder -dvd-device "$DEVICE" dvdnav://"$i" -nosound -ovc frameno -force-avi-aspect "$RATIO" -o /dev/null \ | ||
- | -ifo "/run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO" -sid "$n" -vobsubout "$TITLE/$n-vobsubs-fr" -vobsuboutindex "$n" | + | -ifo "/run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO" -sid "$n" -vobsubout "$TITLE/$n-vobsubs-fr" -vobsuboutindex "$n" |
## ON CORRIGE LES ID VIDES SI BESOIN. | ## ON CORRIGE LES ID VIDES SI BESOIN. | ||
Ligne 411: | Ligne 454: | ||
if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then | if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then | ||
- | echo "$n-vobsubs-fr.idx et $n-vobsubs-fr.sub sont bon" | + | echo -e "\e[32m$n-vobsubs-fr.idx et $n-vobsubs-fr.sub sont bons.\e[0m" |
else | else | ||
## ON ISOLE LES VOBSUBS INVALIDES DANS LE DOSSIER VOBSUBS | ## ON ISOLE LES VOBSUBS INVALIDES DANS LE DOSSIER VOBSUBS | ||
- | echo "$n-vobsubs-fr.idx ou $n-vobsubs-fr.sub est incorrect ... déplacement" | + | echo -e "\e[32m$n-vobsubs-fr.idx ou $n-vobsubs-fr.sub incorrect ... déplacement des deux.\e[0m" |
- | mv "$TITLE/$n-vobsubs-fr.idx" "$TITLE/$n-vobsubs-fr.sub" "$TITLE/VOBSUBS/$i-$TITLE" | + | mv "$TITLE/$n-vobsubs-fr.idx" "$TITLE/$n-vobsubs-fr.sub" "$TITLE/VOBSUBS/$i-$TITLE" |
Ligne 438: | Ligne 481: | ||
if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -ge "1" ] && [ "$COUNT_SUB_FR" -ge "1" ] | if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -ge "1" ] && [ "$COUNT_SUB_FR" -ge "1" ] | ||
then | then | ||
- | |||
- | |||
- | |||
mkvmerge "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" --language "0:fre" "$TITLE"/*.idx -o "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub].mkv" | mkvmerge "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" --language "0:fre" "$TITLE"/*.idx -o "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters + Sub].mkv" | ||
## ON DÉPLACE LE RESTANT DES VOBSUBS UNE FOIS MIXÉS AVEC LES INVALIDES. | ## ON DÉPLACE LE RESTANT DES VOBSUBS UNE FOIS MIXÉS AVEC LES INVALIDES. | ||
- | mv "$TITLE"/*.idx "$TITLE"/*.sub "$TITLE/VOBSUBS/$i-$TITLE" | + | mv "$TITLE"/*.idx "$TITLE"/*.sub "$TITLE/VOBSUBS/$i-$TITLE" |
rm -f "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" | rm -f "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" | ||
Ligne 466: | Ligne 506: | ||
- | ## AUCUN IDX ou SUB. | + | ## AUCUN IDX ET SUB. ON TAG EN NOSUB |
- | if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -eq "0" ] || [ "$COUNT_SUB_FR" -eq "0" ] | + | if [[ -e "$TITLE/$i-$TITLE-[Audio: $INFO + Chapters].mkv" ]] && [ "$COUNT_IDX_FR" -eq "0" ] && [ "$COUNT_SUB_FR" -eq "0" ] |
then | then | ||
Ligne 481: | Ligne 521: | ||
- | ## PAS D'INFO ET UN SEUL AUDIO. | + | ## PAS D'INFO ET UN SEUL AUDIO. ON TAG EN UND |
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "1" ]] ; then | if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "1" ]] ; then | ||
mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: Und].mkv" | mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: Und].mkv" | ||
Ligne 492: | Ligne 532: | ||
- | ## PAS D'AUDIO DONC PAS D'INFO. | + | ## PAS D'AUDIO DONC PAS D'INFO. ON TAG EN NOSOUND |
if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "0" ]] ; then | if [[ -e "$TITLE/$i-$TITLE.mkv" ]] && [[ "$COUNT_INFO" -eq "0" ]] && [[ "$COUNT" -eq "0" ]] ; then | ||
mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: NoSound].mkv" | mv "$TITLE/$i-$TITLE.mkv" "$TITLE/$i-$TITLE-[Audio: NoSound].mkv" | ||
Ligne 503: | Ligne 543: | ||
- | done | + | done |
rm -f "$TITLE/bitrate.txt" | rm -f "$TITLE/bitrate.txt" | ||
+ | rm -f "$TITLE/time_limit.txt" | ||
+ | echo -e "\e[32mJob terminé.\e[0m" | ||
+ | echo -e "\e[32mTemps total écoulé: $(date -ud "@$(($(date +%s) - START_TIME))" +%T)\e[0m (HH:MM:SS)" | ||
</file> | </file> | ||
Puis collez-le dans le fichier créé. | Puis collez-le dans le fichier créé. |