[PYTHON] Einführung in youtube-dl, ein Video-Download-Tool, das über die Befehlszeile funktioniert, und dessen zsh-Vervollständigungsfunktion.

Einführung eines Tools youtube-dl, das über die Befehlszeile funktioniert und Videos von Videoseiten wie Youtube herunterlädt. Da diese Option zu viele ist, um sie sich zu merken, habe ich eine Abschlussfunktion für zsh geschrieben, daher werde ich sie einführen.

youtube-dl

Wie benutzt man

Vom Terminal

youtube-dl "URL"

Wenn Sie ausführen, können Sie es herunterladen, wenn es sich um eine kompatible Site handelt.

Installation

Wie installiert man

Mit Pythons Paketverwaltungsmodul pip

sudo pip install youtube-dl

Sie können es mit installieren. Beachten Sie jedoch, dass der Name des Python-Moduls in den Spezifikationen als "youtube_dl" unterstrichen ist.

Die Installation mit Homebrew auf einem Mac scheint einfach zu sein.

brew install youtube-dl

Wenn Sie aus der Quelle bauen möchten, wenden Sie sich bitte an die Hauptfamilie.

Entsprechende Seite

Unterstützte Seiten sind

youtube-dl --extractor-description

Sie können es sehen, indem Sie es ausführen, aber es scheint, dass es derzeit 621 Sites unterstützt. Ich denke, dass Youtube natürlich Nico Nico Videos, Zuckungen und andere berühmte Orte behandelt werden. Unten finden Sie die Links zu den einzelnen Websites. … Es gibt viele verdächtige Websites. Seien Sie also bei Ihrem Besuch vorsichtig.

Optionen angeben

Wie Sie der Hilfe entnehmen können, können Sie sie auch mit verschiedenen Optionen ausführen. Der einfachste Weg, es zu benutzen, ist einfach ohne Optionen, wie am Anfang erwähnt.

youtube-dl "URL"

Es ist eine Methode, um die URL direkt als einzufügen. In Youtube kannst du die ID auch unter watch = in der URL angeben. Sie können auch alle in der Wiedergabeliste registrierten Videos herunterladen, indem Sie sie angeben.

Festlegen des Downloadformats

Sie können auch das Format des Videos angeben und es herunterladen, Sie können die unterstützten Downloadformate mit -F anzeigen und das Format aus diesen mit -f angeben und ausführen Ich kann.

Geben Sie den Namen der Sicherungsdatei in der Vorlage an

Dann können Sie den Dateinamen angeben, der mit "-o" gespeichert werden soll. Wenn Sie jedoch hier eine Vorlage schreiben, den Titel des Videos, den Titel der Wiedergabeliste, die Nummer in der Wiedergabeliste, die Site, von der Sie heruntergeladen haben, den Uploader Usw. kann im Namen der Videodatei enthalten sein. Weitere Informationen (ry

Laden Sie mehrere angegebene Videos herunter

Es kann auch nützlich sein, sich daran zu erinnern, dass Sie alle Dateien, die Sie herunterladen möchten, in einer Textdatei und später ablegen können

youtube-dl -a dl_list

In diesem Fall werden alle Videos in dieser Datei heruntergeladen.

Fügen Sie die Option "Fehler ignorieren" für zeitaufwändige Downloads hinzu

Wenn Sie viele Videos herunterladen, z. B. beim Herunterladen von einer Wiedergabeliste, ist das Hinzufügen der Option "-i" praktisch, da Fehler in der Mitte ignoriert werden und das nächste Video weiter verarbeitet wird.

Außerdem werden Videodateien, die aus irgendeinem Grund nicht mehr verarbeitet wurden, z. B. aufgrund einer Netzwerkstörung, mit der Erweiterung ".part" gespeichert. Verwenden Sie den Befehl "youtube-dl" erneut, um sie unter demselben Dateinamen zu speichern. Nach der Ausführung wird der Download von der Mitte aus fortgesetzt. Beachten Sie jedoch, dass Sie möglicherweise erneut von vorne beginnen müssen, wenn Sie den Vorgang mit "Strg-C" usw. unterbrechen.

Stream-Wiedergabe ohne Download

Wenn Sie es im Streaming abspielen möchten, anstatt es herunterzuladen, verwenden Sie die Option -o, um es auf die Standardausgabe auszugeben und an den mplayer weiterzuleiten.

youtube-dl URL -o - | mplayer -

Wenn Sie einen Media Player wie mplayer oder vlc verwenden, der Videos von einer URL abspielen kann, können Sie ihn so abspielen, wie er ist. In mpv wird der youtube-dl-Hook vorbereitet, sodass Sie ihn abspielen können, indem Sie die URL des Videos so wie er ist einfügen. (Die obige Methode kann möglicherweise nicht im Gegenteil spielen.)

zsh Abschlussfunktion

Automatisch erzeugt

Unter den in youtube-dl erstellten Skripten befindet sich ein Skript, das automatisch die zsh-Vervollständigungsfunktion generiert.

Laden Sie diese beiden herunter und lesen Sie im selben Verzeichnis Zeile 12 von zsh-vervollständigung.py

ZSH_COMPLETION_TEMPLATE = "zsh-completion.in"

Ändern

python zsh-completion.py

Erstellt eine Datei mit dem Namen "youtube-dl.zsh" im selben Verzeichnis. Wenn du dies in das Verzeichnis legst, in das du die zsh-Vervollständigungsfunktion legst, werden bei der Ausführung von youtube-dl alle langen Optionskandidaten angezeigt und für einige Optionen der Dateiname und das Verzeichnis Es wird auch ergänzt.

Ein kleiner Tweak

Ich habe jedoch das Gefühl, dass ich mich daran erinnern muss, welche Optionen ich oft verwende, so wie sie sind. Hier sind einige meiner eigenen Modifikationen. Bitte laden Sie es herunter und verwenden Sie es entsprechend. Wenn Sie etwas Besseres hinzufügen oder schreiben möchten, würde ich es begrüßen, wenn Sie mich auf irgendeine Weise informieren könnten.

#-------- 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

Geben Sie dies in .zshrc ein

local ddir=""

Wenn Sie den Teil von in den Speicherort des Verzeichnisses ändern, in das Sie das Video herunterladen möchten, können Sie es mit zsh vervollständigen. Wenn Sie die zsh-Einstellungen erneut lesen, geben Sie "youtube-dl" ein und drücken Sie die TAB-Taste, um die Erklärung für die 1-stellige Option anzuzeigen. Fügen Sie dann die Informationen hinzu, die Sie für einige Optionen hinzufügen möchten. Es ist wie geworden. (Zum Beispiel Ausgabevorlage, Proxy-Adresse usw.)

Zusammenfassung

youtube-dl Super praktisch. Es gibt ähnliche Browser-Add-Ons, aber es gab einige Probleme, z. B. die Verwendung von Flash, und die im Economy-Modus für Nico Nico-Videos heruntergeladenen Videos wurden ebenfalls sparsam. In dieser Hinsicht ist dies praktisch, da Sie nur die URL der Site kennen müssen und sich nicht die Mühe machen müssen, einen Browser zu starten. Wenn Sie jedoch auf alle gleichzeitig zugreifen, wird dies die Website stören. Verhalten Sie sich dort also mit Bedacht. Stellen Sie außerdem sicher, dass die Website vom Rechteinhaber zum Download freigegeben wurde.

Es scheint schwierig zu sein, die Vervollständigungsfunktion von zsh zu schreiben, da es viele Metazeichen usw. gibt. Wenn Sie sich jedoch daran erinnern, wird die Arbeit im Terminal viel schneller sein, sodass die von Ihnen aktiv verwendete ergänzt wird Ich möchte eine Funktion schreiben.

Recommended Posts

Einführung in youtube-dl, ein Video-Download-Tool, das über die Befehlszeile funktioniert, und dessen zsh-Vervollständigungsfunktion.
Die Geschichte, ein Tool zu erstellen, das auf Mac und Windows auf der Spieleentwicklungsseite ausgeführt wird
[auto-ohin] Einführung von auto-ohin, einem Befehlszeilenprogramm, das automatisch alle auf einmal stempeln kann [elektronischer Stempel]
[Django] Drücken Sie einen Befehl, den Sie in dem Prozess ausgeführt haben, der auf manage.py ausgeführt wird.
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
[EC2] So installieren und laden Sie chromedriver über die Befehlszeile herunter
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Abrufen, Testen und Senden von Testfällen im AtCoder-Wettbewerb über die Befehlszeile