Youtube-dl
youtube-dl is a very handy general-purpose python script for downloading audio and video files from websites with video such as YouTube. The name implies that it is a youtube-specific tool but it's not, youtube-dl has specific support for a wide range of websites and there is also general-purpose support for any web page containing video.
youtube-dl is a command-line tool which is used from a terminal. Many popular video-related programs like the media player mpv use it as a helper if it's installed.
Forks of youtube-dl like Youtube-dlp and Youtube-dlc, which are supposedly better that youtube-dl, exist. The command line syntax is mostly compatible so you can plug and play any fork into your youtube-dl scripts. Mileage may vary with each fork.
HOWTO download videos from websites
The basic command for using youtube-dl is as simple as
youtube-dl https://example.com/pagewithvideo.html
This will download a video file embedded in that page in the best possible format.
There could be multiple formats available. youtube-dl has the -F
switch for listing available formats. It will not download anything when this switch is used, it will just list all the formats that are available. Example:
youtube-dl -F https://example.com/pagewithvideo.html
This will produce a list of both audio formats, video formats and combined file formats available if there are supported video files embedded on a web page. The supported formats will have numbers. This information can be used to download the file using specific formats listed using the -f videoformat+audioformat
switch.
Running youtube-dl -F https://www.youtube.com/watch?v=ujjZDX7HHNs
will produce a list similar to this:
format code extension resolution note 140 m4a audio only DASH audio 130k , m4a_dash container, mp4a.40.2@128k, 3.05MiB 160 mp4 256x144 144p 138k , avc1.4d400c, 30fps, video only, 2.93MiB 278 webm 256x144 144p 142k , webm container, vp9, 30fps, video only, 2.92MiB 133 mp4 426x240 240p 310k , avc1.4d4015, 30fps, video only, 6.34MiB 242 webm 426x240 240p 316k , vp9, 30fps, video only, 6.70MiB 243 webm 640x360 360p 630k , vp9, 30fps, video only, 12.23MiB 134 mp4 640x360 360p 669k , avc1.4d401e, 30fps, video only, 13.58MiB 244 webm 854x480 480p 1161k , vp9, 30fps, video only, 23.03MiB 135 mp4 854x480 480p 1196k , avc1.4d401f, 30fps, video only, 25.67MiB 136 mp4 1280x720 720p 2428k , avc1.4d401f, 30fps, video only, 51.66MiB 247 webm 1280x720 720p 2457k , vp9, 30fps, video only, 46.41MiB 248 webm 1920x1080 1080p 3602k , vp9, 30fps, video only, 68.44MiB 137 mp4 1920x1080 1080p 5004k , avc1.640028, 30fps, video only, 107.56MiB 18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 18.62MiB (best)
This file is only available with one audio format and the code for it is 140. If you like 1920x1080 VP9, which is identified as code 248 then -f 248+140
can be used to download the file with VP9 video and MP4 audio. The only container supported by youtube-dl capable of holding that combination is mkv
so the output will be put in that container. The full command for downloading would be:
youtube-dl -f 248+140 https://www.youtube.com/watch?v=ujjZDX7HHNs
YouTube video ujjZDX7HHNs used in the above example refers to WJSN's fantastic hit "Boogie up" performed on The Show June 11th, 2019. They are so beautiful and talented and gorgeous, you will absolutely enjoy that file if you download it.
youtube-dl will by default download to a filename it thinks makes sense. You can force another filename with the -o
option:
youtube-dl -o myvideo.mkv "http://www.youtube.com/watch?v=ujjZDX7HHNs"
You can use a proxy to download by setting the http_proxy
environment which is, if set, honored by youtube-dl.
youtube-dl has a whole lot of other options which you likely won't need. See the very long manual page for all of them.
HOWTO tell if a website is supported or not
Just run youtube-dl against the site with -F
and it will tell you if there are supported media on it or not:
youtube-dl -F https://example.com/pagewithvideo.html
Note: Constant Updates are Required
youtube-dl downloads and parses websites and even runs JavaScript from those sites in order to figure out what video files are available and how they can be downloaded. The rules used to parse a given website will fail when a website changes and youtune-dl will simply fail to extract the information it needs. Sites like YouTube change their website on a regular basis - breaking youtube-dl.
youtube-dl tends to be updated very quickly when a website changes. This will of course not help you if you are using an older version. The first thing you should do if you can't download a video from a website, specially one which used to be supported, is to check if there is an updated version of youtube-dl available.
Download and Installation
You can download and install the latest version of youtube-dl from https://yt-dl.org/
It is possible to install it with these fine commands:
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl chmod a+rx /usr/local/bin/youtube-dl
It may be handy to put those commands in a script named something like /usr/local/bin/update-youtube-dl.sh
- but do keep in mind that there is no md5sum or GPG key check or anything like that involved in those commands; someone could compromise that site and give you the virus instead of youtube-dl.
Audio |
Video |
See also: Music players | Media/Video players | video editing software