[PYTHON] Présentation de youtube-dl, un outil de téléchargement vidéo qui fonctionne sur la ligne de commande, et sa fonction de complétion zsh.

Présentation de l'outil youtube-dl qui fonctionne sur la ligne de commande et télécharge des vidéos à partir de sites vidéo tels que Youtube. De plus, comme cette option est trop longue à retenir, j'ai écrit une fonction de complétion pour zsh, donc je vais la présenter.

youtube-dl

Comment utiliser

Depuis le terminal

youtube-dl "URL"

Si vous l'exécutez, vous pouvez le télécharger s'il s'agit d'un site compatible.

Installation

Comment installer

Avec le module de gestion de paquets de Python pip

sudo pip install youtube-dl

Vous pouvez l'installer avec. Cependant, notez que le nom du module Python est souligné par youtube_dl dans les spécifications.

Il semble facile à installer en utilisant Homebrew sur Mac.

brew install youtube-dl

Si vous souhaitez construire à partir de la source, veuillez consulter la famille principale.

Site correspondant

Les sites pris en charge sont

youtube-dl --extractor-description

Vous pouvez le voir en l'exécutant, mais il semble qu'il supporte actuellement 621 sites. Je pense que YouTube, bien sûr, les vidéos de Nico Nico, Twitch et d'autres lieux célèbres sont couverts. Voici ceux avec des liens vers les sites pour chacun. … Il existe de nombreux sites suspects, soyez donc prudent lorsque vous visitez.

Spécifier les options

De plus, comme vous pouvez le voir dans l'aide, vous pouvez l'exécuter avec diverses options. La façon la plus simple de l'utiliser est simplement sans options comme mentionné au début.

youtube-dl "URL"

C'est une méthode pour coller directement l'url sous forme de. Dans Youtube, vous pouvez également spécifier l'ID sous watch = dans l'URL. Vous pouvez également télécharger toutes les vidéos enregistrées dans la playlist simplement en le spécifiant.

Spécifier le format de téléchargement

Vous pouvez également spécifier le format de la vidéo et la télécharger, vous pouvez afficher le format de téléchargement pris en charge avec -F, et spécifier le format de celles-ci avec -f et exécuter Je peux.

Spécifiez le nom du fichier de sauvegarde dans le modèle

Ensuite, vous pouvez spécifier le nom du fichier à enregistrer avec -o, mais en écrivant un modèle ici, le titre de la vidéo, le titre de la playlist, le numéro dans la playlist, le site à partir duquel vous l'avez téléchargée, le téléchargeur Etc. peut être inclus dans le nom du fichier vidéo. Pour plus d'informations (ry

Télécharger plusieurs vidéos spécifiées

En outre, il peut être utile de se rappeler que vous pouvez placer tous les fichiers que vous souhaitez télécharger dans un fichier texte et plus tard

youtube-dl -a dl_list

Si tel est le cas, il téléchargera toutes les vidéos de ce fichier.

Ajoutez l'option ignore-errors pour les téléchargements qui prennent du temps

Lors du téléchargement de nombreuses vidéos, comme lors du téléchargement à partir d'une liste de lecture, l'ajout de l'option -i est pratique car elle ignore les erreurs qui se produisent au milieu et continue de traiter la vidéo suivante.

De plus, les fichiers vidéo qui ont arrêté le traitement pour une raison quelconque, comme un dysfonctionnement du réseau, sont enregistrés avec l'extension .part, alors utilisez à nouveau la commande youtube-dl pour enregistrer avec le même nom de fichier. Une fois exécuté, le téléchargement reprendra à partir du milieu. Cependant, veuillez noter que si vous interrompez le processus avec Ctrl-c etc., vous devrez peut-être recommencer.

Lecture en continu sans téléchargement

Si vous voulez le lire en streaming au lieu de le télécharger, utilisez l'option -o pour le sortir en sortie standard et le diriger vers mplayer.

youtube-dl URL -o - | mplayer -

Si vous utilisez un lecteur multimédia capable de lire des vidéos à partir d'URL telles que mplayer et vlc, vous pouvez le lire tel quel. Dans mpv, le hook youtube-dl est préparé, vous pouvez donc le lire simplement en collant l'URL de la vidéo telle quelle. (Il peut ne pas être possible de lire avec la méthode ci-dessus)

fonction de complétion zsh

Généré automatiquement

Parmi les scripts préparés dans youtube-dl, il y a un script qui génère automatiquement la fonction de complétion zsh.

Téléchargez ces deux et dans le même répertoire, regardez la ligne 12 de zsh-completion.py

ZSH_COMPLETION_TEMPLATE = "zsh-completion.in"

Changer pour

python zsh-completion.py

Crée un fichier appelé youtube-dl.zsh dans le même répertoire. Si vous placez ceci dans le répertoire où vous avez placé la fonction de complétion zsh, lorsque youtube-dl est exécuté, toutes les options longues seront affichées, et pour certaines options, le nom du fichier et le répertoire Il sera également complété.

Un petit tweak

Cependant, j'ai l'impression de devoir me souvenir des options que j'utilise souvent telles quelles, alors voici quelques-unes de mes propres modifications. Veuillez le télécharger et l'utiliser de manière appropriée. Si vous souhaitez ajouter ou écrire quelque chose de mieux, je vous serais reconnaissant si vous pouviez me le faire savoir d'une manière ou d'une autre.

#-------- youtube-dl completion
# put this script in your .zshrc
# generated by:
# https://github.com/rg3/youtube-dl/blob/master/devscripts/zsh-completion.in
# https://github.com/rg3/youtube-dl/blob/master/devscripts/zsh-completion.py
# and modified manually by Shotaro Fujimoto (https://github.com/ssh0)

__youtube_dl() {
  local curcontext="$curcontext" fileopts diropts cur prev
  typeset -A opt_args
  fileopts="--download-archive|-a|--batch-file|--load-info|--cookies|--ffmpeg-location"
  diropts="--cache-dir"
  local ddir="/media/shotaro/STOCK/Videos"
  cur=$words[CURRENT]
  case $cur in
    :)
      _arguments '*: :(::ytfavorites ::ytrecommended ::ytsubscriptions ::ytwatchlater ::ythistory)'
    ;;
    *)
      prev=$words[CURRENT-1]
      if [[ ${prev} =~ ${fileopts} ]]; then
        _path_files
      elif [[ ${prev} =~ ${diropts} ]]; then
        _path_files -/
      elif [[ ${prev} == "--recode-video" ]]; then
        _arguments '*: :(mp4 flv ogg webm mkv)'
      elif [[ ${prev} == "--audio-format" ]]; then
        _arguments '*: :(best aac vorbis mp3 m4a opus wav)'
      elif [[ ${prev} == "--convert-subtitle" ]]; then
        _arguments '*: :(srt ass vtt)'
      elif [[ ${prev} =~ "-o|--output" ]]; then
        _arguments "*: :(\
          '${ddir}/%(title)s.%(ext)s' \
          '${ddir}/%(autonumber)s - %(title)s.%(ext)s' \
          '${ddir}/%(extractor)s/%(title)s.%(ext)s' \
          '-' \
          )"
      elif [[ ${prev} == "--proxy" ]]; then
        _arguments "*: :( `echo ${http_proxy}` )"
      else
        _arguments -S\
          '-h[Print help]: :' \
          '-U[Update the program (run with root)]: :' \
          '-i[Continue on download errors]' \
          '(-6)-4[Make all connections via IPv4]' \
          '(-4)-6[Make all connections via IPv6]' \
          '-r[Maximum download rate in bytes per second (e.g. 50K or 4.2M)]' \
          '-R[Number of retries (default is 10), or "infinite"]' \
          '-a[File containg URLs to download ('-' for stdin)]' \
          '-o[Output filename template. (See manpage)]' \
          '-q[Activate quiet mode]' \
          '-s[Do not download the video and do not write anything to disk]' \
          '-g[Simulate, quiet but print URL]' \
          '-e[Simulate, quiet but print title]' \
          '-j[Simulate, quiet but print JSON information]' \
          '-J[Simulate, quiet but print JSON information for each command-line argument]' \
          '-f[Video format code, see the "FORMAT SELECTION" for all the info]' \
          '-F[List all available formats]' \
          '-u[Login with this account ID]' \
          '-p[Account pass word. If this option is left out, youtube-dl will ask interactively]' \
          '-2[Two-factor auth code]' \
          '-n[Use .netrc authentication data]' \
          '-x[Convert video files to audio-only files]' \
          '-k[Keep the video file on disk after the post-processing; the video is erased by default]' \
          '*: :(--help --version --update --ignore-errors --abort-on-error --dump-user-agent --list-extractors --extractor-descriptions --default-search --ignore-config --flat-playlist --no-color --proxy --socket-timeout --source-address --force-ipv3 --force-ipv6 --cn-verification-proxy --playlist-start --playlist-end --playlist-items --match-title --reject-title --max-downloads --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filter --no-playlist --yes-playlist --age-limit --download-archive --include-ads --rate-limit --retries --buffer-size --no-resize-buffer --test --playlist-reverse --xattr-set-filesize --hls-prefer-native --external-downloader --external-downloader-args --batch-file --id --output --autonumber-size --restrict-filenames --no-overwrites --continue --no-continue --no-part --no-mtime --write-description --write-info-json --write-annotations --load-info --cookies --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --write-all-thumbnails --list-thumbnails --quiet --no-warnings --simulate --skip-download --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --newline --no-progress --console-title --verbose --dump-pages --write-pages --youtube-print-sig-code --print-traffic --call-home --no-call-home --no-check-certificate --prefer-insecure --user-agent --referer --add-header --bidi-workaround --sleep-interval --format --all-formats --prefer-free-formats --list-formats --youtube-include-dash-manifest --youtube-skip-dash-manifest --merge-output-format --write-sub --write-auto-sub --all-subs --list-subs --sub-format --sub-lang --username --password --twofactor --netrc --video-password --extract-audio --audio-format --audio-quality --recode-video --keep-video --no-post-overwrites --embed-subs --embed-thumbnail --add-metadata --metadata-from-title --xattrs --fixup --prefer-avconv --prefer-ffmpeg --ffmpeg-location --exec --convert-subtitles)'
      fi
    ;;
  esac
}

compdef __youtube_dl youtube-dl

Mettez ceci dans .zshrc

local ddir=""

Si vous modifiez la partie de à l'emplacement du répertoire dans lequel vous souhaitez télécharger la vidéo, vous pouvez la compléter avec zsh. Si vous relisez les paramètres zsh, tapez youtube-dl et appuyez sur la touche TAB pour voir l'explication de l'option à 1 caractère, et ajoutez les informations que vous souhaitez ajouter pour certaines options. C'est devenu comme. (Par exemple, modèle de sortie, adresse proxy, etc.)

Résumé

youtube-dl Super pratique. Il existe des modules complémentaires de navigateur similaires, mais il y a eu des problèmes, tels que l'utilisation du flash, et les vidéos téléchargées en mode économique pour les vidéos Nico Nico sont également devenues économiques. À cet égard, cela est pratique car il vous suffit de connaître l'URL du site et vous n'avez pas à vous soucier de lancer un navigateur. Cependant, si vous accédez à tout cela en même temps, ce sera une nuisance pour le site, alors soyez prudent là-bas. Assurez-vous également que le téléchargement du site est approuvé par le titulaire du droit.

Il semble difficile d'écrire la fonction de complétion de zsh car il y a beaucoup de méta caractères, etc., mais si vous vous en souvenez, le travail dans le terminal sera beaucoup plus rapide, donc celui que vous utilisez activement est complété. Je veux écrire une fonction.

Recommended Posts

Présentation de youtube-dl, un outil de téléchargement vidéo qui fonctionne sur la ligne de commande, et sa fonction de complétion zsh.
L'histoire de la création d'un outil qui fonctionne sur Mac et Windows sur le site de développement de jeux
[auto-ohin] Présentation de auto-ohin, un outil de ligne de commande qui peut imprimer automatiquement tout à la fois [sceau électronique]
[Django] Appuyez sur une commande que vous avez effectuée à partir du processus qui s'exécute sur manage.py.
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
[EC2] Comment installer et télécharger chromedriver à partir de la ligne de commande
Module standard Python utilisable en ligne de commande
Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande