mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-12-04 10:33:48 +00:00
[utils] Support additional codecs and dynamic_range
This commit is contained in:
parent
aeb1254fcf
commit
6315f4b1df
@ -902,6 +902,30 @@ class TestUtil(unittest.TestCase):
|
|||||||
'vcodec': 'av01.0.05M.08',
|
'vcodec': 'av01.0.05M.08',
|
||||||
'acodec': 'none',
|
'acodec': 'none',
|
||||||
})
|
})
|
||||||
|
self.assertEqual(parse_codecs('vp9.2'), {
|
||||||
|
'vcodec': 'vp9.2',
|
||||||
|
'acodec': 'none',
|
||||||
|
'dynamic_range': 'HDR10',
|
||||||
|
})
|
||||||
|
self.assertEqual(parse_codecs('vp09.02.50.10.01.09.18.09.00'), {
|
||||||
|
'vcodec': 'vp09.02.50.10.01.09.18.09.00',
|
||||||
|
'acodec': 'none',
|
||||||
|
'dynamic_range': 'HDR10',
|
||||||
|
})
|
||||||
|
self.assertEqual(parse_codecs('av01.0.12M.10.0.110.09.16.09.0'), {
|
||||||
|
'vcodec': 'av01.0.12M.10.0.110.09.16.09.0',
|
||||||
|
'acodec': 'none',
|
||||||
|
'dynamic_range': 'HDR10',
|
||||||
|
})
|
||||||
|
self.assertEqual(parse_codecs('dvhe'), {
|
||||||
|
'vcodec': 'dvhe',
|
||||||
|
'acodec': 'none',
|
||||||
|
'dynamic_range': 'DV',
|
||||||
|
})
|
||||||
|
self.assertEqual(parse_codecs('fLaC'), {
|
||||||
|
'vcodec': 'none',
|
||||||
|
'acodec': 'flac',
|
||||||
|
})
|
||||||
self.assertEqual(parse_codecs('theora, vorbis'), {
|
self.assertEqual(parse_codecs('theora, vorbis'), {
|
||||||
'vcodec': 'theora',
|
'vcodec': 'theora',
|
||||||
'acodec': 'vorbis',
|
'acodec': 'vorbis',
|
||||||
|
|||||||
@ -4744,30 +4744,45 @@ def parse_codecs(codecs_str):
|
|||||||
if not codecs_str:
|
if not codecs_str:
|
||||||
return {}
|
return {}
|
||||||
split_codecs = list(filter(None, map(
|
split_codecs = list(filter(None, map(
|
||||||
lambda str: str.strip(), codecs_str.strip().strip(',').split(','))))
|
lambda s: s.strip(), codecs_str.strip().split(','))))
|
||||||
vcodec, acodec = None, None
|
vcodec, acodec, hdr = None, None, None
|
||||||
for full_codec in split_codecs:
|
for full_codec in split_codecs:
|
||||||
codec = full_codec.split('.')[0]
|
codec, rest = full_codec.partition('.')[::2]
|
||||||
if codec in ('avc1', 'avc2', 'avc3', 'avc4', 'vp9', 'vp8', 'hev1', 'hev2', 'h263', 'h264', 'mp4v', 'hvc1', 'av01', 'theora'):
|
codec = codec.lower()
|
||||||
if not vcodec:
|
full_codec = '.'.join((codec, rest)) if rest else codec
|
||||||
|
codec = re.sub(r'0+(?=\d)', '', codec)
|
||||||
|
if codec in ('avc1', 'avc2', 'avc3', 'avc4', 'vp9', 'vp8', 'hev1', 'hev2',
|
||||||
|
'h263', 'h264', 'mp4v', 'hvc1', 'av1', 'theora', 'dvh1', 'dvhe'):
|
||||||
|
if vcodec:
|
||||||
|
continue
|
||||||
vcodec = full_codec
|
vcodec = full_codec
|
||||||
elif codec in ('mp4a', 'opus', 'vorbis', 'mp3', 'aac', 'ac-3', 'ec-3', 'eac3', 'dtsc', 'dtse', 'dtsh', 'dtsl'):
|
if codec in ('dvh1', 'dvhe'):
|
||||||
|
hdr = 'DV'
|
||||||
|
elif codec in ('av1', 'vp9'):
|
||||||
|
n, m = {
|
||||||
|
'av1': (2, '10'),
|
||||||
|
'vp9': (0, '2'),
|
||||||
|
}[codec]
|
||||||
|
if (rest.split('.', n + 1)[n:] or [''])[0].lstrip('0') == m:
|
||||||
|
hdr = 'HDR10'
|
||||||
|
elif codec in ('flac', 'mp4a', 'opus', 'vorbis', 'mp3', 'aac', 'ac-4',
|
||||||
|
'ac-3', 'ec-3', 'eac3', 'dtsc', 'dtse', 'dtsh', 'dtsl'):
|
||||||
if not acodec:
|
if not acodec:
|
||||||
acodec = full_codec
|
acodec = full_codec
|
||||||
else:
|
else:
|
||||||
write_string('WARNING: Unknown codec %s\n' % full_codec, sys.stderr)
|
write_string('WARNING: Unknown codec %s\n' % (full_codec,), sys.stderr)
|
||||||
if not vcodec and not acodec:
|
|
||||||
if len(split_codecs) == 2:
|
return (
|
||||||
return {
|
filter_dict({
|
||||||
'vcodec': split_codecs[0],
|
|
||||||
'acodec': split_codecs[1],
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
return {
|
|
||||||
'vcodec': vcodec or 'none',
|
'vcodec': vcodec or 'none',
|
||||||
'acodec': acodec or 'none',
|
'acodec': acodec or 'none',
|
||||||
}
|
'dynamic_range': hdr,
|
||||||
return {}
|
}) if vcodec or acodec
|
||||||
|
else {
|
||||||
|
'vcodec': split_codecs[0],
|
||||||
|
'acodec': split_codecs[1],
|
||||||
|
} if len(split_codecs) == 2
|
||||||
|
else {})
|
||||||
|
|
||||||
|
|
||||||
def urlhandle_detect_ext(url_handle):
|
def urlhandle_detect_ext(url_handle):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user