Skip to main content

No project description provided

Project description

ytdl

Yet another CLI based YouTube downloader tool for linux.

PyPI version Build Status Coverage Status

Features:

  • Download only neccessary stream, not the whole video
  • Download all videos or audios belong to a playlist
  • Download with custom name and bounding

Just gather your favourite videos into a playlist, then let's ytdl download them overnight.

Prerequisites

Install

Recommend to use pipx:

pipx install ytdl
ytdl config

However, pip may work too:

pip install ytdl

# don't
sudo pip install ytdl

Build from source requires poetry:

git clone git@github.com:ndaidong/ytdl.git && cd ytdl
poetry install

# use raw script
poetry run python main.py info
poetry run python main.py [command] [arguments]

# build wheel to `./dist` folder
poetry build

# then install it
pipx install dist/ytdl-VERSION-py3-none-any.whl

# test it
ytdl info

CLIs

Basic commands

Command Description Shortcut
ytdl config KEY VALUE Set config value c
ytdl config KEY Show config property
ytdl playlist PLAYLIST_URL Get playlist index p
ytdl video VIDEO_URL Download a video v
ytdl audio VIDEO_URL Download audio only a

Almost cases, VIDEO_URL and PLAYLIST_URL can be replaced with video ID or playlist ID.

Advanced usage

Config

There are 2 properties to configure: api_key and store_dir. At the first time, api_key is empty and you have to set it before using other features.

# set new `api_key`
ytdl config api_key YOUR_OWN_YOUTUBE_API_KEY

# change `store_dir` to new path
ytdl config store_dir /storage/downloads/youtube

# get the current value of `api_key`
ytdl config api_key

# show all
ytdl config

By default, store_dir is being set to /home/{YOUR_USER_NAME}/ytdl_files, you should change it to more appropriate place.

Playlist

Note that this command does not download actual video/audio, but a list of indexed items.

# get playlist metadata into `{store_dir}/{title}.json`
# this file contains a list of videos with their ID and title to download later
ytdl playlist https://www.youtube.com/playlist?list=PLAYLIST_ID

# get playlist metadata into `{store_dir}/my_custom_playlist_name.json`
ytdl playlist https://www.youtube.com/playlist?list=PLAYLIST_ID my_custom_playlist_name

For example if we download the playlist Linux Tips and Tricks

The indexed file looks like below:

Then we will have some powerful ways to download the videos in this list with ytdl video or ytdl audio.

Video

Download a single video file.

# download a video file to `{store_dir}/video/{VIDEO_TITLE}.mp4`
ytdl video https://www.youtube.com/watch?v=VIDEO_ID

# custom name
ytdl video https://www.youtube.com/watch?v=VIDEO_ID my_custom_video_name

To download multi items from indexed playlist, please refer the following arguments:

  • --index_file: path to playlist index file (required)
  • --since: video ID of the video where you want to start downloading from
  • --limit: number of items to download, count from since or the begining of the list
  • --prefix_name: to auto naming downloaded file
  • --prefix_num: to auto naming downloaded file

Examples:

# download all videos from saved playlist index file above
# these video files will be stored in `{store_dir}/video`
ytdl video --index_file "/path/to/Linux Tips and Tricks.json"

# download 5 videos from saved playlist index file above, since first item
ytdl video --index_file "/path/to/Linux Tips and Tricks.json" --limit 5

# download 5 videos from saved playlist index file above, with prefix name
ytdl video --index_file "/path/to/Linux Tips and Tricks.json" --limit 5 --prefix_name "Linux Tutorial"
# downloaded videos should look like "Linux Tutorial - 1.mp4", "Linux Tutorial - 2.mp4" and so on
# prefix_name will be useful when you want to put these files into an already created list for your different purpose

# download 5 videos from saved playlist index file above, with prefix name and prefix number
ytdl video --index_file "/path/to/Linux Tips and Tricks.json" --limit 5 --prefix_name "Linux Tutorial" --prefix_num 25
# this will be useful for the playlists those are splited to multi parts
# in this case, your serie "Linux Tutorial" had already 24 items before, now count from 25 onwards
# downloaded videos should look like "Linux Tutorial - 25.mp4", "Linux Tutorial - 26.mp4" and so on

# similar to above command, but start from given item
ytdl video --index_file "/path/to/Linux Tips and Tricks.json" --since VIDEO_ID --limit 5 --prefix_name "Linux Tutorial" --prefix_num 25

While downloading video, the stream with highest resolution will be selected.

Audio

This is similar to ytdl video, but only download audio file. While downloading, the stream with highest abr (average bitrate) will be selected.

# download a audio file to `{store_dir}/audio/{VIDEO_TITLE}.mp3`
ytdl audio https://www.youtube.com/watch?v=VIDEO_ID

# custom name
ytdl audio https://www.youtube.com/watch?v=VIDEO_ID my_custom_audio_name

To download multi items from indexed playlist, please refer the following arguments:

  • --index_file: path to playlist index file (required)
  • --since: video ID of the video where you want to start downloading from
  • --limit: number of items to download, count from since or the begining of the list
  • --prefix_name: to auto naming downloaded file
  • --prefix_num: to auto naming downloaded file

Examples:

# download all audios from saved playlist index file above
# these audio files will be stored in `{store_dir}/audio`
ytdl audio --index_file "/path/to/Linux Tips and Tricks.json"

# download 5 audios from saved playlist index file above, since first item
ytdl audio --index_file "/path/to/Linux Tips and Tricks.json" --limit 5

# download 5 audios from saved playlist index file above, with prefix name
ytdl audio --index_file "/path/to/Linux Tips and Tricks.json" --limit 5 --prefix_name "Linux Tutorial"
# downloaded audios should look like "Linux Tutorial - 1.mp3", "Linux Tutorial - 2.mp3" and so on
# prefix_name will be useful when you want to put these files into an already created list for your different purpose

# download 5 audios from saved playlist index file above, with prefix name and prefix number
ytdl audio --index_file "/path/to/Linux Tips and Tricks.json" --limit 5 --prefix_name "Linux Tutorial" --prefix_num 25
# this will be useful for the playlists those are splited to multi parts
# in this case, your serie "Linux Tutorial" had already 24 items before, now count from 25 onwards
# downloaded audios should look like "Linux Tutorial - 25.mp3", "Linux Tutorial - 26.mp3" and so on

# similar to above command, but start from given item
ytdl audio --index_file "/path/to/Linux Tips and Tricks.json" --since VIDEO_ID --limit 5 --prefix_name "Linux Tutorial" --prefix_num 25

Downloaded stream will be converted to .mp3 with ffmpeg.

Dependencies

This lib was built on top of the following packages:

Dependency License
pytube3 MIT
python-youtube MIT
python-fire Apache License v2

Test

git clone git@github.com:ndaidong/ytdl.git && cd ytdl
poetry install
YOUTUBE_API_KEY=your_own_key ./run_test.sh

License

The MIT License (MIT)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ytdl-1.0.0rc5.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

ytdl-1.0.0rc5-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file ytdl-1.0.0rc5.tar.gz.

File metadata

  • Download URL: ytdl-1.0.0rc5.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.2 CPython/3.9.0 Linux/5.4.0-7642-generic

File hashes

Hashes for ytdl-1.0.0rc5.tar.gz
Algorithm Hash digest
SHA256 3f6fe3cb0fd42b513ae99bff82caa8558b3cc71e9c5a80fe3416b63106da9522
MD5 dbef96a450b7c38bfb64aee811326044
BLAKE2b-256 553916bde1c8fc2365bdcebd76e0f3beefc73f7ca5b6510e13750dcd254220a9

See more details on using hashes here.

File details

Details for the file ytdl-1.0.0rc5-py3-none-any.whl.

File metadata

  • Download URL: ytdl-1.0.0rc5-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.2 CPython/3.9.0 Linux/5.4.0-7642-generic

File hashes

Hashes for ytdl-1.0.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 b54027ce96afad1b6dfe855b1b70c21e9cc1f05f27bca20ecf193a97cfdf30b5
MD5 e5ba580ed51c62fe20cdf030ed192c46
BLAKE2b-256 6e46dbc11440d55ac95143556a5ac7f0e7c155c0e307b19272d8a524815171de

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page