Skip to content

Commit 4868236

Browse files
committed
initial commit
0 parents  commit 4868236

File tree

3 files changed

+1482
-0
lines changed

3 files changed

+1482
-0
lines changed

downtube/DownTube.sh

+349
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
#!/bin/bash -x
2+
3+
#Mainteneur : Yannou90
4+
#
5+
#Logiciel : DownTube bêta 3
6+
#
7+
#Dépendances : youtube-dl , yad , ffmpeg , lame , libmp3lame0 , xubuntu-restricted-extras , aria2
8+
#
9+
#Date : 15.07.2012
10+
#
11+
#Description : "DownTube" est une interface graphique à "youtube-dl" couplé à "aria2" un accélérateur de téléchargement . Il permet de télécharger une vidéo depuis Youtube , une chaine ou une playlist . Il permet également d'extraire l'audio de ces vidéos .
12+
#
13+
#Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes
14+
#de la Licence Publique Générale GNU publiée par la Free Software Foundation
15+
#(version 2 ou bien toute autre version ultérieure choisie par vous).
16+
#
17+
#Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE,
18+
#ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation
19+
# dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus
20+
#de détails.
21+
#
22+
#Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps
23+
#que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, Inc.,
24+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, États-Unis.
25+
26+
#Enregistrement des logs
27+
28+
echo -e "$(date)\n" 1>&2
29+
30+
#Variables
31+
32+
ICONP="$HOME/.icons"
33+
ICON="$ICONP/downtube.png"
34+
DOWNTUBEDIR="$HOME/.downtube"
35+
EXTRACTDIR="$DOWNTUBEDIR/TMP"
36+
DOWNTUBEPREF="$DOWNTUBEDIR/downtube.pref"
37+
AUTH=""
38+
COOKIES="$EXTRACTDIR/cookies.sqlite"
39+
CMD="youtube-dl --cookies=\"$COOKIES\" --get-filename -l -g"
40+
LISTE="$EXTRACTDIR/list.down"
41+
ENCODE="$EXTRACTDIR/encode.sh"
42+
COMPLETE=""
43+
USER=""
44+
MDP=""
45+
DIR=""
46+
QV="Normal"
47+
QA="Original"
48+
AUDIO="FALSE"
49+
URL=""
50+
SEG="8"
51+
POID="5"
52+
TRY="0"
53+
SORTIE=""
54+
55+
#Fonctions
56+
57+
function ERROR()
58+
{
59+
echo -e "
60+
MESSAGE=\"$@\"
61+
SORTIE=\"$SORTIE\"
62+
DIR=\"$DIR\"
63+
QV=\"$QV\"
64+
QA=\"$QA\"
65+
AUDIO=\"$AUDIO\"
66+
URL=\"$URL\"
67+
SEG=\"$SEG\"
68+
POID=\"$POID\"
69+
TRY=\"$TRY\"
70+
TITRE=\"$TITRE\"
71+
LINK=\"$LINK\"
72+
" 1>&2
73+
rm -rf "$EXTRACTDIR"
74+
exit 1
75+
}
76+
77+
function OPTIONS()
78+
{
79+
eval $(\
80+
yad \
81+
--title="DownTube - Options" \
82+
--window-icon="$ICON" \
83+
--form \
84+
--text="
85+
<b>Utilisateur</b> Exemple : [email protected] <b>*</b>
86+
<b>Mot de passe</b> Le mot de passe gmail <b>*</b>
87+
<b>Segmentation des fichiers</b> Le nombre de segments par fichier
88+
<b>Poids des segments en Mio</b> Le poid minimum par segments
89+
<b>Essais avant abandon</b> Le nombre d'essais maximum (0=max) avant d'abandonner un téléchargement
90+
91+
<b>*</b> Ces options sont facultatives : authentification pour le contenu adulte et privé
92+
" \
93+
--button="gtk-cancel:4" \
94+
--button="gtk-ok:0" \
95+
--field="Utilisateur" \
96+
--field="Mot de passe:H" \
97+
--field="Segmentation des fichiers:NUM" \
98+
--field="Poids des segments en Mio:NUM" \
99+
--field="Essais avant abandon:NUM" \
100+
"$USER" \
101+
"$MDP" \
102+
"$SEG!1..16!1" \
103+
"$POID!1..40!1" \
104+
"$TRY!0..20!1" \
105+
| awk -F'|' '{printf "USER=\"%s\"\nMDP=\"%s\"\nSEG=\"%s\"\nPOID=\"%s\"\nTRY=\"%s\"\n", $1, $2, $3, $4, $5}'
106+
echo "ETAT=${PIPESTATUS[0]}")
107+
108+
if [[ ! "$ETAT" = "0" ]]
109+
then
110+
if [[ -e "$DOWNTUBEPREF" ]]
111+
then
112+
source "$DOWNTUBEPREF"
113+
else
114+
USER=""
115+
MDP=""
116+
SEG="8"
117+
POID="5"
118+
TRY="0"
119+
fi
120+
fi
121+
122+
}
123+
124+
function ABOUT()
125+
{
126+
yad \
127+
--title="DownTube" \
128+
--text="
129+
<b>DownTube une interface graphique pour <a href='http://rg3.github.com/youtube-dl/'>Youtube-dl</a> couplé à <a href='http://aria2.sourceforge.net/'>Aria2</a> un accélérateur de téléchargement !
130+
L'indispensable <a href='http://ffmpeg.org/'>FFmpeg</a> est utilisé pour l'encodage audio</b>
131+
132+
\tDownTube supporte l'authentification aux services google,utile pour le contenu adulte et privé.
133+
Vous pouvez télécharger une chaine complete ou plusieurs vidéos en même temps,il suffit d'ajouter
134+
les liens les uns après les autres.
135+
\tAvec aria2 vous pouvez réduire considérablement la durée de téléchargement en sélectionnant
136+
la taille et le nombre de segments de fichiers téléchargé en parallèle.
137+
\tFFmpeg permet un encodage audio de grande qualitée en tirant le meilleur de votre machine.
138+
139+
<b>Developpeur</b> Yannou90
140+
<b>Bêta testeur</b> Nico
141+
<b>Dépendances</b> yad youtube-dl aria2c ffmpeg
142+
" \
143+
--window-icon="$ICON" \
144+
--image="$ICON" \
145+
--image-on-top \
146+
--button="gtk-ok:0"
147+
}
148+
149+
#Vérification et installation des dépendances
150+
151+
if [[ ! -d "$DOWNTUBEDIR" ]]
152+
then
153+
mkdir -p "$DOWNTUBEDIR"
154+
for i in youtube-dl yad ffmpeg lame libmp3lame0 xubuntu-restricted-extras aria2
155+
do
156+
dpkg --get-selections | grep -w install | grep -v "deinstall" | grep -w "^$i" || DEP="$i $DEP"
157+
done
158+
159+
if [[ -n "$DEP" ]]
160+
then
161+
zenity --info --title DownTube --text "Les paquets suivant vont êtres installés :\n$DEP"
162+
xterm -e "sudo apt-get install -y $DEP"
163+
fi
164+
if [[ ! -e "$ICON" ]]
165+
then
166+
mkdir -p "$ICONP"
167+
aria2c --dir="$ICONP" "http://dev.yannou90.free.fr/data/telechargement/downtube.png"
168+
fi
169+
fi
170+
171+
#Dossier de travail
172+
173+
if [[ ! -d "$EXTRACTDIR" ]]
174+
then
175+
mkdir -p "$EXTRACTDIR" || ERROR "Le dossier de destination n\'existe pas ou ne peut-être créé !"
176+
fi
177+
178+
#Si présent chargement des préférences
179+
180+
if [[ -e "$DOWNTUBEPREF" ]]
181+
then
182+
source "$DOWNTUBEPREF"
183+
fi
184+
185+
#Downtube
186+
187+
while [[ ! "$SORTIE" = "0" ]]
188+
do
189+
eval $(\
190+
yad \
191+
--width=800 \
192+
--height=600 \
193+
--title="DownTube" \
194+
--window-icon="$ICON" \
195+
--button="gtk-preferences:2" \
196+
--button="gtk-about:3" \
197+
--button="gtk-cancel:1" \
198+
--button="gtk-ok:0" \
199+
--form \
200+
--field="Destination:DIR" \
201+
--field="Qualitée vidéo:CB" \
202+
--field="Qualitée audio:CB" \
203+
--field="Extraire l'audio : attention à la qualitée de la vidéo qui détermine le temps de téléchargement !:CHK" \
204+
--field="Url(s):TXT" \
205+
"$DIR" \
206+
"$QV!Haute!Normal!Basse!H264-MP4-3072p!H264-MP4-1080p!H264-MP4-720p!H264-MP4-360p!H264-FLV-480p!H264-FLV-360p!H263-FLV-270p!H263-FLV-240p!WebM-1080p!WebM-720p!WebM-480p!WebM-360p!3GP-240p!3GP-144p" \
207+
"$QA!Ogg!Mp3!Ac3!Wav!Wma" \
208+
"$AUDIO" \
209+
"" \
210+
| awk -F'|' '{printf "DIR=\"%s\"\nQV=\"%s\"\nQA=\"%s\"\nAUDIO=\"%s\"\nURL=\"%s\"\n", $1, $2, $3, $4, $5}'
211+
echo "SORTIE=${PIPESTATUS[0]}")
212+
213+
case "$SORTIE" in
214+
2)
215+
OPTIONS;;
216+
3)
217+
ABOUT;;
218+
1|252)
219+
ERROR "L'utilisateur à quitté DownTube !";;
220+
esac
221+
222+
done
223+
224+
#Enregistrement des préférences
225+
226+
echo -e "
227+
USER=\"$USER\"
228+
MDP=\"$MDP\"
229+
DIR=\"$DIR\"
230+
QV=\"$QV\"
231+
QA=\"$QA\"
232+
AUDIO=\"$AUDIO\"
233+
SEG=\"$SEG\"
234+
POID=\"$POID\"
235+
TRY=\"$TRY\"
236+
" > "$DOWNTUBEPREF"
237+
238+
#Test et formatage URL : si echoué on quitte
239+
240+
if [[ ! -n "$URL" ]]
241+
then
242+
ERROR "Pas d'URL ."
243+
fi
244+
245+
URL="$(echo "$URL" | sed -e 's/\\n/ /g;s/http/ http/g')"
246+
247+
#Test utilisateur et mot de passe : si présent on l'utilise pour la connexion
248+
249+
if [[ -n "$USER" ]] && [[ -n "$MDP" ]]
250+
then
251+
AUTH="-u $USER -p $MDP"
252+
fi
253+
254+
#Qualitée vidéo
255+
256+
case $QV in
257+
Haute)
258+
FORMAT="";;
259+
Basse)
260+
FORMAT="--format=worst";;
261+
H264-MP4-3072p)
262+
FORMAT="--max-quality=38";;
263+
H264-MP4-1080p)
264+
FORMAT="--max-quality=37";;
265+
H264-MP4-720p)
266+
FORMAT="--max-quality=22";;
267+
Normal|H264-MP4-360p)
268+
FORMAT="--max-quality=18";;
269+
H264-FLV-480p)
270+
FORMAT="--max-quality=35";;
271+
H264-FLV-360p)
272+
FORMAT="--max-quality=34";;
273+
H263-FLV-270p)
274+
FORMAT="--max-quality=6";;
275+
H263-FLV-240p)
276+
FORMAT="--max-quality=5";;
277+
WebM-1080p)
278+
FORMAT="--max-quality=46";;
279+
WebM-720p)
280+
FORMAT="--max-quality=45";;
281+
WebM-480p)
282+
FORMAT="--max-quality=44";;
283+
WebM-360p)
284+
FORMAT="--max-quality=43";;
285+
H263-240p)
286+
FORMAT="--max-quality=5";;
287+
3GP-240p)
288+
FORMAT="--max-quality=36";;
289+
3GP-144p)
290+
FORMAT="--max-quality=17";;
291+
esac
292+
293+
#Qualitée audio
294+
295+
if [[ "$AUDIO" = "TRUE" ]]
296+
then
297+
case $QA in
298+
Ogg)
299+
echo -e '#!/bin/bash
300+
ffmpeg -i "$3" -acodec libvorbis -aq 3 -vn -ac 2 "$3".ogg
301+
rm "$3"
302+
exit $?
303+
' > "$ENCODE";;
304+
Mp3)
305+
echo -e '#!/bin/bash
306+
ffmpeg -i "$3" -acodec libmp3lame -ab 160k -ac 2 -ar 44100 "$3".mp3
307+
rm "$3"
308+
exit $?
309+
' > "$ENCODE";;
310+
Ac3)
311+
echo -e '#!/bin/bash
312+
ffmpeg -i "$3" -f ac3 -acodec ac3 -ab 192k -ar 48000 -ac 2 "$3".ac3
313+
rm "$3"
314+
exit $?
315+
' > "$ENCODE";;
316+
Wav)
317+
echo -e '#!/bin/bash
318+
ffmpeg -i "$3" -vn -ar 44100 "$3".wav
319+
rm "$3"
320+
exit $?
321+
' > "$ENCODE";;
322+
Wma)
323+
echo -e '#!/bin/bash
324+
ffmpeg -i "$3" -vn -acodec wmav2 -ab 160k "$3".wma
325+
rm "$3"
326+
exit $?
327+
' > "$ENCODE";;
328+
esac
329+
chmod +x "$ENCODE"
330+
COMPLETE="--on-download-complete=\"$ENCODE\""
331+
fi
332+
333+
#Téléchargement
334+
335+
(echo; eval $CMD $AUTH $FORMAT "$URL" 2>/dev/null | sed -r -e "s/ /_/g; s/^/out=/g; s/out=http/http/g; s|out=|\tdir=$DIR\n\tout=|g; /^$/d" > "$LISTE") | zenity --progress --pulsate --auto-close --title DownTube --text "Construction de la liste de téléchargement\nveuillez patienter ..."
336+
337+
SEG="$(echo $SEG | cut -d',' -f1)"
338+
POID="$(echo $POID | cut -d',' -f1)"
339+
TRY="$(echo $TRY | cut -d',' -f1)"
340+
341+
xterm -T Téléchargement -e "aria2c $COMPLETE --file-allocation=falloc --load-cookies=\"$COOKIES\" -i\"$LISTE\" -s\"$SEG\" -x\"$SEG\" -j\"$SEG\" -k\"$POID\"M -m\"$TRY\"; espeak -v fr -s 150 -p 75 \"Les téléchargements sont terminés . Appuyez sur une touche pour quitter . Merci , et à bientôt .\" &>/dev/null; echo \"Appuyez sur une touche pour quitter\"; read"
342+
343+
#On nettoie
344+
345+
rm -rf "$EXTRACTDIR"
346+
347+
#On quitte
348+
349+
exit 0

0 commit comments

Comments
 (0)