Hello all! Woof!
I got a script from this forum - YouTube download.
This shell program sits in the top corner of the desk-top. Using click & drag the script will put a you-tube file in your drive.
Great program - but it doesn't work with this file:
https://www.youtube.com/results?search_ ... nian+style
The video is called "A country fair, Tasmanian style"
It's a beaut little home-video made by an American travelling in Tasmania. (Oh! You don't know about Tasmania? It's an island south of Australia, 26,215 square miles in area.)
Any ideas why the you-tube down-loader works for nearly everything except this file?
собака
o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o
The code:
I put this in /bin. Click to run.
Code: Select all
#!/bin/bash
if [ -z $(busybox which gxmessage) ]; then
MESSAGE=xmessage
else
MESSAGE=gxmessage
fi
if [ -z `busybox which yad` ]; then
msg=" You don't have yad installed.\nIt's a dependency of this program.\n Please install it."
echo $msg
$MESSAGE "`echo -e $msg`"
exit 0
fi
if [ -z `busybox which yad` ]; then
msg=" You don't have yad installed.\nIt's a dependency of this program.\n Please install it."
echo $msg
$MESSAGE "`echo -e $msg`"
exit 0
fi
if [ -z `busybox which youtube-dl` ] && [ -z `busybox which youtube-dlc` ]; then
msg=" You don't have youtube-dl or youtube-dlc installed.\n It's a dependency of this program.\n Please install it."
echo -e "$msg"
yad --center --text=" $msg " --button="gtk-close:0"
exit
fi
if [ $(busybox which youtube-dl) ]; then
YTDL=youtube-dl
elif [ $(busybox which youtube-dlc) ]; then
YTDL=youtube-dlc
fi
# Config file for to remember Downloads folder
if [ ! -f "$HOME/.config/ytdl-dnd.conf" ]; then
DL_DIR=$HOME
echo "$DL_DIR" > "$HOME/.config/ytdl-dnd.conf"
else
if [ -z "$(cat "$HOME/.config/ytdl-dnd.conf")" ]; then
DL_DIR=$HOME
echo "$DL_DIR" > "$HOME/.config/ytdl-dnd.conf"
fi
fi
TITLE="YouTube downloader, do not close until done" # dialog title
TEXT=" <b>Download</b> in progress:" # dialog text
export ICON="/tmp/yt_dl.svg"
if [ ! -e "$ICON" ]; then
SVG='<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"> <image id="image0" width="48" height="48" x="0" y="0"
xlink:href="data:image/png;base64,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
MDM6MDCknuZpAAAAAElFTkSuQmCC" />
</svg>'
echo "$SVG" > /tmp/yt_dl.svg
fi
dnd() {
kill $pdyad 2> /dev/null
dload(){
# Starts the download and pipes the output to a loop
# Loop is used to display the text in multi-progressbar
$YTDL --no-check-certificate -c -f "$QUAL" --newline -i -o "$DL_DIR/%(title)s.%(ext)s" "$1" 2>&1 \
| while read -r line; do
if [[ "$(echo $line | grep '[0-9]*%')" ]];then
percent=$(echo $line | awk '{print $2}')
echo "$2:${percent%.*}" # sends percentage to the progress bar
fi
if [[ "$(echo $line | grep -E '\[download\]')" ]];then
progress=$(echo $line | awk '{print $2,$4,$5,$6,$7,$8}')
echo "$2:#$progress" # sends text to the progressbar
fi
done
RET_YT="${PIPESTATUS[0]}"
if [[ "$RET_YT" = 0 ]]
then
echo "$2:100%"
echo "$2:#Download completed."
else
echo "$2:#Download error."
fi
}
export -f dload
iterate () {
IFS=" "
COUNTER="1"
DYNAMIC_COUNTER="1"
# main
# iterate through all URIs, download them in the background and
# pipe all output simultaneously to yad
# source: http://pastebin.com/yBL2wjaY
kill $pd
cat "$URILIST" | while read -r URI;
do
if [[ "$DYNAMIC_COUNTER" = "$MAXDLS" ]] # only download n files at a time
then
dload "$URI" "$COUNTER" # if limit reached wait until wget complete
DYNAMIC_COUNTER="1" # before proceeding (by not sending download() to bg)
else
dload "$URI" "$COUNTER" & # pass URI and URI number to download()
DYNAMIC_COUNTER="$[$DYNAMIC_COUNTER+1]"
fi
COUNTER="$[$COUNTER+1]" # increment counter
done | yad --center --image-on-top --multi-progress --on-top --auto-kill $YADBARS --title "$TITLE" \
--text "$TEXT" --window-icon "$ICON" --image "$ICON"
# ^ launch yad multi progress-bar window
rm -f "$URILIST"
}
export -f iterate
DROP_SIZE="40x40"
DROP_GEOM="+5+5"
DROP_TEXT="Drag N' Drop \nYoutube URL"
## Main GUI function
drag_main() {
yad \
--image="$ICON" \
--geometry="${DROP_SIZE}$DROP_GEOM" \
--title="DragnDrop" \
--dnd --sticky --on-top \
--undecorated --no-buttons
}
# Drag and drop handler
drag_main | while read line
do
[ "$QUALT" ] && QLT="$QUALT!Quality Medium 360p!Quality High 720p!Quality Very High!Quality Highest!Quality Low!Quality Lowest!Audio Only" || QLT="Quality Medium 360p!Quality High 720p!Quality Very High!Quality Highest!Quality Low!Quality Lowest!Audio Only"
DL_DIR=`cat "$HOME/.config/ytdl-dnd.conf"`
qual_opt() {
if [ "$QLT" = "Quality Medium 360p" ]; then
QUAL=18/34/43/35/5/17
fi
if [ "$QLT" = "Quality High 720p" ]; then
QUAL=22/44/35/43/18/34/5/17
fi
if [ "$QLT" = "Quality Low" ]; then
QUAL="bestvideo[height<=350]+worstaudio"
fi
if [ "$QLT" = "Quality Lowest" ]; then
QUAL="worstvideo+worstaudio"
fi
if [ "$QLT" = "Audio Only" ]; then
QUAL=140/251/250
fi
if [ "$QLT" = "Quality Very High" ]; then
QUAL="bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio"
fi
if [ "$QLT" = "Quality Highest" ]; then
QUAL="bestvideo+bestaudio"
fi
}
YTURL="$line"
case $YTURL in
*youtube.com*v%3D*) VIDID=${YTURL#*v%3D};;
*youtube.com*v=*) VIDID=${YTURL#*v=};;
*youtu.be* ) VIDID=${YTURL#*.be/};;
* ) yad --center --no-markup --text "Not a recognized YouTube URL:\n\n${YTURL::50}" --button="gtk-close:0"; continue;;
esac
VIDID=${VIDID::11}
choice="https://www.youtube.com/watch?v=$VIDID"
down_load() {
export loglst=/tmp/test$$
export URILIST=/tmp/tMPlist$RANDOM
tail -f $HOME/.config/youtube-get.conf | yad --center --borders 5 --progress --width=400 --progress-text "Please Wait... Download will start in a moment" --pulsate --undecorated --no-buttons &
pd=$!
while read -r url; do
qual_opt
URLFILE=$($YTDL -sci -f $QUAL --get-id --get-filename -o "%(title)s" $url | grep -v "WARNING:" 2>&1 | tee $loglst)
LOG_ERROR="$(cat $loglst 2> /dev/null | grep 'ERROR' | sed -e 's/\([[:punct:]]\)/ /g' | cut -c1-100)"
rm -f $loglst
if [ -n "$LOG_ERROR" ]; then
kill `jobs -p` $pd 2> /dev/null
yad --title="YouTube-Downloader" --center --text " Sorry, there was an error, youtube-dl output:\n ${LOG_ERROR} ... " --button="gtk-close:0"
continue
fi
rm -f $loglst
#URLFILE=$(echo $url | sed 's|https://www.youtube.com/watch?v=||')
URL=$(echo "$URLFILE" | sed -n 1p)
FILE=$(echo "$URLFILE" | sed -n 2p)
#FORMAT=$(echo "$URLFILE" | sed -n 3p | awk '{ print $1 }')
FILENAME=$(echo "${FILE%.*}" | sed -e 's/\([[:punct:]]\)/ /g;s/ /-/g;s/^[-\t]*//' | tr -s '-')
ext=$(echo "${FILE##*.}")
echo -e "${URL}" > "$URILIST"
if [ $(echo "$FILENAME" | wc -c) -gt 80 ]; then
YADBAR="$(echo "$FILENAME" | busybox strings | sed 'N;s/\n//' | cut -c1-80)"
YADBARS="$YADBARS --bar=$YADBAR...:NORM"
else
YADBAR="$(echo "$FILENAME")"
YADBARS="$YADBARS --bar=$YADBAR:NORM"
fi
done <<< "$choice"
kill `jobs -p` $pd 2> /dev/null
iterate
rm -f $URILIST
}
itag_list() {
echo "$LIST" | awk 'BEGIN {FS=" " } { print $1 }' | grep "^${1}$"
}
export -f itag_list
qual_list() {
LIST=$($YTDL -F $url | grep -v "WARNING:")
itag_list 45
itag_list 22
itag_list 44
itag_list 35
itag_list 18
itag_list 43
itag_list 34
itag_list 36
itag_list 5
itag_list 17
itag_list 141
itag_list 171
itag_list 140
}
export -f qual_list
#if [ "$confdone" != "yes" ]; then
choices=$(yad --image="$ICON" --window-icon="$ICON" --center --height 220 --image-on-top \
--title="YouTube-Get" \
--form --align=center --columns=1 \
--text=" <b>*** Download from drag n' drop YouTube url ***</b> \n Note: some quality options require <b>ffmpeg</b> to be installed\n (except 'Medium' and 'High')" \
--field="Quality (if available)::CB" "$QLT" \
--field="Downloads folder::DIR" "$DL_DIR" \
--button="gtk-cancel:1" --button='gtk-ok:0')
ret=$?
echo $ret
[[ $ret -eq 1 ]] && unset QLT && continue
[[ $ret -eq 252 ]] && unset QLT && continue
#[[ $ret -eq 2 ]] && exec $0
echo "$choices"
choices=$(echo "$choices" | tr -d '\r')
#echo "$choices"
#choice=$(printf "$choices" | awk 'BEGIN {FS="|" } { print $1 }')
QLT=$(echo $choices | awk 'BEGIN {FS="|" } { print $1 }')
#SHOW=$(echo $choices | awk 'BEGIN {FS="|" } { print $3 }')
DL_DIR=$(echo $choices | awk 'BEGIN {FS="|" } { print $2 }')
echo "$DL_DIR" > "$HOME/.config/ytdl-dnd.conf"
DL_DIR=`cat "$HOME/.config/ytdl-dnd.conf"`
#fi
#confdone=yes
QUALT="$QLT"
down_load
unset YADBARS
done
}
export -f dnd
##### end drag n' drop section #####
dnd