about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrancois du Toit <bluegray@purpleray>2011-09-28 01:28:37 +0200
committerFrancois du Toit <bluegray@purpleray>2011-09-28 01:28:37 +0200
commit3de2a1e63595741f7b7ea19b7ead7b212bf4d42f (patch)
tree64daa014c7285454c1777efb465e65a82891f164
parent1eff9ac0c58196b9da4909b63e590304a1d55801 (diff)
downloadyoutube-dl-3de2a1e63595741f7b7ea19b7ead7b212bf4d42f.tar.gz
youtube-dl-3de2a1e63595741f7b7ea19b7ead7b212bf4d42f.tar.xz
youtube-dl-3de2a1e63595741f7b7ea19b7ead7b212bf4d42f.zip
Added option -L to list available formats
-rwxr-xr-xyoutube-dl26
1 files changed, 26 insertions, 0 deletions
diff --git a/youtube-dl b/youtube-dl
index 6cb58f1a8..09f8ddd98 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -1103,6 +1103,21 @@ class YoutubeIE(InfoExtractor):
 		'44': 'webm',
 		'45': 'webm',
 	}
+	_video_dimensions = {
+		'5': '240x400',
+		'6': '???',
+		'13': '???',
+		'17': '144x176',
+		'18': '360x640',
+		'22': '720x1280',
+		'34': '360x640',
+		'35': '480x854',
+		'37': '1080x1920',
+		'38': '3072x4096',
+		'43': '360x640',
+		'44': '480x854',
+		'45': '720x1280',
+	}	
 	IE_NAME = u'youtube'
 
 	def report_lang(self):
@@ -1137,6 +1152,11 @@ class YoutubeIE(InfoExtractor):
 		"""Indicate the download will use the RTMP protocol."""
 		self._downloader.to_screen(u'[youtube] RTMP download detected')
 
+	def _print_formats(self, formats):
+		print 'Available formats:'
+		for x in formats:
+			print '%s\t:\t%s\t[%s]' %(x, self._video_extensions.get(x, 'flv'), self._video_dimensions.get(x, '???'))
+
 	def _real_initialize(self):
 		if self._downloader is None:
 			return
@@ -1330,6 +1350,9 @@ class YoutubeIE(InfoExtractor):
 			if len(existing_formats) == 0:
 				self._downloader.trouble(u'ERROR: no known formats available for video')
 				return
+			if self._downloader.params.get('listformats', None):
+				self._print_formats(existing_formats)
+				sys.exit(0)
 			if req_format is None or req_format == 'best':
 				video_url_list = [(existing_formats[0], url_map[existing_formats[0]])] # Best quality
 			elif req_format == 'worst':
@@ -3564,6 +3587,8 @@ def parseOpts():
 			action='store_const', dest='format', help='download all available video formats', const='all')
 	video_format.add_option('--max-quality',
 			action='store', dest='format_limit', metavar='FORMAT', help='highest quality format to download')
+	video_format.add_option('-L', '--list-formats',
+			action='store_true', dest='listformats', help='list all available formats')
 
 
 	verbosity.add_option('-q', '--quiet',
@@ -3784,6 +3809,7 @@ def main():
 		'skip_download': (opts.skip_download or opts.simulate or opts.geturl or opts.gettitle or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat),
 		'format': opts.format,
 		'format_limit': opts.format_limit,
+		'listformats': opts.listformats,
 		'outtmpl': ((opts.outtmpl is not None and opts.outtmpl.decode(preferredencoding()))
 			or (opts.format == '-1' and opts.usetitle and u'%(stitle)s-%(id)s-%(format)s.%(ext)s')
 			or (opts.format == '-1' and opts.useliteral and u'%(title)s-%(id)s-%(format)s.%(ext)s')