mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-06-18 15:55:30 +02:00
[ie/zdf] Fix language extraction and format sorting (#13313)
Closes #13118 Authored by: InvalidUsernameException
This commit is contained in:
parent
e3c605a61f
commit
db162b76f6
@ -64,7 +64,7 @@ class DreiSatIE(ZDFBaseIE):
|
|||||||
'title': 'dein buch - Das Beste von der Leipziger Buchmesse 2025 - Teil 1',
|
'title': 'dein buch - Das Beste von der Leipziger Buchmesse 2025 - Teil 1',
|
||||||
'description': 'md5:bae51bfc22f15563ce3acbf97d2e8844',
|
'description': 'md5:bae51bfc22f15563ce3acbf97d2e8844',
|
||||||
'duration': 5399.0,
|
'duration': 5399.0,
|
||||||
'thumbnail': 'https://www.3sat.de/assets/buchmesse-kerkeling-100~original?cb=1743329640903',
|
'thumbnail': 'https://www.3sat.de/assets/buchmesse-kerkeling-100~original?cb=1747256996338',
|
||||||
'chapters': 'count:24',
|
'chapters': 'count:24',
|
||||||
'episode': 'dein buch - Das Beste von der Leipziger Buchmesse 2025 - Teil 1',
|
'episode': 'dein buch - Das Beste von der Leipziger Buchmesse 2025 - Teil 1',
|
||||||
'episode_id': 'POS_1ef236cc-b390-401e-acd0-4fb4b04315fb',
|
'episode_id': 'POS_1ef236cc-b390-401e-acd0-4fb4b04315fb',
|
||||||
|
@ -6,6 +6,7 @@ import time
|
|||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
ISO639Utils,
|
||||||
determine_ext,
|
determine_ext,
|
||||||
filter_dict,
|
filter_dict,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
@ -118,10 +119,7 @@ class ZDFBaseIE(InfoExtractor):
|
|||||||
if ext == 'm3u8':
|
if ext == 'm3u8':
|
||||||
fmts = self._extract_m3u8_formats(
|
fmts = self._extract_m3u8_formats(
|
||||||
format_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
|
format_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
|
||||||
elif ext == 'mpd':
|
elif ext in ('mp4', 'webm'):
|
||||||
fmts = self._extract_mpd_formats(
|
|
||||||
format_url, video_id, mpd_id='dash', fatal=False)
|
|
||||||
else:
|
|
||||||
height = int_or_none(quality.get('highestVerticalResolution'))
|
height = int_or_none(quality.get('highestVerticalResolution'))
|
||||||
width = round(aspect_ratio * height) if aspect_ratio and height else None
|
width = round(aspect_ratio * height) if aspect_ratio and height else None
|
||||||
fmts = [{
|
fmts = [{
|
||||||
@ -132,16 +130,31 @@ class ZDFBaseIE(InfoExtractor):
|
|||||||
'format_id': join_nonempty('http', stream.get('type')),
|
'format_id': join_nonempty('http', stream.get('type')),
|
||||||
'tbr': int_or_none(self._search_regex(r'_(\d+)k_', format_url, 'tbr', default=None)),
|
'tbr': int_or_none(self._search_regex(r'_(\d+)k_', format_url, 'tbr', default=None)),
|
||||||
}]
|
}]
|
||||||
|
else:
|
||||||
|
self.report_warning(f'Skipping unsupported extension "{ext}"', video_id=video_id)
|
||||||
|
fmts = []
|
||||||
|
|
||||||
f_class = variant.get('class')
|
f_class = variant.get('class')
|
||||||
for f in fmts:
|
for f in fmts:
|
||||||
|
f_lang = ISO639Utils.short2long(
|
||||||
|
(f.get('language') or variant.get('language') or '').lower())
|
||||||
|
is_audio_only = f.get('vcodec') == 'none'
|
||||||
formats.append({
|
formats.append({
|
||||||
**f,
|
**f,
|
||||||
'format_id': join_nonempty(f.get('format_id'), is_dgs and 'dgs'),
|
'format_id': join_nonempty(f['format_id'], is_dgs and 'dgs'),
|
||||||
'format_note': join_nonempty(
|
'format_note': join_nonempty(
|
||||||
f_class, is_dgs and 'German Sign Language', f.get('format_note'), delim=', '),
|
not is_audio_only and f_class,
|
||||||
'language': variant.get('language') or f.get('language'),
|
is_dgs and 'German Sign Language',
|
||||||
|
f.get('format_note'), delim=', '),
|
||||||
'preference': -2 if is_dgs else -1,
|
'preference': -2 if is_dgs else -1,
|
||||||
'language_preference': 10 if f_class == 'main' else -10 if f_class == 'ad' else -1,
|
'language': f_lang,
|
||||||
|
'language_preference': (
|
||||||
|
-10 if ((is_audio_only and f.get('format_note') == 'Audiodeskription')
|
||||||
|
or (not is_audio_only and f_class == 'ad'))
|
||||||
|
else 10 if f_lang == 'deu' and f_class == 'main'
|
||||||
|
else 5 if f_lang == 'deu'
|
||||||
|
else 1 if f_class == 'main'
|
||||||
|
else -1),
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -333,12 +346,13 @@ class ZDFIE(ZDFBaseIE):
|
|||||||
'title': 'Dobrindt schließt Steuererhöhungen aus',
|
'title': 'Dobrindt schließt Steuererhöhungen aus',
|
||||||
'description': 'md5:9a117646d7b8df6bc902eb543a9c9023',
|
'description': 'md5:9a117646d7b8df6bc902eb543a9c9023',
|
||||||
'duration': 325,
|
'duration': 325,
|
||||||
'thumbnail': 'https://www.zdf.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080?cb=1743357653736',
|
'thumbnail': 'https://www.zdfheute.de/assets/dobrindt-csu-berlin-direkt-100~1920x1080?cb=1743357653736',
|
||||||
'timestamp': 1743374520,
|
'timestamp': 1743374520,
|
||||||
'upload_date': '20250330',
|
'upload_date': '20250330',
|
||||||
'_old_archive_ids': ['zdf 250330_clip_2_bdi'],
|
'_old_archive_ids': ['zdf 250330_clip_2_bdi'],
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
# FUNK video (hosted on a different CDN, has atypical PTMD and HLS files)
|
||||||
'url': 'https://www.zdf.de/funk/druck-11790/funk-alles-ist-verzaubert-102.html',
|
'url': 'https://www.zdf.de/funk/druck-11790/funk-alles-ist-verzaubert-102.html',
|
||||||
'md5': '57af4423db0455a3975d2dc4578536bc',
|
'md5': '57af4423db0455a3975d2dc4578536bc',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
@ -651,6 +665,7 @@ class ZDFChannelIE(ZDFBaseIE):
|
|||||||
'description': 'md5:6edad39189abf8431795d3d6d7f986b3',
|
'description': 'md5:6edad39189abf8431795d3d6d7f986b3',
|
||||||
},
|
},
|
||||||
'playlist_count': 242,
|
'playlist_count': 242,
|
||||||
|
'skip': 'Video count changes daily, needs support for playlist_maxcount',
|
||||||
}]
|
}]
|
||||||
|
|
||||||
_PAGE_SIZE = 24
|
_PAGE_SIZE = 24
|
||||||
|
Loading…
x
Reference in New Issue
Block a user