mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 00:25:15 +00:00 
			
		
		
		
	[extractor] Add field audio_channels
				
					
				
			This commit is contained in:
		@@ -1276,6 +1276,7 @@ The available fields are:
 | 
				
			|||||||
 - `vbr` (numeric): Average video bitrate in KBit/s
 | 
					 - `vbr` (numeric): Average video bitrate in KBit/s
 | 
				
			||||||
 - `fps` (numeric): Frame rate
 | 
					 - `fps` (numeric): Frame rate
 | 
				
			||||||
 - `dynamic_range` (string): The dynamic range of the video
 | 
					 - `dynamic_range` (string): The dynamic range of the video
 | 
				
			||||||
 | 
					 - `audio_channels` (numeric): The number of audio channels
 | 
				
			||||||
 - `stretched_ratio` (float): `width:height` of the video's pixels, if not square
 | 
					 - `stretched_ratio` (float): `width:height` of the video's pixels, if not square
 | 
				
			||||||
 - `vcodec` (string): Name of the video codec in use
 | 
					 - `vcodec` (string): Name of the video codec in use
 | 
				
			||||||
 - `container` (string): Name of the container format
 | 
					 - `container` (string): Name of the container format
 | 
				
			||||||
@@ -1529,6 +1530,7 @@ The available fields are:
 | 
				
			|||||||
 - `res`: Video resolution, calculated as the smallest dimension.
 | 
					 - `res`: Video resolution, calculated as the smallest dimension.
 | 
				
			||||||
 - `fps`: Framerate of video
 | 
					 - `fps`: Framerate of video
 | 
				
			||||||
 - `hdr`: The dynamic range of the video (`DV` > `HDR12` > `HDR10+` > `HDR10` > `HLG` > `SDR`)
 | 
					 - `hdr`: The dynamic range of the video (`DV` > `HDR12` > `HDR10+` > `HDR10` > `HLG` > `SDR`)
 | 
				
			||||||
 | 
					 - `channels`: The number of audio channels
 | 
				
			||||||
 - `tbr`: Total average bitrate in KBit/s
 | 
					 - `tbr`: Total average bitrate in KBit/s
 | 
				
			||||||
 - `vbr`: Average video bitrate in KBit/s
 | 
					 - `vbr`: Average video bitrate in KBit/s
 | 
				
			||||||
 - `abr`: Average audio bitrate in KBit/s
 | 
					 - `abr`: Average audio bitrate in KBit/s
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -527,7 +527,8 @@ class YoutubeDL:
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _NUMERIC_FIELDS = {
 | 
					    _NUMERIC_FIELDS = {
 | 
				
			||||||
        'width', 'height', 'tbr', 'abr', 'asr', 'vbr', 'fps', 'filesize', 'filesize_approx',
 | 
					        'width', 'height', 'asr', 'audio_channels', 'fps',
 | 
				
			||||||
 | 
					        'tbr', 'abr', 'vbr', 'filesize', 'filesize_approx',
 | 
				
			||||||
        'timestamp', 'release_timestamp',
 | 
					        'timestamp', 'release_timestamp',
 | 
				
			||||||
        'duration', 'view_count', 'like_count', 'dislike_count', 'repost_count',
 | 
					        'duration', 'view_count', 'like_count', 'dislike_count', 'repost_count',
 | 
				
			||||||
        'average_rating', 'comment_count', 'age_limit',
 | 
					        'average_rating', 'comment_count', 'age_limit',
 | 
				
			||||||
@@ -539,7 +540,7 @@ class YoutubeDL:
 | 
				
			|||||||
    _format_fields = {
 | 
					    _format_fields = {
 | 
				
			||||||
        # NB: Keep in sync with the docstring of extractor/common.py
 | 
					        # NB: Keep in sync with the docstring of extractor/common.py
 | 
				
			||||||
        'url', 'manifest_url', 'manifest_stream_number', 'ext', 'format', 'format_id', 'format_note',
 | 
					        'url', 'manifest_url', 'manifest_stream_number', 'ext', 'format', 'format_id', 'format_note',
 | 
				
			||||||
        'width', 'height', 'resolution', 'dynamic_range', 'tbr', 'abr', 'acodec', 'asr',
 | 
					        'width', 'height', 'resolution', 'dynamic_range', 'tbr', 'abr', 'acodec', 'asr', 'audio_channels',
 | 
				
			||||||
        'vbr', 'fps', 'vcodec', 'container', 'filesize', 'filesize_approx',
 | 
					        'vbr', 'fps', 'vcodec', 'container', 'filesize', 'filesize_approx',
 | 
				
			||||||
        'player_url', 'protocol', 'fragment_base_url', 'fragments', 'is_from_start',
 | 
					        'player_url', 'protocol', 'fragment_base_url', 'fragments', 'is_from_start',
 | 
				
			||||||
        'preference', 'language', 'language_preference', 'quality', 'source_preference',
 | 
					        'preference', 'language', 'language_preference', 'quality', 'source_preference',
 | 
				
			||||||
@@ -2129,6 +2130,7 @@ class YoutubeDL:
 | 
				
			|||||||
                    'acodec': the_only_audio.get('acodec'),
 | 
					                    'acodec': the_only_audio.get('acodec'),
 | 
				
			||||||
                    'abr': the_only_audio.get('abr'),
 | 
					                    'abr': the_only_audio.get('abr'),
 | 
				
			||||||
                    'asr': the_only_audio.get('asr'),
 | 
					                    'asr': the_only_audio.get('asr'),
 | 
				
			||||||
 | 
					                    'audio_channels': the_only_audio.get('audio_channels')
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return new_dict
 | 
					            return new_dict
 | 
				
			||||||
@@ -3569,6 +3571,7 @@ class YoutubeDL:
 | 
				
			|||||||
                format_field(f, func=self.format_resolution, ignore=('audio only', 'images')),
 | 
					                format_field(f, func=self.format_resolution, ignore=('audio only', 'images')),
 | 
				
			||||||
                format_field(f, 'fps', '\t%d', func=round),
 | 
					                format_field(f, 'fps', '\t%d', func=round),
 | 
				
			||||||
                format_field(f, 'dynamic_range', '%s', ignore=(None, 'SDR')).replace('HDR', ''),
 | 
					                format_field(f, 'dynamic_range', '%s', ignore=(None, 'SDR')).replace('HDR', ''),
 | 
				
			||||||
 | 
					                format_field(f, 'audio_channels', '\t%s'),
 | 
				
			||||||
                delim,
 | 
					                delim,
 | 
				
			||||||
                format_field(f, 'filesize', ' \t%s', func=format_bytes) + format_field(f, 'filesize_approx', '~\t%s', func=format_bytes),
 | 
					                format_field(f, 'filesize', ' \t%s', func=format_bytes) + format_field(f, 'filesize_approx', '~\t%s', func=format_bytes),
 | 
				
			||||||
                format_field(f, 'tbr', '\t%dk', func=round),
 | 
					                format_field(f, 'tbr', '\t%dk', func=round),
 | 
				
			||||||
@@ -3588,7 +3591,7 @@ class YoutubeDL:
 | 
				
			|||||||
                    delim=' '),
 | 
					                    delim=' '),
 | 
				
			||||||
            ] for f in formats if f.get('preference') is None or f['preference'] >= -1000]
 | 
					            ] for f in formats if f.get('preference') is None or f['preference'] >= -1000]
 | 
				
			||||||
        header_line = self._list_format_headers(
 | 
					        header_line = self._list_format_headers(
 | 
				
			||||||
            'ID', 'EXT', 'RESOLUTION', '\tFPS', 'HDR', delim, '\tFILESIZE', '\tTBR', 'PROTO',
 | 
					            'ID', 'EXT', 'RESOLUTION', '\tFPS', 'HDR', 'CH', delim, '\tFILESIZE', '\tTBR', 'PROTO',
 | 
				
			||||||
            delim, 'VCODEC', '\tVBR', 'ACODEC', '\tABR', '\tASR', 'MORE INFO')
 | 
					            delim, 'VCODEC', '\tVBR', 'ACODEC', '\tABR', '\tASR', 'MORE INFO')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return render_table(
 | 
					        return render_table(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -154,6 +154,7 @@ class InfoExtractor:
 | 
				
			|||||||
                    * abr        Average audio bitrate in KBit/s
 | 
					                    * abr        Average audio bitrate in KBit/s
 | 
				
			||||||
                    * acodec     Name of the audio codec in use
 | 
					                    * acodec     Name of the audio codec in use
 | 
				
			||||||
                    * asr        Audio sampling rate in Hertz
 | 
					                    * asr        Audio sampling rate in Hertz
 | 
				
			||||||
 | 
					                    * audio_channels  Number of audio channels
 | 
				
			||||||
                    * vbr        Average video bitrate in KBit/s
 | 
					                    * vbr        Average video bitrate in KBit/s
 | 
				
			||||||
                    * fps        Frame rate
 | 
					                    * fps        Frame rate
 | 
				
			||||||
                    * vcodec     Name of the video codec in use
 | 
					                    * vcodec     Name of the video codec in use
 | 
				
			||||||
@@ -1668,7 +1669,7 @@ class InfoExtractor:
 | 
				
			|||||||
        regex = r' *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$'
 | 
					        regex = r' *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        default = ('hidden', 'aud_or_vid', 'hasvid', 'ie_pref', 'lang', 'quality',
 | 
					        default = ('hidden', 'aud_or_vid', 'hasvid', 'ie_pref', 'lang', 'quality',
 | 
				
			||||||
                   'res', 'fps', 'hdr:12', 'codec:vp9.2', 'size', 'br', 'asr',
 | 
					                   'res', 'fps', 'hdr:12', 'channels', 'codec:vp9.2', 'size', 'br', 'asr',
 | 
				
			||||||
                   'proto', 'ext', 'hasaud', 'source', 'id')  # These must not be aliases
 | 
					                   'proto', 'ext', 'hasaud', 'source', 'id')  # These must not be aliases
 | 
				
			||||||
        ytdl_default = ('hasaud', 'lang', 'quality', 'tbr', 'filesize', 'vbr',
 | 
					        ytdl_default = ('hasaud', 'lang', 'quality', 'tbr', 'filesize', 'vbr',
 | 
				
			||||||
                        'height', 'width', 'proto', 'vext', 'abr', 'aext',
 | 
					                        'height', 'width', 'proto', 'vext', 'abr', 'aext',
 | 
				
			||||||
@@ -1704,6 +1705,7 @@ class InfoExtractor:
 | 
				
			|||||||
            'height': {'convert': 'float_none'},
 | 
					            'height': {'convert': 'float_none'},
 | 
				
			||||||
            'width': {'convert': 'float_none'},
 | 
					            'width': {'convert': 'float_none'},
 | 
				
			||||||
            'fps': {'convert': 'float_none'},
 | 
					            'fps': {'convert': 'float_none'},
 | 
				
			||||||
 | 
					            'channels': {'convert': 'float_none', 'field': 'audio_channels'},
 | 
				
			||||||
            'tbr': {'convert': 'float_none'},
 | 
					            'tbr': {'convert': 'float_none'},
 | 
				
			||||||
            'vbr': {'convert': 'float_none'},
 | 
					            'vbr': {'convert': 'float_none'},
 | 
				
			||||||
            'abr': {'convert': 'float_none'},
 | 
					            'abr': {'convert': 'float_none'},
 | 
				
			||||||
@@ -1717,13 +1719,14 @@ class InfoExtractor:
 | 
				
			|||||||
            'res': {'type': 'multiple', 'field': ('height', 'width'),
 | 
					            'res': {'type': 'multiple', 'field': ('height', 'width'),
 | 
				
			||||||
                    'function': lambda it: (lambda l: min(l) if l else 0)(tuple(filter(None, it)))},
 | 
					                    'function': lambda it: (lambda l: min(l) if l else 0)(tuple(filter(None, it)))},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # For compatibility with youtube-dl
 | 
					            # Actual field names
 | 
				
			||||||
            'format_id': {'type': 'alias', 'field': 'id'},
 | 
					            'format_id': {'type': 'alias', 'field': 'id'},
 | 
				
			||||||
            'preference': {'type': 'alias', 'field': 'ie_pref'},
 | 
					            'preference': {'type': 'alias', 'field': 'ie_pref'},
 | 
				
			||||||
            'language_preference': {'type': 'alias', 'field': 'lang'},
 | 
					            'language_preference': {'type': 'alias', 'field': 'lang'},
 | 
				
			||||||
            'source_preference': {'type': 'alias', 'field': 'source'},
 | 
					            'source_preference': {'type': 'alias', 'field': 'source'},
 | 
				
			||||||
            'protocol': {'type': 'alias', 'field': 'proto'},
 | 
					            'protocol': {'type': 'alias', 'field': 'proto'},
 | 
				
			||||||
            'filesize_approx': {'type': 'alias', 'field': 'fs_approx'},
 | 
					            'filesize_approx': {'type': 'alias', 'field': 'fs_approx'},
 | 
				
			||||||
 | 
					            'audio_channels': {'type': 'alias', 'field': 'channels'},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Deprecated
 | 
					            # Deprecated
 | 
				
			||||||
            'dimension': {'type': 'alias', 'field': 'res', 'deprecated': True},
 | 
					            'dimension': {'type': 'alias', 'field': 'res', 'deprecated': True},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user