Pobieranie filmów z YouTube z poziomu konsoli

Na temat pobierania materiałów z serwisu YouTube odbyło się już wiele debat. Są wtyczki, są programy specjalnie pisane tylko pod to konkretne zadanie. Jednak opierają się wszystkie one albo o środowisko graficzne, albo o przeglądarkę. W tym artykule zaprezentuje narzędzie o nazwie youtube-dl, które działa w trybie… tekstowym.

youtube-dl to niewielka aplikacja działające w trybie tekstowym, która umożliwia pobieranie materiałów z serwisu YouTube. W takich dystrybucjach jak np. Debian, Ubuntu, Ubuntu Server znajduje się ono domyślnie w repozytorium, więc z instalacją nie powinno być żadnych problemów. Nie jest to ubogie narzędzie. Po wydaniu polecenia –help program naprawdę posiada wiele opcji:

Usage: youtube-dl [options] url [url...]

Options:
  General Options:
    -h, --help               print this help text and exit
    -v, --version            print program version and exit
    -U, --update             update this program to latest version
    -i, --ignore-errors      continue on download errors
    -r, --rate-limit LIMIT   download rate limit (e.g. 50k or 44.6m)
    -R, --retries RETRIES    number of retries (default is 10)
    --dump-user-agent        display the current browser identification
    --list-extractors        List all supported extractors and the URLs they would handle

  Video Selection:
    --playlist-start NUMBER  playlist video to start at (default is 1)
    --playlist-end NUMBER    playlist video to end at (default is last)
    --match-title REGEX      download only matching titles (regex or caseless sub-string)
    --reject-title REGEX     skip download for matching titles (regex or caseless sub-string)
    --max-downloads NUMBER   Abort after downloading NUMBER files

  Filesystem Options:
    -t, --title              use title in file name
    -l, --literal            use literal title in file name
    -A, --auto-number        number downloaded files starting from 00000
    -o, --output TEMPLATE    output filename template. Use %(stitle)s to get the title, %(uploader)s for the uploader
                             name, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename
                             extension, %(upload_date)s for the upload date (YYYYMMDD), and %% for a literal percent.
                             Use - to output to stdout.
    -a, --batch-file FILE    file containing URLs to download ('-' for stdin)
    -w, --no-overwrites      do not overwrite files
    -c, --continue           resume partially downloaded files
    --no-continue            do not resume partially downloaded files (restart from beginning)
    --cookies FILE           file to read cookies from and dump cookie jar in
    --no-part                do not use .part files
    --no-mtime               do not use the Last-modified header to set the file modification time
    --write-description      write video description to a .description file
    --write-info-json        write video metadata to a .info.json file

  Verbosity / Simulation Options:
    -q, --quiet              activates quiet mode
    -s, --simulate           do not download the video and do not write anything to disk
    --skip-download          do not download the video
    -g, --get-url            simulate, quiet but print URL
    -e, --get-title          simulate, quiet but print title
    --get-thumbnail          simulate, quiet but print thumbnail URL
    --get-description        simulate, quiet but print video description
    --get-filename           simulate, quiet but print output filename
    --get-format             simulate, quiet but print output format
    --no-progress            do not print progress bar
    --console-title          display progress in console titlebar

  Video Format Options:
    -f, --format FORMAT      video format code
    --all-formats            download all available video formats
    --prefer-free-formats    prefer free video formats unless a specific one is requested
    --max-quality FORMAT     highest quality format to download
    -F, --list-formats       list all available formats (currently youtube only)

  Authentication Options:
    -u, --username USERNAME  account username
    -p, --password PASSWORD  account password
    -n, --netrc              use .netrc authentication data

  Post-processing Options:
    --extract-audio          convert video files to audio-only files (requires ffmpeg and ffprobe)
    --audio-format FORMAT    "best", "aac", "vorbis", "mp3", "m4a", or "wav"; best by default
    --audio-quality QUALITY  ffmpeg audio bitrate specification, 128k by default
    -k, --keep-video         keeps the video file on disk after the post-processing; the video is erased by default

Pobieramy materiał

Ogólne polecenie do tego zadania wygląda tak:

youtube-dl |link| -o |sciezka/nazwa_pliku.flv|

Jeżeli byśmy nie podali flagi -o, to program zapisze plik w katalogu domowym. Jedyny haczyk tkwi w linku. Otóż należy pamiętać, aby kopiować tylko link z identyfikatorem materiału. Nic się nie stanie, jeżeli przekopiujemy link w takiej postaci:

http://www.youtube.com/watch?v=Tk76cskmvOw&feature=related

Ale gdy program nic nie odnajdzie, wtedy wklejamy to:

http://www.youtube.com/watch?v=Tk76cskmvOw

Czyli usuwamy wszystko po znaku &. Pamiętamy jednak, aby jego też usunąć.

Teraz wystarczy tylko wcisnąć Enter i rozpocznie się pobieranie materiału.

Skrypt

Jeżeli ktoś chciałby napisać skrypt, w którym zmienialibyśmy tylko link, to naturalnie można. Przygotujmy sobie zatem w katalogu domowym folderu o nazwie youtube. Odpalamy terminal i wpisujemy:

mkdir youtube

Przechodzimy do tego folderu:

cd ./youtube

I w nim wykonujemy dwa polecenia:

mkdir pobrane

touch youtube.sh

Pierwsze tworzy folder o nazwie pobrane. W nim będą lądować wszystkie pobierane pliki. Drugie tworzy pusty plik z rozszerzeniem .sh. Z teraz racji, ze ów plik będzie plikiem wykonywalnym, musimy nadać mu prawa do uruchamiania.

chmod +x youtube.sh

Ok. Gotowe. Teraz otwieramy edytor nano z tym plikiem.

nano youtube.sh

Jako treść wpisujemy:

#!\bin\sh
youtube-dl http://www.youtube.com/watch?v=NPaygvwt7bk -o /home/user/pobrane/plik.flv

gdzie:

http://www.youtube.com/watch?v=NPaygvwt7bk to link z materiałem

/home/user/pobrane/plik.flv lokalizacja, nazwa i rozszerzenie pliku do którego wszystko zostanie zapisane.

Zapisujemy zmiany. Teraz jeżeli chcemy wywołać nasz skrypt, to przechodzimy do katalogu gdzie go zapisaliśmy i wpisujemy:

sh youtube.sh

Rozpocznie się pobieranie materiału.