Dejo por aquí un bash script que nos permite bajar el contenido audiovisual de un montón de webs como youtube, con tan sólo copiar la URL, es decir, hacer CTRL+C (o botón derecho y copiar) una vez tenemos seleccionada la URL que nos interesa.

El script asume que tienes instalado youtube-dl y xclip, así como sus respectivas dependencias.

youtube-dl es un programa de línea de comandos escrito en python que nos permite rastrear y bajar los recursos audiovisuales de múltiples webs. El programa está en permanente actualización y es compatible con gran parte de las webs de contenidos multimedia más conocidas del mundo. xclip es el programa que nos permite interactuar desde la línea de comandos con el clipboard de nuestro sistema linux.

¿Cómo funciona?

Copia el código y guárdalo en un nuevo fichero llamado (por ejemplo) youtube-autodl.sh. Pon el fichero, con permisos de ejecución, en la carpeta donde deseas descargar los contenidos. Edita el código con el número máximo de subprocesos de download que quieres que se ejecuten paralelamente. A continuación ejecuta el script escribiendo:

./youtube-autodl

Mientras el script permanezca en ejecución, se mantendrá a la espera de que selecciones y copies nuevas URLs, de las que tratará de bajarse los contenidos audiovisuales que encuentre. Si alcanzas el número máximo de downloads paralelos, añadirá las nuevas URLs que copies a una cola de URLs y las usará tan pronto termine alguno de los downloads en curso.

El script

 1 #!/usr/bin/env bash
 2 
 3 ##########################################################
 4 # Run youtube-dl for each URL copied to system's clipboard
 5 ##########################################################
 6 # Dependencies: youtube-dl, xclip
 7 # Author: Mitxel Moriana <moriana.mitxel@gmail.com>
 8 # GPLv3 <https://www.gnu.org/licenses/gpl-3.0.en.html>
 9 ##########################################################
10 
11 # Exit on error
12 set -e
13 
14 # Set max concurrent downloads:
15 maxParallelDownloads=3
16 
17 # Set your download path:
18 downloadPath="$HOME/Descargas/Auto"
19 if [ ! -d "$downloadPath" ]; then
20 	echo "[ERROR] Download directory $downloadPath not found."
21 	echo "Bye bye"
22 	exit 1
23 fi
24 
25 queue=()
26 getClipCmd="xclip -selection clipboard -o"
27 copiedURL=""
28 
29 # Set the parallel downloads counter
30 export counter=$(mktemp "$HOME/.counter.XXXXXX")
31 printf "0\n" >"$counter" # Set counter to 0
32 
33 # Quit execution
34 function quit() {
35     if [ -t 0 ]; then stty sane; fi # Clear terminal options before exit
36     echo "Bye bye"
37     exit 0
38 }
39 
40 # Verifies that a given string has a proper URL format
41 function verifyURL(){
42     regex="(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]"
43     if [[ "$1" =~ $regex ]]; then return 0; else return 1; fi
44 }
45 
46 # Calls quit() on CTRL+C
47 trap quit INT
48 
49 echo "Waiting for copied URLs... (press q or CTRL+C to exit)"
50 
51 # Set terminal options to non blocking key read
52 if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
53 
54 # Clear clipboard
55 echo "not a URL" | xclip 
56 
57 lastKeypress=""
58 while [ "x$lastKeypress" != "xq" ]; do # Exit the loop on "q" keypress
59 
60     currentDownloads=$(< "$counter" )
61     if [ ${#queue[@]} -ne 0 ] && [ "$currentDownloads" -lt "$maxParallelDownloads" ]; then
62         (( ++currentDownloads ))
63         printf '%s\n' "$currentDownloads" >"$counter"
64         tryURL=${queue[0]}
65         queue=("${queue[@]:1}")
66         echo "Downloading media from $tryURL ("${#queue[@]}" URLs left in queue)"
67         (
68             (
69             	cd "$downloadPath"
70                 downloadResult=$( youtube-dl "$tryURL" 2> /dev/null | tail -1 )
71                 if [[ "$downloadResult" == *"[download] 100% of"* ]]; then
72                     echo "[SUCCESS] Finished downloading media from $tryURL"
73                 elif [[ "$downloadResult" == *"[download]"* ]]; then
74                     echo "[ERROR] Unexpected interruption while downloading media from $tryURL"
75                 else
76                     echo "[ERROR] Unable to download media from $tryURL"
77                 fi
78             )
79             currentDownloads=$(< "$counter" )
80             (( --currentDownloads ))
81             printf '%s\n' "$currentDownloads" >"$counter"
82         ) & # Make subprocess run in parallel
83     fi
84 
85 	temp=$($getClipCmd)
86 	if [ "$temp" != "$copiedURL" ] && verifyURL ${temp}; then
87 	    copiedURL="$temp"
88 	    queue+=("$copiedURL")
89 	    echo "URL $copiedURL added to download queue ("${#queue[@]}" URLs in queue)"
90 	fi
91 
92     # Ensure we only get one (1) keypress
93     lastKeypress="`dd bs=1 count=1 status=none | cat -v`"
94 
95 	sleep 0.2
96 
97 done
98 
99 quit

Aviso probablemente innecesario

No me hago responsable de los daños causados por el uso de este script, incluyendo, aunque no de forma exclusiva: que no funcione, que te explote el PC, que haga algo que no te guste, que te perjudique algún fichero, que te abduzcan los extraterrestres, que invoque a un espíritu del averno o que te deje tu pareja.

Como norma general, no ejecutes nada sin saber previamente lo que hace. Aún menos si te lo pide alguien por internet.