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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env bash

##########################################################
# Run youtube-dl for each URL copied to system's clipboard
##########################################################
# Dependencies: youtube-dl, xclip
# Author: Mitxel Moriana <moriana.mitxel@gmail.com>
# GPLv3 <https://www.gnu.org/licenses/gpl-3.0.en.html>
##########################################################

# Exit on error
set -e

# Set max concurrent downloads:
maxParallelDownloads=3

# Set your download path:
downloadPath="$HOME/Descargas/Auto"
if [ ! -d "$downloadPath" ]; then
	echo "[ERROR] Download directory $downloadPath not found."
	echo "Bye bye"
	exit 1
fi

queue=()
getClipCmd="xclip -selection clipboard -o"
copiedURL=""

# Set the parallel downloads counter
export counter=$(mktemp "$HOME/.counter.XXXXXX")
printf "0\n" >"$counter" # Set counter to 0

# Quit execution
function quit() {
    if [ -t 0 ]; then stty sane; fi # Clear terminal options before exit
    echo "Bye bye"
    exit 0
}

# Verifies that a given string has a proper URL format
function verifyURL(){
    regex="(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]"
    if [[ "$1" =~ $regex ]]; then return 0; else return 1; fi
}

# Calls quit() on CTRL+C
trap quit INT

echo "Waiting for copied URLs... (press q or CTRL+C to exit)"

# Set terminal options to non blocking key read
if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

# Clear clipboard
echo "not a URL" | xclip 

lastKeypress=""
while [ "x$lastKeypress" != "xq" ]; do # Exit the loop on "q" keypress

    currentDownloads=$(< "$counter" )
    if [ ${#queue[@]} -ne 0 ] && [ "$currentDownloads" -lt "$maxParallelDownloads" ]; then
        (( ++currentDownloads ))
        printf '%s\n' "$currentDownloads" >"$counter"
        tryURL=${queue[0]}
        queue=("${queue[@]:1}")
        echo "Downloading media from $tryURL ("${#queue[@]}" URLs left in queue)"
        (
            (
            	cd "$downloadPath"
                downloadResult=$( youtube-dl "$tryURL" 2> /dev/null | tail -1 )
                if [[ "$downloadResult" == *"[download] 100% of"* ]]; then
                    echo "[SUCCESS] Finished downloading media from $tryURL"
                elif [[ "$downloadResult" == *"[download]"* ]]; then
                    echo "[ERROR] Unexpected interruption while downloading media from $tryURL"
                else
                    echo "[ERROR] Unable to download media from $tryURL"
                fi
            )
            currentDownloads=$(< "$counter" )
            (( --currentDownloads ))
            printf '%s\n' "$currentDownloads" >"$counter"
        ) & # Make subprocess run in parallel
    fi

	temp=$($getClipCmd)
	if [ "$temp" != "$copiedURL" ] && verifyURL ${temp}; then
	    copiedURL="$temp"
	    queue+=("$copiedURL")
	    echo "URL $copiedURL added to download queue ("${#queue[@]}" URLs in queue)"
	fi

    # Ensure we only get one (1) keypress
    lastKeypress="`dd bs=1 count=1 status=none | cat -v`"

	sleep 0.2

done

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.