158

How can I use the download-dl to download video through url playlist only format mp4 instead format .mkv or .webm?

I use this command to download videos: youtube-dl -itcv --yes-playlist https://www.youtube.com/playlist?list=....

The result this command are video with extension .mp4, .mkv or .webm

3
  • 2
    look at the --list-formats and --format nn switches.
    – jc__
    Mar 29, 2016 at 14:59
  • Used -f mp4. But one times downloaded the file, on mp4, with 150mb and another time with 90mb. I was read the help, available through "youtube --help" and I can't find another parameter where I can specific to download the maxima quality! Mar 29, 2016 at 17:13
  • 2
    The answer is simple: youtube-dl --recode-video mp4 URL.
    – fralau
    Nov 6, 2020 at 10:44

5 Answers 5

202

Like this (source):

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' url
12
  • cool, this downloaded best video + best audio and merged it together.
    – Renetik
    Feb 1, 2017 at 6:08
  • 11
    If you don't care about the specific formats requested by OP, then it's worth noting that since 2015 the defaults for youtube-dl are -f bestvideo+bestaudio/best, so it's already setup to download the bestvideo and bestaudio (and automatically muxing them together in a resulting file). Source: github.com/rg3/youtube-dl/blob/master/…
    – red-o-alf
    Sep 19, 2017 at 6:46
  • @jj_ Definitely — when I use this command line, it’s to get an H.264+AAC version that’s compatible with the broadest range of devices.
    – s4y
    Sep 19, 2017 at 22:00
  • @s4y yes, but that comes with the risk of transcoding. To avoid that, I would manage this differently, not forcing a single container format on every downloaded file.
    – red-o-alf
    Sep 21, 2017 at 6:13
  • 2
    @s4y youtube-dl will indeed transcode when it needs to (--audio-format option) but you are right here: it should not be the case with that line, because you are forcing youtube-dl to download two files (bestaudio[ext=mp4] and bestvideo[ext=m4a]) that have the same kind of container in common (mp4), so whatever their content, when remuxing it, they will be stacked in another mp4 without any transcoding required.
    – red-o-alf
    Sep 21, 2017 at 22:00
142

To list the available formats type:

youtube-dl -F url

Then you can choose to download a certain format-type by entering the number for the format code (in the sample below 11):

youtube-dl -f 11 url 

Example from webupd8

youtube-dl -F http://www.youtube.com/watch?v=3JZ_D3ELwOQ

sample output:

[youtube] Setting language
[youtube] 3JZ_D3ELwOQ: Downloading webpage
[youtube] 3JZ_D3ELwOQ: Downloading video info webpage
[youtube] 3JZ_D3ELwOQ: Extracting video information
[info] Available formats for 3JZ_D3ELwOQ:
format code extension resolution  note 
171         webm      audio only  DASH webm audio , audio@ 48k (worst)
140         m4a       audio only  DASH audio , audio@128k
160         mp4       192p        DASH video 
133         mp4       240p        DASH video 
134         mp4       360p        DASH video 
135         mp4       480p        DASH video 
136         mp4       720p        DASH video 
137         mp4       1080p       DASH video 
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)

You can choose best and type

youtube-dl -f 22 http://www.youtube.com/watch?v=3JZ_D3ELwOQ

To get the best video quality (1080p DASH - format "137") and best audio quality (DASH audio - format "140"), you must use the following command:

youtube-dl -f 137+140 http://www.youtube.com/watch?v=3JZ_D3ELwOQ

EDIT

You can get more options here

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 (experimental).
                             Specify any key (see help for -o 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, 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)
4
  • When I download video on playlist, through "youtube-dl -itcv --yes-playlist url" exist some videos which didn't download. How can I do around this? Or, this problem existed because I didn't use parameter "-f mp4" and occurred a error when the program choose the best format to download? Mar 29, 2016 at 21:13
  • just type youtube-dl --yes-playlist url
    – GAD3R
    Mar 29, 2016 at 22:37
  • continu with the same problem. The playlist has I try download indicate 42 videos on youtube. But only 34 videos was download. The output this is: [youtube:playlist] playlist Name Playlist: Downloading 34 videos Mar 29, 2016 at 23:14
  • 2
    @EdgarOliveira often in playlists there are some deleted videos yet youtube continues to include in playlist ... is this causing the issue Aug 2, 2016 at 2:38
30

According to this comment by glenn-slayden, an mp4 format with highest video quality is obtained as follows:

I realize this thread is a bit old, but I think the situation has changed somewhat. For my goal:

  • first and foremost always take the best available video quality regardless of format;
  • but then never let the audio format alone cause you to lose mp4.

Previously, I was using bestvideo+bestaudio/best, but I find the following variant works much better for reducing mkv, (apparently) eliminating webm, but yet still guaranteeing the highest quality video (don't use the --merge-output-format option when using this):

--format bestvideo+bestaudio[ext=m4a]/bestvideo+bestaudio/best 

Notice that, in the first term, the ext filter is specified for the audio but not the video, a technique which I didn't see mentioned in the discussion above. If that seems backwards for my stated goals, that might be because, considering that we're trying to ensure that the video format is mp4, why is the constraint given for the audio?

The key is that each fallback term (separated by the slashes) will fail if any part of its requirement fails, moving on to the next term. When using bestvideo+bestaudio, many cases of getting a non-mp4 container only show up because that format selection unequivocally insists on bestaudio, which may then mean a mixed format. It's because the bestvideo+bestaudio command is too insistent that you get forced out of mp4.

But what if you care more about getting a mp4 container than you do about the audio quality? By insisting on m4a audio first--but then relenting on just that part while issuing bestvideo again--(by using the the format selection above) you essentially express a flexible preference for mp4 over the other containers; you surely do want mp4 if possible, but not at the cost of reduced video quality.

As I said, you may still get some mkv, but they will be greatly reduced in number and only used when required to supply a (supposedly) better video. And so far with this configuration, I haven't seen any webm at all, because something like 248+140 works ends up as mkv.

In the latter case, adding --merge-output-format mp4 will convert to mp4 if required. So the full command is:

youtube-dl --format "bestvideo+bestaudio[ext=m4a]/bestvideo+bestaudio/best" --merge-output-format mp4
1
  • While the other answers will download the highest quality available mp4 - this answer results in the highest quality mp4 possible despite conversion in some cases.
    – dtmland
    Jun 27, 2020 at 16:19
10

You can use youtube-dl -f mp4 <url>.

I am not sure if that's proper to do, only that it works, and gives an mp4 file with both highest quality audio and video for the mp4 format.

This file is slightly different from the file obtained with -f <the best options>, although the streams seem to be the same. I tried both on a video: -f mp4, then -f 137+140 (manually choosing the best audio and video). ffprobe says this about the file obtained with -f mp4:

Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2019-06-23T18:39:33.000000Z
    Duration: 00:00:56.01, start: 0.000000, bitrate: 906 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 775 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
      creation_time   : 2019-06-23T18:39:33.000000Z
      handler_name    : ISO Media file produced by Google Inc. Created on: 06/23/2019.
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
      creation_time   : 2019-06-23T18:39:33.000000Z
      handler_name    : ISO Media file produced by Google Inc. Created on: 06/23/2019.

And this about the file obtained with -f 137+140:

  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.9.100
  Duration: 00:00:56.05, start: 0.000000, bitrate: 909 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 775 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

So the video and audio streams look identical, but a different muxer (if I'm using that term correctly) has been used to put them together the final file.

1

Instead of using this to download an .mkv file:

youtube-dl 'https://www.youtube.com/watch?v=GwIzYX5t5l4'

simply use this to download an .mp4 file:

youtube-dl 'https://www.youtube.com/watch?v=GwIzYX5t5l4' --format "bestvideo+bestaudio[ext=m4a]/bestvideo+bestaudio/best" --merge-output-format mp4

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .