Mala skripta za filmove

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
Ovaj skript koristim za puštanje filmova. Kada se pokrene samo izaberem video fajl. Namenjen za titlove sa naših prostora. Automatski pokupi titl u folderu u kome se nalazi film i pušta u full screen-u.

Code:
#!/bin/bash

file="$(zenity --title=‘Select a video to watch’ --file-selection --file-filter=‘Video files (avi,mkv,ogg,ogv,mpg,mpeg,mp4) | *.avi *.mkv *.ogg *.ogv *.mpg *.mpeg *.mp4’ --file-filter=‘All files | *’)"
if [ $? -ne 0 ]; then
exit
fi
mplayer “$file” -subcp enca:rs:cp1250 -sub-fuzziness 2 -fs
MPlayer je CLI alatka, nema GUI, pa su sve kontrole na tastaturi. Detaljno opisano u man stranici.
man mplayer
 
Last edited:

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
Nađoh sinoć jedan skript (koji sam pokupio ko zna gde :)) na hardu koji proverava da li je dpms uključen i ako jeste isključuje i dpms i screensaver. Ako dpms nije uključen aktivira i dmps i screensaver.
Korisno kada se gledaju filmovi.

Code:
#!/bin/bash
[HEADING=1]Query dpms with xset and switch status, exit and restart xscreensaver[/HEADING]
if xset -q | grep DPMS | grep -c Enabled ; then
xset -dpms
xset s off
xscreensaver-command -exit
notify-send -i gtk-dialog-info “Screen saving is OFF”
else
xset +dpms
xset s on
xscreensaver &
notify-send -i gtk-dialog-info “Screen saving is ON”
fi
 
Last edited:

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
youtube-dl frontend koji sam unapredio da može da izvršava nekoliko simultanih preuzimanja.
Ako prekinete download na Cancel, skript traži *.part fajlove koji se kreiraju tokom preuzimanja i briše ih.
Code:
#!/bin/bash

# DESCRIPTION:  YAD frontend for youtube-dl
#
# LICENSE:  GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)
#
# NOTICE:  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
#  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
#  PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
#  IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
#  AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
#  PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
#  YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#
#  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
#  COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
#  PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
#  INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
#  THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
#  INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
#  PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
#  PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

# written by <damo> May 2016 @BunsenLabs
# re-written by Misko_2083 <Miloš Pavlović> June 2016
# Progress bar method used from Glutanimate's yad_wget script
# https://github.com/Glutanimate/misc-scripts/blob/master/Internet/yad_wget


# Set GUI variables up
TITLE="YAD youtube-dl wrapper"  # dialog title
TEXT="  <b>Downloads</b> in progress:"  # dialog text
ICON="browser-download"  # window icon (appears in launcher)
IMAGE="browser-download"  # window image (appears in dialog)

# Check youtube-dl is installed
if ! type youtube-dl &>/dev/null;then
  DLG=$(yad --form --window-icon "$ICON" \
  --borders=10 \
  --text="  youtube-dl not found\n\n  Install it first and run the script again" --button="gtk-ok:0" \
  --title "$TITLE" --center --image "$IMAGE" \
  )
  exit
fi

download() {
  youtube-dl $UTUBE --newline -i -o "$SAVEDIR/%(id)s.%(ext)s" "$1" 2>&1 \
  | while read line; do
  echo "$2:#Preparing to download $1"

  if [[ "$(echo $line | grep '[0-9]*%')" ]];then
    percent=$(echo $line | awk '{print $2}')
    echo "$2:${percent%.*}%"
  fi

  if [[ "$(echo $line | grep '\[download\]')" ]];then
    progress=$(echo $line | awk '{$1=""; print $0}')
    echo "$2:#$progress"
  fi

  done
  RET_YT="${PIPESTATUS[0]}"
  if [[ "$RET_YT" = 0 ]]
    then
    echo "$2:100%"
    echo "$2:#Download completed."
 
    else
    echo "$2:#Download error."
  fi
}

while :; do
  ENTRY=$(yad --form --columns=1 --window-icon "$ICON" --center \
  --borders=10 --title "$TITLE" --image "$IMAGE" --image-on-top \
  --text "Select a folder to download\n and paste URL(s) into any field" \
  --title="Youtube downloader" --button="Exit!gtk-cancel:1" --button="Download!gtk-ok:0" \
  --field="Enter Save directory:DIR" "$HOME/Downloads" \
  --field="Download Options:CB" "Normal!Audio only (best)" \
  --field="Simultaneous Downloads:CB" "1!2!3!4!5" \
  --field="youtube url  1:" "" \
  --field="youtube url  2:" "" \
  --field="youtube url  3:" "" \
  --field="youtube url  4:" "" \
  --field="youtube url  5:" "" \
  --field="youtube url  6:" "" \
  --field="youtube url  7:" "" \  # make as many url fields as you need
  )
  RET=$?

  if (( $RET == 1 )) || (( $RET == 252 ));then  # Canceled
    exit
  fi

  OIFS=$IFS # save Internal Field Separator
  IFS="|" # separator is "|" in returned choices

  i=0
  retChoice=()

  e=0
  URLIST=()

for ret in $ENTRY;do
  retChoice[$i]="$ret"
  i=$(($i+1))  # iterate i
  if [[ "$i" -gt 3 ]] && [[ "$ret" != "" ]];then  # get form fields if they are not empty
      URLIST[$e]="${ret##*'='}"  # extract filename
      YADBARS="$YADBARS --bar=${URLIST[$e]}:NORM"  # add bars to a yad multiprogress dialog
      e=$(($e+1))  # iterate e
  fi
done

  IFS=$OIFS # reset IFS back to default

  SAVEDIR=${retChoice[0]} # directory path
  OPTION=${retChoice[1]}
  case $OPTION in
  "Normal")
  UTUBE="-f 18"
  ;;
  "Audio only (best)")
  UTUBE="-f 141/bestaudio"
  ;;
  esac
  MAXDLS=${retChoice[2]}  # maximum number of simultaneous downloads

  if [[ -z $SAVEDIR ]] || [[ ${#URLIST[@]} -eq 0 ]];then
      yad --form --text="Enter at least one url field\nand select a folder" --borders=10 \
      --center --title "$TITLE" --window-icon "$ICON" --image "$IMAGE" --button="gtk-ok:0"
  else
      break
  fi
done


IFS=" "
COUNTER="1"
DYNAMIC_COUNTER="1"
PID=()

for URL in ${URLIST[@]}; do
  if [[ "$DYNAMIC_COUNTER" = "$MAXDLS" ]] # only download n files at a time
  then
    download "$URL" "$COUNTER" &  # pass URL and counter number to download()
    PID+=("$!")  # gets process pid
    max="$(($COUNTER-1))"  # -1, since start counter is 1, and arrays begin at 0
    MAX_PID=${PID[$max]}  # sets the variable pid from array PID
    wait $MAX_PID  # wait until process with MAX_PID finishes
    DYNAMIC_COUNTER="1"  # reset dynamic counter
  else
    download "$URL" "$COUNTER" &  # pass URL and counter number to download()
    PID+=("$!") 
    DYNAMIC_COUNTER="$(($DYNAMIC_COUNTER+1))"  # iterate dinamic counter
  fi
  COUNTER="$[$COUNTER+1]"  # iterate counter
done | yad --multi-progress $YADBARS --title "$TITLE" --button=Cancel"!gtk-close:1" \
--text "$TEXT" --center --window-icon "$ICON" --image "$IMAGE" --image-on-top --auto-close

if (( $? == 1 ));then  # Download canceled, so clean up
  for pid in ${PID[@]};do
  kill $pid &>/dev/null  # kill any running download process
  done
  for url in ${URLIST[@]}; do
  rm $(find $SAVEDIR -type f -name $url.* | grep part) &>/dev/null
  done
  notify-send -t 3000 --icon "dialog-info" "Download cancelled"
  exit
fi
 
Last edited:

marecare

Active member
Joined
May 9, 2014
Messages
1,436
Reaction score
6
Strava, ja bas cesto koristim youtube-dl iz terminala ali sam vise ljubitelj GUI-a.
Moze li neki screenshot pre nego ga budem koristio.
Takodje, zanima me kako se koriste skripte, nisam do sada koristio nista tog tipa, znaci da li je koristim za pokretanje ili “instaliranje”…?
Jos jedna stvar, da li postoji opcija da se bira kvalitet klipa sa YT koji ce se skidati?
 
Last edited:

alterio

Member
Joined
Oct 20, 2012
Messages
178
Reaction score
1
alt
marecare:
…Takodje, zanima me kako se koriste skripte, nisam do sada koristio nista tog tipa, znaci da li je koristim za pokretanje ili “instaliranje”…?
Pogledaj:

Writing shell scripts - Lesson 1: Writing your first script and getting it to work

Pojednostavljeno, na primeru skripte za gledanje filmova u mplayer-u:

Otvori tekst editor (npr.gedit) i iskopiraj tekst skripte pa sačuvaj, kao recimo mplayerscript, u nekom (npr.home) direktorijumu.

Učini skriptu izvršnom:
$ chmod 755 mpayerscript
Korišćenjem fajl menadžera svog okruženja, skriptu pokrećeš mišem (run) iz direktorijuma u kome se nalazi (home).
 
Last edited:

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
alt
marecare:
Strava, ja bas cesto koristim youtube-dl iz terminala ali sam vise ljubitelj GUI-a.
Moze li neki screenshot pre nego ga budem koristio.
Takodje, zanima me kako se koriste skripte, nisam do sada koristio nista tog tipa, znaci da li je koristim za pokretanje ili “instaliranje”…?
Jos jedna stvar, da li postoji opcija da se bira kvalitet klipa sa YT koji ce se skidati?
Što se kvaliteta tiče morao bih da potpuno izmenim skript zato što youtube-dl mora najpre da proveri dostupne kvalitete/formate “youtube-dl -F $URL”.
Te informacije moraju da se obrade i da se ubace u yad listu.

youtube-dl -F https://www.youtube.com/watch?v=avOhLBh2nPY [youtube] avOhLBh2nPY: Downloading webpage [youtube] avOhLBh2nPY: Downloading video info webpage [youtube] avOhLBh2nPY: Extracting video information [youtube] avOhLBh2nPY: Downloading MPD manifest [info] Available formats for avOhLBh2nPY: format code extension resolution note 249 webm audio only DASH audio 54k , opus @ 50k (48000Hz), 1.91MiB 250 webm audio only DASH audio 77k , opus @ 70k (48000Hz), 2.58MiB 140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k (44100Hz), 4.68MiB 171 webm audio only DASH audio 133k , vorbis@128k (44100Hz), 4.33MiB 251 webm audio only DASH audio 150k , opus @160k (48000Hz), 5.00MiB 278 webm 256x144 DASH video 104k , webm container, vp9, 12fps, video only, 3.35MiB 160 mp4 256x144 DASH video 111k , avc1.42c00c, 12fps, video only, 4.02MiB 242 webm 426x240 DASH video 229k , vp9, 24fps, video only, 7.07MiB 133 mp4 426x240 DASH video 247k , avc1.4d4015, 24fps, video only, 9.00MiB 134 mp4 640x360 DASH video 380k , avc1.4d401e, 24fps, video only, 10.08MiB 243 webm 640x360 DASH video 405k , vp9, 24fps, video only, 12.05MiB 244 webm 854x480 DASH video 692k , vp9, 24fps, video only, 19.07MiB 135 mp4 854x480 DASH video 735k , avc1.4d401e, 24fps, video only, 19.91MiB 247 webm 1280x720 DASH video 1249k , vp9, 24fps, video only, 35.58MiB 136 mp4 1280x720 DASH video 1354k , avc1.4d401f, 24fps, video only, 37.89MiB 248 webm 1920x1080 DASH video 2460k , vp9, 24fps, video only, 69.98MiB 137 mp4 1920x1080 DASH video 2563k , avc1.640028, 24fps, video only, 71.95MiB 17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k 36 3gp 320x180 small , mp4v.20.3, mp4a.40.2 5 flv 426x240 small , h263, mp3 @ 64k 43 webm 640x360 medium , vp8.0, vorbis@128k 18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k 22 mp4 1280x720 hd720 , avc1.64001F, mp4a.40.2@192k (best) Napraviću kada budem raspoložen. 🙂

Script može da se sačuva na nekoliko načina. Najlakše je da otvoriš tekst editor(Mousepad, Gedit, Leafpad …), zatim nalepiš tu kod i sačuvaš fajl kao ime_skripta.sh
Na primer: youtube.sh
Sledeći korak je da promeniš dozvole da bi mogao da izvršiš script. To jest da označiš skript izvršnim.
Dozvole možeš da promeniš i iz GUI-a desnim klikom na skript pa kada izabereš properties tu bi trebalo da se nađe opcija za označavanje skripta izvršnim.
A možeš i pomoću terminala, kako reče @alterio
chmod 755 skript.sh
ili
chmod +x skript.sh
 
Last edited:

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
Novi GUI za youtube

Code:
#!/bin/bash
[HEADING=1]DESCRIPTION: YAD frontend for youtube-dl[/HEADING]
[HEADING=1]LICENSE: GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)[/HEADING]
[HEADING=1]NOTICE: THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.[/HEADING]
[HEADING=1]EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES[/HEADING]
[HEADING=1]PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR[/HEADING]
[HEADING=1]IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY[/HEADING]
[HEADING=1]AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND[/HEADING]
[HEADING=1]PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,[/HEADING]
[HEADING=1]YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.[/HEADING]
[HEADING=1]IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY[/HEADING]
[HEADING=1]COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS[/HEADING]
[HEADING=1]PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,[/HEADING]
[HEADING=1]INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE[/HEADING]
[HEADING=1]THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED[/HEADING]
[HEADING=1]INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE[/HEADING]
[HEADING=1]PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER[/HEADING]
[HEADING=1]PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.[/HEADING]
[HEADING=1]based on a script by May 2016 @BunsenLabs[/HEADING]
[HEADING=1]Misko_2083 <Miloš Pavlović> June 2016[/HEADING]
[HEADING=1]Progress bar method used from Glutanimate’s yad_wget script[/HEADING]
[HEADING=1]https://github.com/Glutanimate/misc-scripts/blob/master/Internet/yad_wget[/HEADING]
declare -i SIMULTANEOUS
declare -i FIELDS
[HEADING=1]Set GUI variables up[/HEADING]
TITLE=“YAD youtube-dl wrapper” # dialog title

TEXT=“Downloads in progress…
Cancel and Clean- removes *.part files
Cancel - Just cancels the download” # progress dialog text

ICON=“browser-download” # window icon (appears in launcher)
IMAGE=“browser-download” # window image (appears in dialog)

declare -i MODE
MODE=1 # Defaiult dialog mode: 0 - Multi, 1 - Manual

#Multy download dialog options
SIMULTANEOUS=2 # set default number of simultaneous downloads (1-5)
FIELDS=8 # number of URL fields
[HEADING=1]Set global variables[/HEADING]
FORMAT="" # Set global variable for the format selection
ENTRY="" # Set global variable for the entry
[HEADING=1]Check youtube-dl is installed[/HEADING]
if ! hash youtube-dl &>/dev/null;then
DLG=$(yad --form 
–borders=10 --image-on-top 
–text=" youtube-dl not found\n\n Install it first and run the script again" --button=“gtk-ok:0” 
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE” 
)
exit
fi
[HEADING=1]Check ffmpeg is installed[/HEADING]
if ! hash ffmpeg &>/dev/null;then
DLG=$(yad --form 
–borders=10 --image-on-top 
–text=" ffmpeg not found\n\n Install it first and run the script again" --button=“gtk-ok:0” 
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE” 
)
exit
fi

download() {
cd $SAVEDIR
youtube-dl ${UTUBE} --newline -i -o “%(title)s-%(id)s.%(ext)s” “https://www.youtube.com/watch?v=$1” 2>&1 
| while read -r line; do
echo “$2:#Preparing to download $1”
[CODE] if [[ "$(echo $line | grep '[0-9]*%')" ]];then
    percent=$(echo $line | awk '{print $2}')
    if [[ ! "$(echo "${percent}" | grep "100")" ]]; then  #do not print 100% yet in case of conversion (mp3)
       echo "$2:${percent%.*}%"
    fi

 fi

 if [[ "$(echo $line | grep -E '\[download\]|\[ffmpeg\]')" ]];then
    progress=$(echo $line | awk '{$1=""; print $0}')
    echo "$2:#$progress"
 fi
done
RET_YT="${PIPESTATUS[0]}"
if [[ “$RET_YT” = 0 ]]
then
echo “$2:100%”
echo “$2:#Download completed.”
Code:
  else
      echo "$2:#Download error."
fi
}

download_format(){
FILENAME="$(youtube-dl --get-filename “$1”)"
#Format selection
FORMAT="$(youtube-dl -F “$1”
| sed ‘s/audio only/audio only /;s/DASH video/DASH video /’
| awk -F’\s{2,}| , , ’ ‘NR>6 {for(i=1;i<=5;i++){print $i}}’
| yad --list --width=600 --height=500 --column=“format”
–column=“extension” --column=“resolution” --column=“type” --column=“note”
–button=“back!back:2” --button=“Exit!gtk-cancel:1” --button=“Download!gtk-ok:0”
–window-icon="$ICON" --image="$IMAGE" --image-on-top
–text “$FILENAME\nSelect a format to download” --borders=10
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE”
)"
RET=$?
Code:
if (( $RET == 2 )); then
   main
elif (( $RET == 1 )) || (( $RET == 252 )); then    # Canceled or window closed
    exit
fi

FORMAT=$(echo "$FORMAT" | cut -d '|' -f 1)

if [[ -z $FORMAT ]];then
    yad --text="You haven't selected a download format\nDo you want to return to the main window?" \
    --borders=10 --form --button="No!gtk-cancel:1" --button="Yes!gtk-ok:0" \
    --center --title "$TITLE" --window-icon "$ICON" --image "$IMAGE"

    RET=$?

    if (( $RET == 1 )) || (( $RET == 252 ));then     # Canceled
       exit
    elif (( $RET == 0 )); then
       main
    fi
fi
}

dialog(){

if [[ “$MODE” = “0” ]]; then
OIFS=$IFS # save Internal Field Separator
IFS=$’\n’ # separator is “\n” in returned choices

c=0
YADFIELD=()

while [[ ${c} -lt $FIELDS ]];do
c=$(($c+1))
YADFIELD+=($(echo -e “–field=\u2001"YouTube url: ${c}:NORM” “”"))
done
Code:
ENTRY="$(yad --form --columns=1 --window-icon "$ICON" --center \
   --borders=10 --title "$TITLE" --image "$IMAGE" --image-on-top \
   --text "Select a folder to download\n and paste URL(s) into any field" \
   --button="Switch GUI!reload:2" --button="Exit!gtk-cancel:1" --button="Download!gtk-ok:0" \
   --field="Enter Save directory:DIR" "$HOME/Downloads" \
   --field="Download Options:CB" "Audio only (mp3)!Video (22/18/17)" \
   --field="Simultaneous Downloads:NUM" "$SIMULTANEOUS!1..5!1" \
   ${YADFIELD[@]} \
    )"
RET=$?

IFS=$OIFS # reset IFS back to default

case "$RET" in
   0)    #  Continue
   ;;
   1)      # Canceled
   exit
   ;;
   2)
   MODE=1
   dialog
   ;;
   252)    # Window Closed
   exit
   ;;
   *)
   exit
   ;;
esac
elif [[ “$MODE” = “1” ]]; then
ENTRY="$(yad --form --columns=1 --window-icon “$ICON” --center
–borders=10 --title “$TITLE” --image “$IMAGE” --image-on-top
–text “Select a folder to download\n and paste URL(s) into any field”
–button=“Switch GUI!reload:2” --button=“Exit!gtk-cancel:1” --button=“Format!gtk-ok:0”
–field=“Enter Save directory:DIR” “$HOME/Downloads”
–field=“Download Options:CB” “Manual”
–field=“Simultaneous Downloads:NUM” “1!1…1!1”
–field=“youtube url:” “” \ # Only one url field for the Manual format selection
)"
RET=$?
Code:
case "$RET" in
   0)     # Continue
   ;;
   1)      # Canceled
   exit
   ;;
   2)
   MODE=0
   dialog
   ;;
   252)    # Window Closed
   exit
   ;;
   *)
   exit
   ;;
esac
fi
}

main(){
while :; do
dialog # calls the main dialog
Code:
OIFS=$IFS # save Internal Field Separator
IFS="|" # separator is "|" in returned choices

i=0
retChoice=()

e=0
URLIST=()
for ret in $ENTRY;do
retChoice[$i]="$ret"
i=$(($i+1)) # iterate i
if [[ “$i” -gt 3 ]] && [[ “$ret” != “” ]];then # get form fields if they are not empty
URLIST[$e]="${ret##*’=’}" # extract filename
YADBARS="$YADBARS --bar=${URLIST[$e]}:NORM" # add bars to a yad multiprogress dialog
e=$(($e+1)) # iterate e
fi
done
Code:
IFS=$OIFS # reset IFS back to default

SAVEDIR=${retChoice[0]} # directory path
OPTION=${retChoice[1]}
case $OPTION in
"Video (22/18/17)")
   UTUBE="-f 22/18/17"
;;
"Audio only (mp3)")
   UTUBE="--extract-audio --audio-format mp3 --audio-quality 0"
;;
esac
MAXDLS=${retChoice[2]}  # maximum number of simultaneous downloads

if [[ -z $SAVEDIR ]] || [[ ${#URLIST[@]} -eq 0 ]];then
    yad --form --text="Enter at least one url field\nand select a folder" --borders=10 \
    --center --title "$TITLE" --window-icon "$ICON" --image "$IMAGE" --button="gtk-ok:0"
else
    break
fi
done

if [[ “$MODE” = “1” ]]; then
for URL in ${URLIST[@]}; do
download_format “https://www.youtube.com/watch?v=$URL” # call format selection dialog
UTUBE="-f $FORMAT"
done
fi
}

main # Call the main loop

OIFS=$IFS # save Internal Field Separator
IFS=" " # separator is " " in returned choices

COUNTER=“1”
DYNAMIC_COUNTER=“1”
PID=()

for URL in ${URLIST[@]}; do
if [[ “$DYNAMIC_COUNTER” = “$MAXDLS” ]] # only download n files at a time
then
download “$URL” “$COUNTER” & # pass URL and counter number to download()
PID+=("$!") # gets process pid
max="$(($COUNTER-1))" # -1, since start counter is 1, and arrays begin at 0
MAX_PID=${PID[$max]} # sets the variable pid from array PID
wait $MAX_PID # wait until process with MAX_PID finishes
DYNAMIC_COUNTER=“1” # reset dynamic counter
else
download “$URL” “$COUNTER” & # pass URL and counter number to download()
PID+=("$!")
DYNAMIC_COUNTER="$(($DYNAMIC_COUNTER+1))" # iterate dinamic counter
fi
COUNTER="$[$COUNTER+1]" # iterate counter
done | yad --multi-progress $YADBARS --title “$TITLE” --button=“Cancel and Clean!gtk-close:1” --button=“Cancel!gtk-close:0”
–text “$TEXT” --center --window-icon “$ICON” --image “$IMAGE” --image-on-top --auto-close

if (( $? == 1 ));then # Download canceled, so clean up
for pid in ${PID[@]};do
kill $pid &>/dev/null # kill any running download process
done
for url in ${URLIST[@]}; do
rm “$(find $SAVEDIR -type f -name “-$url.” | grep part)” &>/dev/null #removes the part file
done
notify-send -t 3000 --icon “dialog-info” “Download cancelled”
exit
fi

IFS=$OIFS # reset IFS back to default[/CODE]
 
Last edited:

Commander

Well-known member
Staff member
Joined
Jan 13, 2012
Messages
9,235
Reaction score
530
Bravo…
 
Last edited:

marecare

Active member
Joined
May 9, 2014
Messages
1,436
Reaction score
6
Meni nikako da proradi 😦

Znaci, uzmem kompletan ovaj kod, prekopiram u gedit, sacuvam ga kao “youtubedl.sh” na desktop.
Otvorim terminal iz desktopa pa: sudo chmod +x youtubedl.sh
Zatim dvaput kliknem na youtubedl.sh fajl na desktopu i “Run” i nista se ne dogodi 😦
 
Last edited:

Dragan

Well-known member
Staff member
Joined
Jan 13, 2012
Messages
6,371
Reaction score
65
@marecare
Zavisnosti su yad i ffmpeg ( i youtube-dl naravno…), proveri da li su instalirane.
Ako jesu, a i dalje se ne pokreće, otvori terminal u folderu u kom je skripta, pokreni je sa
./youtubedl.sh
pa prenesi ispis ovde.
Kod mene na Susetu radi…
View attachment 3710
 
Last edited:

Dragan

Well-known member
Staff member
Joined
Jan 13, 2012
Messages
6,371
Reaction score
65
alt
marecare:
Otvorim terminal iz desktopa pa: sudo chmod +x youtubedl.sh
Sad tek vidim…sudo ti ovde ne treba za user skriptu
 
Last edited:

Зунзара

Active member
Joined
Jul 31, 2016
Messages
145
Reaction score
34
Meni nikako da proradi 😦

Znaci, uzmem kompletan ovaj kod, prekopiram u gedit, sacuvam ga kao “youtubedl.sh” na desktop.
Otvorim terminal iz desktopa pa: sudo chmod +x youtubedl.sh
Zatim dvaput kliknem na youtubedl.sh fajl na desktopu i “Run” i nista se ne dogodi 😦
Мени је прорадило после инсталирања ffmpeg-а и штиклирања стрелицом означеног поља.

View attachment 3711
 
Last edited:
S

system

Guest
Nisam uzeo u obzir liste. Samo jedan red bi trebao trimuje repove od liste. Kada se vratim, ispravicu. 🙂
Dragan rece da probam da posaljem kao Gost.
 

Dragan

Well-known member
Staff member
Joined
Jan 13, 2012
Messages
6,371
Reaction score
65
Dragan rece da probam da posaljem kao Gost.
Očigledno radi…nije mi jasno šta se dešava, ali je problem zanimljiv 🙂
 
Last edited:

Misko_2083

Member
Joined
Mar 15, 2015
Messages
306
Reaction score
18
U redu ovako se trimuje višak.
Dodado sam i “refresh” dugme na dijalogu za odabir formata i malo očistio skript.

Code:
#!/bin/bash
[HEADING=1]DESCRIPTION: YAD frontend for youtube-dl[/HEADING]
[HEADING=1]LICENSE: GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)[/HEADING]
[HEADING=1]NOTICE: THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.[/HEADING]
[HEADING=1]EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES[/HEADING]
[HEADING=1]PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR[/HEADING]
[HEADING=1]IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY[/HEADING]
[HEADING=1]AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND[/HEADING]
[HEADING=1]PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,[/HEADING]
[HEADING=1]YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.[/HEADING]
[HEADING=1]IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY[/HEADING]
[HEADING=1]COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS[/HEADING]
[HEADING=1]PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,[/HEADING]
[HEADING=1]INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE[/HEADING]
[HEADING=1]THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED[/HEADING]
[HEADING=1]INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE[/HEADING]
[HEADING=1]PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER[/HEADING]
[HEADING=1]PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.[/HEADING]
[HEADING=1]based on a script by May 2016 @BunsenLabs[/HEADING]
[HEADING=1]Misko_2083 <Miloš Pavlović> June 2016[/HEADING]
[HEADING=1]Progress bar method used from Glutanimate’s yad_wget script[/HEADING]
[HEADING=1]https://github.com/Glutanimate/misc-scripts/blob/master/Internet/yad_wget[/HEADING]
declare -i SIMULTANEOUS
declare -i FIELDS
[HEADING=1]Set GUI variables up[/HEADING]
TITLE=“YAD youtube-dl wrapper” # dialog title

TEXT=“Downloads in progress…
Cancel and Clean- removes *.part files
Cancel - Just cancels the download” # progress dialog text

ICON=“browser-download” # window icon (appears in launcher)
IMAGE=“browser-download” # window image (appears in dialog)

declare -i MODE
MODE=1 # Defaiult dialog mode: 0 - Multi, 1 - Manual

#Multy download dialog options
SIMULTANEOUS=2 # set default number of simultaneous downloads (1-5)
FIELDS=8 # number of URL fields
[HEADING=1]Set global variables[/HEADING]
FORMAT="" # Set global variable for the format selection
ENTRY="" # Set global variable for the entry
[HEADING=1]Check youtube-dl is installed[/HEADING]
if ! hash youtube-dl &>/dev/null;then
DLG=$(yad --form 
–borders=10 --image-on-top 
–text=" youtube-dl not found\n\n Install it first and run the script again" --button=“gtk-ok:0” 
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE” 
)
exit
fi
[HEADING=1]Check ffmpeg is installed[/HEADING]
if ! hash ffmpeg &>/dev/null;then
DLG=$(yad --form 
–borders=10 --image-on-top 
–text=" ffmpeg not found\n\n Install it first and run the script again" --button=“gtk-ok:0” 
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE” 
)
exit
fi

download() {
cd $SAVEDIR
youtube-dl ${UTUBE} --newline -i -o “%(title)s-%(id)s.%(ext)s” “https://www.youtube.com/watch?v=$1” 2>&1 
| while read -r line; do
echo “$2:#Preparing to download $1”
[CODE] if [[ "$(echo $line | grep '[0-9]*%')" ]];then
    percent=$(echo $line | awk '{print $2}')
    if [[ ! "$(echo "${percent}" | grep "100")" ]]; then  #do not print 100% yet in case of conversion (mp3)
       echo "$2:${percent%.*}%"
    fi

 fi

 if [[ "$(echo $line | grep -E '\[download\]|\[ffmpeg\]')" ]];then
    progress=$(echo $line | awk '{$1=""; print $0}')
    echo "$2:#$progress"
 fi
done
RET_YT="${PIPESTATUS[0]}"
if [[ “$RET_YT” = 0 ]]
then
echo “$2:100%”
echo “$2:#Download completed.”
Code:
  else
      echo "$2:#Download error."
fi
}

format_selection(){
#Format selection
FORMAT="$(youtube-dl -F “$YTEMP” --newline
| sed ‘s/audio only/audio only /;s/DASH video/DASH video /’
| awk -F’\s{2,}| , , ’ ‘NR>6 {for(i=1;i<=5;i++){print $i}}’
| yad --list --width=600 --height=500 --column=“format”
–column=“extension” --column=“resolution” --column=“type” --column=“note”
–button=“back!back:2” --button=“Refresh!reload:3” --button=“Exit!gtk-cancel:1” --button=“Download!gtk-ok:0”
–window-icon="$ICON" --image="$IMAGE" --image-on-top
–text “$FILENAME\nSelect a format to download” --borders=10
–center --title “$TITLE” --window-icon “$ICON” --image “$IMAGE”
)"
RET=$?
case “$RET” in
0) # Continue
;;
1) # Canceled
exit
;;
2)
main
;;
3)
format_selection
;;
*)
exit
;;
esac
Code:
FORMAT=$(echo "$FORMAT" | cut -d '|' -f 1)

if [[ -z $FORMAT ]];then
    yad --text="You haven't selected a download format\nDo you want to return to the main window?" \
    --borders=10 --form --button="No!gtk-cancel:1" --button="Yes!gtk-ok:0" \
    --center --title "$TITLE" --window-icon "$ICON" --image "$IMAGE"

    RET=$?

    if (( $RET == 1 )) || (( $RET == 252 ));then     # Canceled
       exit
    elif (( $RET == 0 )); then
       main
    fi
fi
}

download_format(){
FILENAME="$(youtube-dl --get-filename “$1”)"
YTEMP="$1" # temp variable to store the url
format_selection
}

dialog(){

if [[ “$MODE” = “0” ]]; then
OIFS=$IFS # save Internal Field Separator
IFS=$’\n’ # separator is “\n” in returned choices

c=0
YADFIELD=()

while [[ ${c} -lt $FIELDS ]];do
c=$(($c+1))
YADFIELD+=($(echo “–field=YouTube url: ${c}:NORM”; echo “”))
done
Code:
ENTRY="$(yad --form --columns=1 --window-icon "$ICON" --center \
   --borders=10 --title "$TITLE" --image "$IMAGE" --image-on-top \
   --text "Select a folder to download\n and paste URL(s) into any field" \
   --button="Switch GUI!reload:2" --button="Exit!gtk-cancel:1" --button="Download!gtk-ok:0" \
   --field="Enter Save directory:DIR" "$HOME/Downloads" \
   --field="Download Options:CB" "Audio only (mp3)!Video (22/18/17)" \
   --field="Simultaneous Downloads:NUM" "$SIMULTANEOUS!1..5!1" \
   ${YADFIELD[@]} \
    )"
RET=$?

IFS=$OIFS # reset IFS back to default

case "$RET" in
   0)    #  Continue
   ;;
   1)      # Canceled
   exit
   ;;
   2)
   MODE=1
   dialog
   ;;
   *)
   exit
   ;;
esac
elif [[ “$MODE” = “1” ]]; then
ENTRY="$(yad --form --columns=1 --window-icon “$ICON” --center
–borders=10 --title “$TITLE” --image “$IMAGE” --image-on-top
–text “Select a folder to download\n and paste URL(s) into any field”
–button=“Switch GUI!reload:2” --button=“Exit!gtk-cancel:1” --button=“Format!gtk-ok:0”
–field=“Enter Save directory:DIR” “$HOME/Downloads”
–field=“Download Options:CB” “Manual”
–field=“Simultaneous Downloads:NUM” “1!1…1!1”
–field=“youtube url:” “” \ # Only one url field for the Manual format selection
)"
RET=$?
Code:
case "$RET" in
   0)     # Continue
   ;;
   1)      # Canceled
   exit
   ;;
   2)
   MODE=0
   dialog
   ;;
   *)
   exit
   ;;
esac
fi
}

main(){
while :; do
dialog # calls the main dialog
Code:
OIFS=$IFS # save Internal Field Separator
IFS="|" # separator is "|" in returned choices

i=0
retChoice=()

e=0
URLIST=()
for ret in $ENTRY;do
retChoice[$i]="$ret"
i=$(($i+1)) # iterate i
if [[ “$i” -gt 3 ]] && [[ “$ret” != “” ]];then # get form fields if they are not empty
ret="${ret%%&}" # trim
URLIST[$e]="${ret##’=’}" # extract filename
YADBARS="$YADBARS --bar=${URLIST[$e]}:NORM" # add bars to a yad multiprogress dialog
e=$(($e+1)) # iterate e
fi
done
Code:
IFS=$OIFS # reset IFS back to default

SAVEDIR=${retChoice[0]} # directory path
OPTION=${retChoice[1]}
case $OPTION in
"Video (22/18/17)")
   UTUBE="-f 22/18/17"
;;
"Audio only (mp3)")
   UTUBE="--extract-audio --audio-format mp3 --audio-quality 0"
;;
esac
MAXDLS=${retChoice[2]}  # maximum number of simultaneous downloads

if [[ -z $SAVEDIR ]] || [[ ${#URLIST[@]} -eq 0 ]];then
    yad --form --text="Enter at least one url field\nand select a folder" --borders=10 \
    --center --title "$TITLE" --window-icon "$ICON" --image "$IMAGE" --button="gtk-ok:0"
else
    break
fi
done

if [[ “$MODE” = “1” ]]; then
for URL in ${URLIST[@]}; do
download_format “https://www.youtube.com/watch?v=$URL” # call format selection dialog
UTUBE="-f $FORMAT"
done
fi
}

download_urls(){
OIFS=$IFS # save Internal Field Separator
IFS=" " # separator is " " in returned choices

COUNTER=“1”
DYNAMIC_COUNTER=“1”
PID=()

for URL in ${URLIST[@]}; do
if [[ “$DYNAMIC_COUNTER” = “$MAXDLS” ]] # only download n files at a time
then
download “$URL” “$COUNTER” & # pass URL and counter number to download()
PID+=("$!") # gets process pid
max="$(($COUNTER-1))" # -1, since start counter is 1, and arrays begin at 0
MAX_PID=${PID[$max]} # sets the variable pid from array PID
wait $MAX_PID # wait until process with MAX_PID finishes
DYNAMIC_COUNTER=“1” # reset dynamic counter
else
download “$URL” “$COUNTER” & # pass URL and counter number to download()
PID+=("$!")
DYNAMIC_COUNTER="$(($DYNAMIC_COUNTER+1))" # iterate dinamic counter
fi
COUNTER="$[$COUNTER+1]" # iterate counter
done | yad --multi-progress $YADBARS --title “$TITLE” --button=“Cancel and Clean!gtk-close:1” --button=“Cancel!gtk-close:0”
–text “$TEXT” --center --window-icon “$ICON” --image “$IMAGE” --image-on-top --auto-close

if (( $? == 1 ));then # Download canceled, so clean up
for pid in ${PID[@]};do
kill $pid &>/dev/null # kill any running download process
done
for url in ${URLIST[@]}; do
rm “$(find $SAVEDIR -type f -name “-$url.” | grep part)” &>/dev/null #removes the part file
done
notify-send -t 3000 --icon “dialog-info” “Download cancelled”
exit
fi

IFS=$OIFS # reset IFS back to default
}

main # Call the main loop
download_urls # Launch the download
[/CODE]
 
Last edited:

Dragan

Well-known member
Staff member
Joined
Jan 13, 2012
Messages
6,371
Reaction score
65
@Misko_2083
Pokreće se normalno…i trimer radi kako treba 🆙
Ako/kada te ne bude mrzelo, mogao bi da i debianizuješ/spakuješ skriptu u deb, pa da je okačimo u repo 🙂
View attachment 3728
 
Last edited:
Top