Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2021
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.30 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Copyright 2021 /u/Grandfather-Paradox
  4.  
  5. fileDurRegex="([0-9]+):([0-9]+):([0-9]+)\.[0-9]+"
  6. streamHrsMinsSecsRegex="([0-9]+):([0-9]+):([0-9]+)"
  7. streamMinsSecsRegex="([0-9]+):([0-9]+)"
  8. streamSecsRegex="[0-9]+"
  9.  
  10. convert_to_seconds () {
  11.     dur=$1
  12.     if [[ $dur =~ $fileDurRegex || $dur =~ $streamHrsMinsSecsRegex ]]
  13.     then
  14.         hrs=$(echo "${BASH_REMATCH[1]}" | sed 's/^0*//')
  15.         mins=$(echo "${BASH_REMATCH[2]}" | sed 's/^0*//')
  16.         secs=$(echo "${BASH_REMATCH[3]}" | sed 's/^0*//')
  17.     elif [[ $dur =~ $streamMinsSecsRegex ]]
  18.     then
  19.         hrs=0
  20.         mins=$(echo "${BASH_REMATCH[1]}" | sed 's/^0*//')
  21.         secs=$(echo "${BASH_REMATCH[2]}" | sed 's/^0*//')
  22.     elif [[ $dur =~ $streamSecsRegex ]]
  23.     then
  24.         hrs=0
  25.         mins=0
  26.         secs=$dur
  27.     fi
  28.        
  29.     if [[ -z $hrs ]]; then hrs=0; fi
  30.     if [[ -z $mins ]]; then mins=0; fi
  31.     if [[ -z $secs ]]; then secs=0; fi
  32.    
  33.     totalSecs=$(( $hrs*360 + $mins*60 + $secs ))
  34.     echo $totalSecs
  35. }
  36.  
  37. currentEpisode=1
  38. while read link; do
  39.     retryDownload=true
  40.     totalEpisodes=$(wc -l links.txt | sed 's/ links.txt//')
  41.     while [ $retryDownload = true ]
  42.     do
  43.         echo -e "\e[36m[ $currentEpisode / $totalEpisodes ]\e[0m"
  44.         youtube-dl --hls-prefer-native --fragment-retries infinite --retries infinite --sub-lang en --write-sub --convert-subs srt --verbose "$link"
  45.        
  46.         filename=$(youtube-dl --get-filename "$link")
  47.         base=$(basename "$filename" .mp4)
  48.         srt="$base.en.srt"
  49.         mkv="$base.mkv"
  50.        
  51.         if [[ -f "$srt" ]]
  52.         then
  53.             mkvmerge -o "$mkv" "$filename" "$srt"
  54.             mkvpropedit "$mkv" --edit track:s1 --set language=eng
  55.             rm "$srt"
  56.         else
  57.             mkvmerge -o "$mkv" "$filename"
  58.         fi
  59.         mkvpropedit "$mkv" --edit track:a1 --set language=eng --edit track:v1 --set language=eng
  60.        
  61.         rm "$filename"
  62.  
  63.         fileDur=$(mediainfo --Inform="Video;%Duration/String3%" "$mkv")
  64.         streamDur=$(youtube-dl --get-duration "$link")
  65.         totalFileSec=$(convert_to_seconds $fileDur)
  66.         echo "Total file secs: $totalFileSec"
  67.         totalStreamSec=$(convert_to_seconds $streamDur)
  68.         echo "Total stream secs: $totalStreamSec"
  69.        
  70.         if [[ $totalFileSec -eq $totalStreamSec || $totalFileSec -eq $(( $totalStreamSec-1 )) ]]
  71.         then
  72.             echo -e "\e[32mDownload OK\e[0m"
  73.             retryDownload=false
  74.             currentEpisode=$(( $currentEpisode+1 ))
  75.         else
  76.             echo -e "\e[31mError found, retrying...\e[0m"
  77.             rm "$mkv"
  78.         fi
  79.     done
  80. done <links.txt
  81.  
  82. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement