youtube-dl is a most popular command line YouTube downloader application. It is not just to download videos from Youtube, but also from a lot of other websites. You can view the complete list of supported sites here. youtube-dl can be able to download a single track or entire playlist in one go. It is a free and open source program written in Python. It supports GNU/Linux, Mac OS X and Microsoft Windows. In this detailed youtube-dl tutorial, we will learn to use most commonly used commands with examples to download audio and video streams from online in Linux.
Install youtube-dl on Linux
youtube-dl can be install in many ways.
The officially recommended way
The officially recommended way to install youtube-dl is just download it, save it in your PATH, make it executable and start using it right away.
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
If you don’t have curl, use wget instead:
sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
Now fix the permissions for youtube-dl so it can run
sudo chmod a+rx /usr/local/bin/youtube-dl
Install youtube-dl using Python Pip
You can also install youtube-dl using Pip with following command.
sudo -H pip install --upgrade youtube-dl
Install youtube-dl using distro package manager
youtube-dl is also available in the official repositories of some Linux distributions. For example, you can install it in Arch Linux using command:
sudo pacman -S youtube-dl
On Debian, Ubuntu, Linux mint:
sudo apt install youtube-dl
On Red Hat, Fedora, CentOS:
sudo dnf install youtube-dl
Install FFmpeg on Linux
youtube-dl depends on FFmpeg to download 720p videos from YouTube and convert videos to other formats. To install FFmpeg on Linux, refer the following guide.
Update youtube-dl
If you’ve manually installed youtube-dl using curl or wget, run the following command to update it:
sudo youtube-dl -U
If you installed it using pip, then run following command in console:
sudo pip install -U youtube-dl
Those who installed youtube-dl using the distribution’s package manager, just use the appropriate update command. For example, on Arch Linux, you can update youtube-dl by simply running the following command:
sudo pacman -Syu
On Debian, Ubuntu, Linux mint:
sudo apt update; sudo apt upgrade -y
Now, let us see some examples to learn to use youtube-dl.
youtube-dl Tutorial with Examples
Now, let’s see some examples to learn about youtube-dl usage.
Example usage of youtube-dl
Here, I have compiled most commonly used youtube-dl commands to download a video or playlist from YouTube.
1. Download video or playlist
youtube-dl https://www.youtube.com/watch?v=iOxzG3jjFkY
If you want to download video or playlist with a custom name of your choice, the command would be:
youtube-dl -o 'willy william ego' https://www.youtube.com/watch?v=iOxzG3jjFkY
Replace “willy william ego” with your own name.
Do you want to save the video in some other location? Here you go!
youtube-dl -o '~/videos/willy william ego' https://www.youtube.com/watch?v=iOxzG3jjFkY
Here I am downloading the video to the videos directory.
[youtube] iOxzG3jjFkY: Downloading webpage
[download] Destination: /root/videos/willy william ego.f248
[download] 100% of 30.66MiB in 00:00
[download] Destination: /root/videos/willy william ego.f251
[download] 100% of 3.45MiB in 00:00
[ffmpeg] Merging formats into "/root/videos/willy william ego.webm"
Deleting original file /root/videos/willy william ego.f248 (pass -k to keep)
Deleting original file /root/videos/willy william ego.f251 (pass -k to keep)
You can also include additional details, such as the title, the uploader name (channel name) and upload date etc., in the file name by using the following command:
youtube-dl -o '%(title)s by %(uploader)s on %(upload_date)s in %(playlist)s.%(ext)s' https://www.youtube.com/watch?v=iOxzG3jjFkY
2. Download multiple videos
Sometimes, you might want to download multiple videos from or any other site. If so, just mention the URL of the videos with space-separated like below:
youtube-dl [url1] [url2] [url3]
Or alternatively, you can put them all in a text file and pass it to youtube-dl as an argument like below.
youtube-dl -a url_list.txt
This command will download all videos mentioned in the url_list.txt file
3. Download audio-only from a video
youtube-dl allows us to download audio only from a YouTube video. If you ever been in a situation to download only the audio then run following command:
youtube-dl -x https://www.youtube.com/watch?v=iOxzG3jjFkY
By default, youtube-dl will save the audio in Ogg (opus) format.
If you prefer to download any other formats, for example mp3, run:
youtube-dl -x -audio-format mp3 https://www.youtube.com/watch?v=iOxzG3jjFkY
You can see following output on console screen
[youtube] iOxzG3jjFkY: Downloading webpage
[download] Destination: Willy William - Ego (Clip Officiel)-iOxzG3jjFkY.webm
[download] 100% of 3.45MiB in 00:00
[ffmpeg] Destination: Willy William - Ego (Clip Officiel)-iOxzG3jjFkY.mp3
Deleting original file Willy William - Ego (Clip Officiel)-iOxzG3jjFkY.webm (pass -k to keep)
This command will download the audio from the given video/playlist, convert it to an MP3 and save it in the current directory. Please note that you should install either ffmpeg or avconv to convert the file to mp3 format.
4. Download video with description, metadata, annotations, subtitles and thumbnail
To download a video along with its other details such as description, metadata, annotations, subtitles, and thumbnail etc., use the following command:
youtube-dl --write-description --write-info-json --write-annotations --write-sub --write-thumbnail https://www.youtube.com/watch?v=iOxzG3jjFkY
5. List all available formats of video or playlist
To list all available formats that a video or playlist is available in, use the following command:
youtube-dl --list-formats https://www.youtube.com/watch?v=iOxzG3jjFkY
or
youtube-dl -F https://www.youtube.com/watch?v=iOxzG3jjFkY
Sample output will looks like this:
[youtube] iOxzG3jjFkY: Downloading webpage
[info] Available formats for iOxzG3jjFkY:
format code extension resolution note
249 webm audio only tiny 55k , webm_dash container, opus @ 55k (48000Hz), 1.36MiB
250 webm audio only tiny 73k , webm_dash container, opus @ 73k (48000Hz), 1.78MiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 3.15MiB
251 webm audio only tiny 141k , webm_dash container, opus @141k (48000Hz), 3.45MiB
160 mp4 256x144 144p 50k , mp4_dash container, avc1.4d400c@ 50k, 25fps, video only, 1.23MiB
394 mp4 256x144 144p 62k , mp4_dash container, av01.0.00M.08@ 62k, 25fps, video only, 1.53MiB
278 webm 256x144 144p 80k , webm_dash container, vp9@ 80k, 25fps, video only, 1.95MiB
395 mp4 426x240 240p 101k , mp4_dash container, av01.0.00M.08@ 101k, 25fps, video only, 2.46MiB
133 mp4 426x240 240p 101k , mp4_dash container, avc1.4d4015@ 101k, 25fps, video only, 2.46MiB
242 webm 426x240 240p 110k , webm_dash container, vp9@ 110k, 25fps, video only, 2.69MiB
134 mp4 640x360 360p 170k , mp4_dash container, avc1.4d401e@ 170k, 25fps, video only, 4.16MiB
396 mp4 640x360 360p 186k , mp4_dash container, av01.0.01M.08@ 186k, 25fps, video only, 4.53MiB
243 webm 640x360 360p 187k , webm_dash container, vp9@ 187k, 25fps, video only, 4.55MiB
135 mp4 854x480 480p 225k , mp4_dash container, avc1.4d401e@ 225k, 25fps, video only, 5.48MiB
244 webm 854x480 480p 266k , webm_dash container, vp9@ 266k, 25fps, video only, 6.49MiB
397 mp4 854x480 480p 316k , mp4_dash container, av01.0.04M.08@ 316k, 25fps, video only, 7.69MiB
136 mp4 1280x720 720p 345k , mp4_dash container, avc1.4d401f@ 345k, 25fps, video only, 8.40MiB
247 webm 1280x720 720p 451k , webm_dash container, vp9@ 451k, 25fps, video only, 10.99MiB
398 mp4 1280x720 720p 593k , mp4_dash container, av01.0.05M.08@ 593k, 25fps, video only, 14.44MiB
399 mp4 1920x1080 1080p 1005k , mp4_dash container, av01.0.08M.08@1005k, 25fps, video only, 24.44MiB
137 mp4 1920x1080 1080p 1247k , mp4_dash container, avc1.640028@1247k, 25fps, video only, 30.32MiB
248 webm 1920x1080 1080p 1260k , webm_dash container, vp9@1260k, 25fps, video only, 30.66MiB
18 mp4 640x360 360p 394k , avc1.42001E, 25fps, mp4a.40.2 (44100Hz), 9.60MiB (best)
As you can see in the above screenshot, youtube-dl lists all available formats of the given video. From left to right, it displays the video format code, extension and resolution note of the respective video. This can be helpful when you want to download a video at a specific quality or format.
6. Display the size of Youtube videos
To retrieve the file size of a video, use -F flag.
youtube-dl -F https://www.youtube.com/watch?v=iOxzG3jjFkY
You will see the file sizes at the end of each line
[youtube] iOxzG3jjFkY: Downloading webpage
[info] Available formats for iOxzG3jjFkY:
format code extension resolution note
249 webm audio only tiny 55k , webm_dash container, opus @ 55k (48000Hz), 1.36MiB
250 webm audio only tiny 73k , webm_dash container, opus @ 73k (48000Hz), 1.78MiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 3.15MiB
251 webm audio only tiny 141k , webm_dash container, opus @141k (48000Hz), 3.45MiB
160 mp4 256x144 144p 50k , mp4_dash container, avc1.4d400c@ 50k, 25fps, video only, 1.23MiB
394 mp4 256x144 144p 62k , mp4_dash container, av01.0.00M.08@ 62k, 25fps, video only, 1.53MiB
278 webm 256x144 144p 80k , webm_dash container, vp9@ 80k, 25fps, video only, 1.95MiB
395 mp4 426x240 240p 101k , mp4_dash container, av01.0.00M.08@ 101k, 25fps, video only, 2.46MiB
133 mp4 426x240 240p 101k , mp4_dash container, avc1.4d4015@ 101k, 25fps, video only, 2.46MiB
242 webm 426x240 240p 110k , webm_dash container, vp9@ 110k, 25fps, video only, 2.69MiB
134 mp4 640x360 360p 170k , mp4_dash container, avc1.4d401e@ 170k, 25fps, video only, 4.16MiB
396 mp4 640x360 360p 186k , mp4_dash container, av01.0.01M.08@ 186k, 25fps, video only, 4.53MiB
243 webm 640x360 360p 187k , webm_dash container, vp9@ 187k, 25fps, video only, 4.55MiB
135 mp4 854x480 480p 225k , mp4_dash container, avc1.4d401e@ 225k, 25fps, video only, 5.48MiB
244 webm 854x480 480p 266k , webm_dash container, vp9@ 266k, 25fps, video only, 6.49MiB
397 mp4 854x480 480p 316k , mp4_dash container, av01.0.04M.08@ 316k, 25fps, video only, 7.69MiB
136 mp4 1280x720 720p 345k , mp4_dash container, avc1.4d401f@ 345k, 25fps, video only, 8.40MiB
247 webm 1280x720 720p 451k , webm_dash container, vp9@ 451k, 25fps, video only, 10.99MiB
398 mp4 1280x720 720p 593k , mp4_dash container, av01.0.05M.08@ 593k, 25fps, video only, 14.44MiB
399 mp4 1920x1080 1080p 1005k , mp4_dash container, av01.0.08M.08@1005k, 25fps, video only, 24.44MiB
137 mp4 1920x1080 1080p 1247k , mp4_dash container, avc1.640028@1247k, 25fps, video only, 30.32MiB
248 webm 1920x1080 1080p 1260k , webm_dash container, vp9@1260k, 25fps, video only, 30.66MiB
18 mp4 640x360 360p 394k , avc1.42001E, 25fps, mp4a.40.2 (44100Hz), 9.60MiB (best)
7. Download videos in certain quality and/or format
By default, youtube-dl will download the best available quality video. However, it is also possible to download a video or playlist at a specific quality or format.
YouTube is capable of downloading videos in the following qualities:
- best – Select the best quality format of the given file with video and audio.
- worst – Select the worst quality format (both video and audio).
- bestvideo – Select the best quality video-only format (e.g. DASH video). Please note that it may not be available.
- worstvideo – Select the worst quality video-only format. May not be available.
- bestaudio – Select the best quality audio only-format. May not be available.
- worstaudio – Select the worst quality audio only-format. May not be available.
For example, if you want to download best quality format (both audio and video), just use the following command:
youtube-dl -f best https://www.youtube.com/watch?v=iOxzG3jjFkY
Similarly, to download audio-only with best quality:
youtube-dl -f bestaudio https://www.youtube.com/watch?v=iOxzG3jjFkY
To download worst quality video-only format, use the following command:
youtube-dl -f worstvideo https://www.youtube.com/watch?v=iOxzG3jjFkY
You also combine different format options like below.
youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=iOxzG3jjFkY
The above command will download best quality video-only and best quality audio-only formats and merge them together with ffmpeg or avconv. Make sure you have installed any one of these tools on your system.
If you don’t want to merge, replace +(plus) operator with ,(comma) like below:
youtube-dl -f 'bestvideo,bestaudio' https://www.youtube.com/watch?v=iOxzG3jjFkY -o '%(title)s.f%(format_id)s.%(ext)s'
This command will download best quality video and best quality audio and will not mix them. In this case, you will get two files, one is audio and another is video. In this example, an output template (-o option) is recommended as bestvideo and bestaudio may have the same file name.
We can even download a video or playlist at a specific quality with specific resolution.
For instance, the following command will download the best quality video in 480 pixel resolution (less than or equal to 480p).
youtube-dl -f "best[height<=480]" https://www.youtube.com/watch?v=iOxzG3jjFkY
Like already said, we can group the format selectors to get a specific quality video. The following command will download best format available(both audio and video) but no better than 480p.
youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' https://www.youtube.com/watch?v=iOxzG3jjFkY
8. Download videos using format code
All videos have format codes which we can use to download a video at specific quality. To find the format code, just list the available formats using any one of the following commands:
youtube-dl --list-formats https://www.youtube.com/watch?v=iOxzG3jjFkY
Or
youtube-dl -F https://www.youtube.com/watch?v=iOxzG3jjFkY
As you can see in the above screenshot, all format codes of the given video are listed in the first column. The best quality format is given at the end (the format code is 22). So, the command to download best quality format is:
youtube-dl -f 18 https://www.youtube.com/watch?v=iOxzG3jjFkY
Some videos may not have the same formats available while you download videos from playlist. In such cases, you can specify multiple format codes in any preferred order of your choice. Take a look at the following example:
youtube-dl -f 28/19/18
As per the above example, youtube-dl will download the videos in format 28 if it is available. If the format 22 is not available, it will then download format 19 if it is available. If both 28 and 19 formats are not available, it will finally try to download format 18. If none of the specified formats are available, youtube-dl will complain that no suitable formats are available for download.
Please note that that slash is left-associative, i.e. formats on the left hand side are preferred.
9. Download videos by file extension
Download video(s) in your preferred format, say for example MP4, just run:
youtube-dl --format mp4 https://www.youtube.com/watch?v=iOxzG3jjFkY
Or,
youtube-dl -f mp4 https://www.youtube.com/watch?v=iOxzG3jjFkY
Like I already mentioned in the previous section, some videos may not available in your preferred formats. In such cases, youtube-dl will download any other best available formats. For instance, this command will download best quality MP4 format file. If MP4 format is not available, then it will download any other best available format.
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' https://www.youtube.com/watch?v=iOxzG3jjFkY
If you want to download them with custom filename, do:
youtube-dl -f mp4 -o '%(title)s.f%(format_id)s.%(ext)s' https://www.youtube.com/watch?v=iOxzG3jjFkY
10. Set size limit for videos
When you download multiple videos from a playlist, you might want to download videos within a certain size only.
For example, this command will not download any videos smaller than the given size, say 100MB:
youtube-dl --min-filesize 100M
If you don’t want to download videos larger than the given size, do:
youtube-dl --max-filesize 100M
We can also combine format selection operators to download certain size videos.
The following command will download best video-only format but not bigger than 100 MB.
youtube-dl -f 'best[filesize<100M]' https://www.youtube.com/watch?v=iOxzG3jjFkY
11. Download videos by date-wise
youtube-dl allows us to filter and download video or playlist by their upload date. This will be very helpful when you want to download videos from a playlist that contains 100s of videos.
For instance, to download videos uploaded at an exact date, for example October 01, 2018, the command would be:
youtube-dl --date 20201001
Download videos uploaded on or before a specific date:
youtube-dl --datebefore 20200101
Download videos uploaded on or after a specific date:
youtube-dl --dateafter 20200101
Download only the videos uploaded in the last 6 months:
youtube-dl --dateafter now-6months
To download videos between a specific date, for example January 01, 2020 to January 01, 2021, use the following command:
youtube-dl --dateafter 20200101 --datebefore 20210101
12. Download specific videos from playlist
This is yet another useful feature of youtube-dl. It allows us to download a specific song(s) from a playlist that contains 100s of songs.
For example, to download the 10th file from a playlist, run:
youtube-dl --playlist-items 10
Similarly, to download multiple random files, just specify indices of the videos in the playlist separated by commas like below:
youtube-dl --playlist-items 2,3,7,10
You can also specify the range of songs. To download a video playlist starting from a certain video, say 10, to end:
youtube-dl --playlist-start 10
To download only the files starting from 2nd to 5th in a playlist, use:
youtube-dl --playlist-start 2 --playlist-end 5
13. Download only videos suitable for specific age
This is another notable feature of youtube-dl. It allows us to download only videos suitable for the given age.
Say for example, to download all “Let’s Play” videos that aren’t marked “NSFW” or age-restricted for 7 year-olds from a playlist, run:
youtube-dl --match-title "let's play" --age-limit 7 --reject-title "nsfw"
14. Set download speed limit
You can use -r option to limit the speed. For example, the following command will limit the speed to 50K.
youtube-dl -r 50K
15. Resume downloads
By default, youtube-dl will automatically resume the download where you left it off. If it is doesn’t resume the download for any reason, just force the resume of partially downloaded files with -c (–continue) flag:
youtube-dl -c
Getting help
youtube-dl has a lot more options. I guess these 14 examples are just enough to use youtube-dl to download videos from online. For more details, refer youtube-dl help section.
youtube-dl --help
Usage: youtube-dl [OPTIONS] URL [URL...]
Options:
General Options:
-h, --help Print this help text and exit
--version Print program version and exit
-U, --update Update this program to latest version. Make sure that you have sufficient permissions (run with sudo if needed)
-i, --ignore-errors Continue on download errors, for example to skip unavailable videos in a playlist
--abort-on-error Abort downloading of further videos (in the playlist or the command line) if an error occurs
--dump-user-agent Display the current browser identification
--list-extractors List all supported extractors
--extractor-descriptions Output descriptions of all supported extractors
--force-generic-extractor Force extraction to use the generic extractor
--default-search PREFIX Use this prefix for unqualified URLs. For example "gvsearch2:" downloads two videos from google videos for youtube-dl "large apple". Use the value "auto" to
let youtube-dl guess ("auto_warning" to emit a warning when guessing). "error" just throws an error. The default value "fixup_error" repairs broken URLs,
but emits an error if this is not possible instead of searching.
--ignore-config Do not read configuration files. When given in the global configuration file /etc/youtube-dl.conf: Do not read the user configuration in ~/.config/youtube-
dl/config (%APPDATA%/youtube-dl/config.txt on Windows)
--config-location PATH Location of the configuration file; either the path to the config or its containing directory.
--flat-playlist Do not extract the videos of a playlist, only list them.
--mark-watched Mark videos watched (YouTube only)
--no-mark-watched Do not mark videos watched (YouTube only)
--no-color Do not emit color codes in output
Network Options:
--proxy URL Use the specified HTTP/HTTPS/SOCKS proxy. To enable SOCKS proxy, specify a proper scheme. For example socks5://127.0.0.1:1080/. Pass in an empty string
(--proxy "") for direct connection
--socket-timeout SECONDS Time to wait before giving up, in seconds
--source-address IP Client-side IP address to bind to
-4, --force-ipv4 Make all connections via IPv4
-6, --force-ipv6 Make all connections via IPv6
Geo Restriction:
--geo-verification-proxy URL Use this proxy to verify the IP address for some geo-restricted sites. The default proxy specified by --proxy (or none, if the option is not present) is
used for the actual downloading.
--geo-bypass Bypass geographic restriction via faking X-Forwarded-For HTTP header
--no-geo-bypass Do not bypass geographic restriction via faking X-Forwarded-For HTTP header
--geo-bypass-country CODE Force bypass geographic restriction with explicitly provided two-letter ISO 3166-2 country code
--geo-bypass-ip-block IP_BLOCK Force bypass geographic restriction with explicitly provided IP block in CIDR notation
Video Selection:
--playlist-start NUMBER Playlist video to start at (default is 1)
--playlist-end NUMBER Playlist video to end at (default is last)
--playlist-items ITEM_SPEC Playlist video items to download. Specify indices of the videos in the playlist separated by commas like: "--playlist-items 1,2,5,8" if you want to download
videos indexed 1, 2, 5, 8 in the playlist. You can specify range: "--playlist-items 1-3,7,10-13", it will download the videos at index 1, 2, 3, 7, 10, 11,
12 and 13.
--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
--min-filesize SIZE Do not download any videos smaller than SIZE (e.g. 50k or 44.6m)
--max-filesize SIZE Do not download any videos larger than SIZE (e.g. 50k or 44.6m)
--date DATE Download only videos uploaded in this date
--datebefore DATE Download only videos uploaded on or before this date (i.e. inclusive)
--dateafter DATE Download only videos uploaded on or after this date (i.e. inclusive)
--min-views COUNT Do not download any videos with less than COUNT views
--max-views COUNT Do not download any videos with more than COUNT views
--match-filter FILTER Generic video filter. Specify any key (see the "OUTPUT TEMPLATE" for a list of available keys) to match if the key is present, !key to check if the key is
not present, key > NUMBER (like "comment_count > 12", also works with >=, <, <=, !=, =) to compare against a number, key = 'LITERAL' (like "uploader = 'Mike
Smith'", also works with !=) to match against a string literal and & to require multiple matches. Values which are not known are excluded unless you put a
question mark (?) after the operator. For example, to only match videos that have been liked more than 100 times and disliked less than 50 times (or the
dislike functionality is not available at the given service), but who also have a description, use --match-filter "like_count > 100 & dislike_count 50 &
description" .
--no-playlist Download only the video, if the URL refers to a video and a playlist.
--yes-playlist Download the playlist, if the URL refers to a video and a playlist.
--age-limit YEARS Download only videos suitable for the given age
--download-archive FILE Download only videos not listed in the archive file. Record the IDs of all downloaded videos in it.
--include-ads Download advertisements as well (experimental)
Download Options:
-r, --limit-rate RATE Maximum download rate in bytes per second (e.g. 50K or 4.2M)
-R, --retries RETRIES Number of retries (default is 10), or "infinite".
--fragment-retries RETRIES Number of retries for a fragment (default is 10), or "infinite" (DASH, hlsnative and ISM)
--skip-unavailable-fragments Skip unavailable fragments (DASH, hlsnative and ISM)
--abort-on-unavailable-fragment Abort downloading when some fragment is not available
--keep-fragments Keep downloaded fragments on disk after downloading is finished; fragments are erased by default
--buffer-size SIZE Size of download buffer (e.g. 1024 or 16K) (default is 1024)
--no-resize-buffer Do not automatically adjust the buffer size. By default, the buffer size is automatically resized from an initial value of SIZE.
--http-chunk-size SIZE Size of a chunk for chunk-based HTTP downloading (e.g. 10485760 or 10M) (default is disabled). May be useful for bypassing bandwidth throttling imposed by a
webserver (experimental)
--playlist-reverse Download playlist videos in reverse order
--playlist-random Download playlist videos in random order
--xattr-set-filesize Set file xattribute ytdl.filesize with expected file size
--hls-prefer-native Use the native HLS downloader instead of ffmpeg
--hls-prefer-ffmpeg Use ffmpeg instead of the native HLS downloader
--hls-use-mpegts Use the mpegts container for HLS videos, allowing to play the video while downloading (some players may not be able to play it)
--external-downloader COMMAND Use the specified external downloader. Currently supports aria2c,avconv,axel,curl,ffmpeg,httpie,wget
--external-downloader-args ARGS Give these arguments to the external downloader
Filesystem Options:
-a, --batch-file FILE File containing URLs to download ('-' for stdin), one URL per line. Lines starting with '#', ';' or ']' are considered as comments and ignored.
--id Use only video ID in file name
-o, --output TEMPLATE Output filename template, see the "OUTPUT TEMPLATE" for all the info
--output-na-placeholder PLACEHOLDER Placeholder value for unavailable meta fields in output filename template (default is "NA")
--autonumber-start NUMBER Specify the start value for %(autonumber)s (default is 1)
--restrict-filenames Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames
-w, --no-overwrites Do not overwrite files
-c, --continue Force resume of partially downloaded files. By default, youtube-dl will resume downloads if possible.
--no-continue Do not resume partially downloaded files (restart from beginning)
--no-part Do not use .part files - write directly into output file
--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
--write-annotations Write video annotations to a .annotations.xml file
--load-info-json FILE JSON file containing the video information (created with the "--write-info-json" option)
--cookies FILE File to read cookies from and dump cookie jar in
--cache-dir DIR Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl
. At the moment, only YouTube player files (for videos with obfuscated signatures) are cached, but that may change.
--no-cache-dir Disable filesystem caching
--rm-cache-dir Delete all filesystem cache files
Thumbnail images:
--write-thumbnail Write thumbnail image to disk
--write-all-thumbnails Write all thumbnail image formats to disk
--list-thumbnails Simulate and list all available thumbnail formats
Verbosity / Simulation Options:
-q, --quiet Activate quiet mode
--no-warnings Ignore warnings
-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-id Simulate, quiet but print id
--get-thumbnail Simulate, quiet but print thumbnail URL
--get-description Simulate, quiet but print video description
--get-duration Simulate, quiet but print video length
--get-filename Simulate, quiet but print output filename
--get-format Simulate, quiet but print output format
-j, --dump-json Simulate, quiet but print JSON information. See the "OUTPUT TEMPLATE" for a description of available keys.
-J, --dump-single-json Simulate, quiet but print JSON information for each command-line argument. If the URL refers to a playlist, dump the whole playlist information in a single
line.
--print-json Be quiet and print the video information as JSON (video is still being downloaded).
--newline Output progress bar as new lines
--no-progress Do not print progress bar
--console-title Display progress in console titlebar
-v, --verbose Print various debugging information
--dump-pages Print downloaded pages encoded using base64 to debug problems (very verbose)
--write-pages Write downloaded intermediary pages to files in the current directory to debug problems
--print-traffic Display sent and read HTTP traffic
-C, --call-home Contact the youtube-dl server for debugging
--no-call-home Do NOT contact the youtube-dl server for debugging
Workarounds:
--encoding ENCODING Force the specified encoding (experimental)
--no-check-certificate Suppress HTTPS certificate validation
--prefer-insecure Use an unencrypted connection to retrieve information about the video. (Currently supported only for YouTube)
--user-agent UA Specify a custom user agent
--referer URL Specify a custom referer, use if the video access is restricted to one domain
--add-header FIELD:VALUE Specify a custom HTTP header and its value, separated by a colon ':'. You can use this option multiple times
--bidi-workaround Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH
--sleep-interval SECONDS Number of seconds to sleep before each download when used alone or a lower bound of a range for randomized sleep before each download (minimum possible
number of seconds to sleep) when used along with --max-sleep-interval.
--max-sleep-interval SECONDS Upper bound of a range for randomized sleep before each download (maximum possible number of seconds to sleep). Must only be used along with --min-sleep-
interval.
Video Format Options:
-f, --format FORMAT Video format code, see the "FORMAT SELECTION" for all the info
--all-formats Download all available video formats
--prefer-free-formats Prefer free video formats unless a specific one is requested
-F, --list-formats List all available formats of requested videos
--youtube-skip-dash-manifest Do not download the DASH manifests and related data on YouTube videos
--merge-output-format FORMAT If a merge is required (e.g. bestvideo+bestaudio), output to given container format. One of mkv, mp4, ogg, webm, flv. Ignored if no merge is required
Subtitle Options:
--write-sub Write subtitle file
--write-auto-sub Write automatically generated subtitle file (YouTube only)
--all-subs Download all the available subtitles of the video
--list-subs List all available subtitles for the video
--sub-format FORMAT Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS Languages of the subtitles to download (optional) separated by commas, use --list-subs for available language tags
Authentication Options:
-u, --username USERNAME Login with this account ID
-p, --password PASSWORD Account password. If this option is left out, youtube-dl will ask interactively.
-2, --twofactor TWOFACTOR Two-factor authentication code
-n, --netrc Use .netrc authentication data
--video-password PASSWORD Video password (vimeo, youku)
Adobe Pass Options:
--ap-mso MSO Adobe Pass multiple-system operator (TV provider) identifier, use --ap-list-mso for a list of available MSOs
--ap-username USERNAME Multiple-system operator account login
--ap-password PASSWORD Multiple-system operator account password. If this option is left out, youtube-dl will ask interactively.
--ap-list-mso List all supported multiple-system operators
Post-processing Options:
-x, --extract-audio Convert video files to audio-only files (requires ffmpeg/avconv and ffprobe/avprobe)
--audio-format FORMAT Specify audio format: "best", "aac", "flac", "mp3", "m4a", "opus", "vorbis", or "wav"; "best" by default; No effect without -x
--audio-quality QUALITY Specify ffmpeg/avconv audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default 5)
--recode-video FORMAT Encode the video to another format if necessary (currently supported: mp4|flv|ogg|webm|mkv|avi)
--postprocessor-args ARGS Give these arguments to the postprocessor
-k, --keep-video Keep the video file on disk after the post-processing; the video is erased by default
--no-post-overwrites Do not overwrite post-processed files; the post-processed files are overwritten by default
--embed-subs Embed subtitles in the video (only for mp4, webm and mkv videos)
--embed-thumbnail Embed thumbnail in the audio as cover art
--add-metadata Write metadata to the video file
--metadata-from-title FORMAT Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output. Regular expression with named capture
groups may also be used. The parsed parameters replace existing values. Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like
"Coldplay - Paradise". Example (regex): --metadata-from-title "(?P.+?) - (?P.+)"
--xattrs Write metadata to the video file's xattrs (using dublin core and xdg standards)
--fixup POLICY Automatically correct known faults of the file. One of never (do nothing), warn (only emit a warning), detect_or_warn (the default; fix file if we can, warn
otherwise)
--prefer-avconv Prefer avconv over ffmpeg for running the postprocessors
--prefer-ffmpeg Prefer ffmpeg over avconv for running the postprocessors (default)
--ffmpeg-location PATH Location of the ffmpeg/avconv binary; either the path to the binary or its containing directory.
--exec CMD Execute a command on the file after downloading and post-processing, similar to find's -exec syntax. Example: --exec 'adb push {} /sdcard/Music/ && rm {}'
--convert-subs FORMAT Convert the subtitles to other format (currently supported: srt|ass|vtt|lrc)
youtube-dl Troubleshooting
Here are some common errors that you might encounter from time to time. Most errors will get fixed themselves after updating the youtube-dl to its most recent version.
However, a few errors like below will not get fixed even if you have an updated youtube-dl version.
1. Fix “Unable to download video data: HTTP Error 403: Forbidden” Error
When downloading videos from YouTube, sometimes you will get an error like below.
ERROR: unable to download video data: HTTP Error 403: Forbidden
To fix this error, run following command in console to update youtube-dl to latest version
sudo youtube-dl -U
2. WARNING: Requested formats are incompatible for merge and will be merged into mkv.
This is another common error. When you download a video, you will get an error like below:
[youtube] iOxzG3jjFkY: Downloading webpage
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
ERROR: unable to open for writing: [Errno 36] File name too long: '\xe0\xae\xa8\xe0\xaf\x8b\xe0\xae\xaf\xe0\xaf\x8d \xe0\xae\x8e\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x81 \xe0\xae\x9a\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xaf\x88 \xe0\xae\x85\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\x95\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xae\xe0\xaf\x8d \xe0\xae\x87\xe0\xae\xaf\xe0\xae\xb1\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88 \xe0\xae\xaa\xe0\xae\xbe\xe0\xae\xa9\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d - \xe0\xae\xa8\xe0\xae\xbe\xe0\xae\xae\xe0\xaf\x87 \xe0\xae\xa4\xe0\xae\xaf\xe0\xae\xbe\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\xa4\xe0\xaf\x81 \xe0\xae\x8e\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\x9f\xe0\xae\xbf- \xe0\xae\xae\xe0\xae\xb0\xe0\xaf\x81\xe0\xae\xa4\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x81\xe0\xae\xb5\xe0\xae\xb0\xe0\xaf\x8d \xe0\xae\xa4\xe0\xaf\x80\xe0\xae\xaa\xe0\xae\xbe \xe0\xae\xb5\xe0\xae\xbf\xe0\xae\xb3\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d-iOxzG3jjFkY.f136.mp4.part'
This is actually not a problem but an expected behavior for youtube-dl. By default, youtube-dl will download the highest quality audio and the highest quality video streams available and then join them into a compatible container like mkv, mp4 etc. If these audio and video streams doesn’t fit well in an mp4 container, youtube-dl will then pack them in mkv container and display the above warning message. In such cases, you can ignore the mkv warning and download the best quality video and the best quality audio but only in an mp4 container by explicitly mentioning the desired best quality audio and video formats like below:
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' https://youtu.be/iOxzG3jjFkY
3. ERROR: unable to open for writing: [Errno 36] File name too long
When you try to download a youtube video that has long name, you will probably get this error:
[youtube] iOxzG3jjFkY: Downloading webpage
ERROR: unable to open for writing: [Errno 36] File name too long: '\xe0\xae\xa8\xe0\xaf\x8b\xe0\xae\xaf\xe0\xaf\x8d \xe0\xae\x8e\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x81 \xe0\xae\x9a\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xaf\x88 \xe0\xae\x85\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\x95\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xae\xe0\xaf\x8d \xe0\xae\x87\xe0\xae\xaf\xe0\xae\xb1\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88 \xe0\xae\xaa\xe0\xae\xbe\xe0\xae\xa9\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d - \xe0\xae\xa8\xe0\xae\xbe\xe0\xae\xae\xe0\xaf\x87 \xe0\xae\xa4\xe0\xae\xaf\xe0\xae\xbe\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\xa4\xe0\xaf\x81 \xe0\xae\x8e\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\x9f\xe0\xae\xbf- \xe0\xae\xae\xe0\xae\xb0\xe0\xaf\x81\xe0\xae\xa4\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x81\xe0\xae\xb5\xe0\xae\xb0\xe0\xaf\x8d \xe0\xae\xa4\xe0\xaf\x80\xe0\xae\xaa\xe0\xae\xbe \xe0\xae\xb5\xe0\xae\xbf\xe0\xae\xb3\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d-iOxzG3jjFkY.f136.mp4.part
To fix this error, simply download the video with shorter name of your choice with “-o” flag like below:
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' -o video.mp4 https://youtu.be/iOxzG3jjFkY
Couple of youtube-dl command line references
// To download a video or playlist:
youtube-dl ''
// To list all formats that a video or playlist is available in:
youtube-dl --list-formats ''
// To download a video or playlist at a specific quality:
youtube-dl --format "" ''
// To download the audio from a video and convert it to an MP3:
youtube-dl -x --audio-format ''
// To download the best quality audio and video and merge them:
youtube-dl -f bestvideo+bestaudio ''
// To download video(s) as MP4 files with custom filenames:
youtube-dl --format -o "<%(title)s by %(uploader)s on %(upload_date)s in %(playlist)s.%(ext)s>" ''
// To download a particular language's subtitles along with the video:
youtube-dl --sub-lang --write-sub ''
// To download a playlist and extract mp3 from it:
youtube-dl -f "bestaudio" --continue --no-overwrites --ignore-errors --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s"
// ---
// To download a video in 720p MP4:
youtube-dl -f 22 example.com/watch?v=id
// To download a video in 720p MP4 or WebM or FLV:
youtube-dl -f 22/45/120
// To list all available formats of a video:
youtube-dl -F example.com/watch?v=id
// To download a video to /$uploader/$date/$title.$ext:
youtube-dl -o '%(uploader)s/%(date)s/%(title)s.%(ext)s' example.com/watch?v=id
// To download a video playlist starting from a certain video:
youtube-dl --playlist-start 5 example.com/watch?v=id&list=listid
// To simulate a download with youtube-dl:
youtube-dl -s example.com/watch?v=id
// For all video formats see
// http://en.wikipedia.org/wiki/YouTube//Quality_and_codecs
[…] Youtube-dl Tutorial With Examples For Beginners […]