diff options
Diffstat (limited to 'youtube_dlc/YoutubeDL.py')
-rw-r--r-- | youtube_dlc/YoutubeDL.py | 62 |
1 files changed, 53 insertions, 9 deletions
diff --git a/youtube_dlc/YoutubeDL.py b/youtube_dlc/YoutubeDL.py index 8fe608fc9..cbfb03c7b 100644 --- a/youtube_dlc/YoutubeDL.py +++ b/youtube_dlc/YoutubeDL.py @@ -61,6 +61,7 @@ from .utils import ( expand_path, ExtractorError, format_bytes, + format_field, formatSeconds, GeoRestrictedError, int_or_none, @@ -2382,19 +2383,62 @@ class YoutubeDL(object): res += '~' + format_bytes(fdict['filesize_approx']) return res + def _format_note_table(self, f): + def join_fields(*vargs): + return ', '.join((val for val in vargs if val != '')) + + return join_fields( + 'UNSUPPORTED' if f.get('ext') in ('f4f', 'f4m') else '', + format_field(f, 'language', '[%s]'), + format_field(f, 'format_note'), + format_field(f, 'container', ignore=(None, f.get('ext'))), + format_field(f, 'asr', '%5dHz')) + def list_formats(self, info_dict): formats = info_dict.get('formats', [info_dict]) - table = [ - [f['format_id'], f['ext'], self.format_resolution(f), self._format_note(f)] - for f in formats - if f.get('preference') is None or f['preference'] >= -1000] - # if len(formats) > 1: - # table[-1][-1] += (' ' if table[-1][-1] else '') + '(best*)' + new_format = self.params.get('listformats_table', False) + if new_format: + table = [ + [ + format_field(f, 'format_id'), + format_field(f, 'ext'), + self.format_resolution(f), + format_field(f, 'fps', '%d'), + '|', + format_field(f, 'filesize', ' %s', func=format_bytes) + format_field(f, 'filesize_approx', '~%s', func=format_bytes), + format_field(f, 'tbr', '%4dk'), + f.get('protocol').replace('http_dash_segments', 'dash').replace("native", "n"), + '|', + format_field(f, 'vcodec', default='unknown').replace('none', ''), + format_field(f, 'vbr', '%4dk'), + format_field(f, 'acodec', default='unknown').replace('none', ''), + format_field(f, 'abr', '%3dk'), + format_field(f, 'asr', '%5dHz'), + self._format_note_table(f)] + for f in formats + if f.get('preference') is None or f['preference'] >= -1000] + header_line = ['ID', 'EXT', 'RESOLUTION', 'FPS', '|', ' FILESIZE', ' TBR', 'PROTO', + '|', 'VCODEC', ' VBR', 'ACODEC', ' ABR', ' ASR', 'NOTE'] + else: + table = [ + [ + format_field(f, 'format_id'), + format_field(f, 'ext'), + self.format_resolution(f), + self._format_note(f)] + for f in formats + if f.get('preference') is None or f['preference'] >= -1000] + header_line = ['format code', 'extension', 'resolution', 'note'] - header_line = ['format code', 'extension', 'resolution', 'note'] + # if len(formats) > 1: + # table[-1][-1] += (' ' if table[-1][-1] else '') + '(best)' self.to_screen( - '[info] Available formats for %s:\n%s' % - (info_dict['id'], render_table(header_line, table))) + '[info] Available formats for %s:\n%s' % (info_dict['id'], render_table( + header_line, + table, + delim=new_format, + extraGap=(0 if new_format else 1), + hideEmpty=new_format))) def list_thumbnails(self, info_dict): thumbnails = info_dict.get('thumbnails') |