about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2011-09-15 18:47:36 +0200
committerPhilipp Hagemeister <phihag@phihag.de>2011-09-15 18:47:36 +0200
commit5260e68f64781099b1540008bbd31be832760628 (patch)
treefaba2ae69a5e361a65f0b715184bab59b6613e75
parent6a1ca41e17f703931308e197638800f7f0c29411 (diff)
downloadyoutube-dl-5260e68f64781099b1540008bbd31be832760628.tar.gz
youtube-dl-5260e68f64781099b1540008bbd31be832760628.tar.xz
youtube-dl-5260e68f64781099b1540008bbd31be832760628.zip
Add format fallback
-rwxr-xr-xyoutube-dl18
1 files changed, 12 insertions, 6 deletions
diff --git a/youtube-dl b/youtube-dl
index a2100aa6d..7483fcfac 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -1320,18 +1320,24 @@ class YoutubeIE(InfoExtractor):
 			if len(existing_formats) == 0:
 				self._downloader.trouble(u'ERROR: no known formats available for video')
 				return
-			if req_format is None:
+			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':
 				video_url_list = [(existing_formats[len(existing_formats)-1], url_map[existing_formats[len(existing_formats)-1]])] # worst quality
-			elif req_format == '-1':
+			elif req_format in ('-1', 'all'):
 				video_url_list = [(f, url_map[f]) for f in existing_formats] # All formats
 			else:
-				# Specific format
-				if req_format not in url_map:
+				# Specific formats. We pick the first in a slash-delimeted sequence.
+				# For example, if '1/2/3/4' is requested and '2' and '4' are available, we pick '2'.
+				req_formats = req_format.split('/')
+				video_url_list = None
+				for rf in req_formats:
+					if rf in url_map:
+						video_url_list = [(rf, url_map[rf])]
+						break
+				if video_url_list is None:
 					self._downloader.trouble(u'ERROR: requested format not available')
 					return
-				video_url_list = [(req_format, url_map[req_format])] # Specific format
 		else:
 			self._downloader.trouble(u'ERROR: no conn or url_encoded_fmt_stream_map information found in video info')
 			return
@@ -3512,7 +3518,7 @@ def parseOpts():
 	video_format.add_option('-f', '--format',
 			action='store', dest='format', metavar='FORMAT', help='video format code')
 	video_format.add_option('--all-formats',
-			action='store_const', dest='format', help='download all available video formats', const='-1')
+			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')