mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[utils/ffmpeg] Move ISO 639 related codes to utils
This commit is contained in:
		| @@ -21,6 +21,7 @@ from ..utils import ( | |||||||
|     shell_quote, |     shell_quote, | ||||||
|     subtitles_filename, |     subtitles_filename, | ||||||
|     dfxp2srt, |     dfxp2srt, | ||||||
|  |     ISO639Utils, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -307,199 +308,6 @@ class FFmpegVideoConvertorPP(FFmpegPostProcessor): | |||||||
|  |  | ||||||
|  |  | ||||||
| class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | ||||||
|     # See http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt |  | ||||||
|     _lang_map = { |  | ||||||
|         'aa': 'aar', |  | ||||||
|         'ab': 'abk', |  | ||||||
|         'ae': 'ave', |  | ||||||
|         'af': 'afr', |  | ||||||
|         'ak': 'aka', |  | ||||||
|         'am': 'amh', |  | ||||||
|         'an': 'arg', |  | ||||||
|         'ar': 'ara', |  | ||||||
|         'as': 'asm', |  | ||||||
|         'av': 'ava', |  | ||||||
|         'ay': 'aym', |  | ||||||
|         'az': 'aze', |  | ||||||
|         'ba': 'bak', |  | ||||||
|         'be': 'bel', |  | ||||||
|         'bg': 'bul', |  | ||||||
|         'bh': 'bih', |  | ||||||
|         'bi': 'bis', |  | ||||||
|         'bm': 'bam', |  | ||||||
|         'bn': 'ben', |  | ||||||
|         'bo': 'bod', |  | ||||||
|         'br': 'bre', |  | ||||||
|         'bs': 'bos', |  | ||||||
|         'ca': 'cat', |  | ||||||
|         'ce': 'che', |  | ||||||
|         'ch': 'cha', |  | ||||||
|         'co': 'cos', |  | ||||||
|         'cr': 'cre', |  | ||||||
|         'cs': 'ces', |  | ||||||
|         'cu': 'chu', |  | ||||||
|         'cv': 'chv', |  | ||||||
|         'cy': 'cym', |  | ||||||
|         'da': 'dan', |  | ||||||
|         'de': 'deu', |  | ||||||
|         'dv': 'div', |  | ||||||
|         'dz': 'dzo', |  | ||||||
|         'ee': 'ewe', |  | ||||||
|         'el': 'ell', |  | ||||||
|         'en': 'eng', |  | ||||||
|         'eo': 'epo', |  | ||||||
|         'es': 'spa', |  | ||||||
|         'et': 'est', |  | ||||||
|         'eu': 'eus', |  | ||||||
|         'fa': 'fas', |  | ||||||
|         'ff': 'ful', |  | ||||||
|         'fi': 'fin', |  | ||||||
|         'fj': 'fij', |  | ||||||
|         'fo': 'fao', |  | ||||||
|         'fr': 'fra', |  | ||||||
|         'fy': 'fry', |  | ||||||
|         'ga': 'gle', |  | ||||||
|         'gd': 'gla', |  | ||||||
|         'gl': 'glg', |  | ||||||
|         'gn': 'grn', |  | ||||||
|         'gu': 'guj', |  | ||||||
|         'gv': 'glv', |  | ||||||
|         'ha': 'hau', |  | ||||||
|         'he': 'heb', |  | ||||||
|         'hi': 'hin', |  | ||||||
|         'ho': 'hmo', |  | ||||||
|         'hr': 'hrv', |  | ||||||
|         'ht': 'hat', |  | ||||||
|         'hu': 'hun', |  | ||||||
|         'hy': 'hye', |  | ||||||
|         'hz': 'her', |  | ||||||
|         'ia': 'ina', |  | ||||||
|         'id': 'ind', |  | ||||||
|         'ie': 'ile', |  | ||||||
|         'ig': 'ibo', |  | ||||||
|         'ii': 'iii', |  | ||||||
|         'ik': 'ipk', |  | ||||||
|         'io': 'ido', |  | ||||||
|         'is': 'isl', |  | ||||||
|         'it': 'ita', |  | ||||||
|         'iu': 'iku', |  | ||||||
|         'ja': 'jpn', |  | ||||||
|         'jv': 'jav', |  | ||||||
|         'ka': 'kat', |  | ||||||
|         'kg': 'kon', |  | ||||||
|         'ki': 'kik', |  | ||||||
|         'kj': 'kua', |  | ||||||
|         'kk': 'kaz', |  | ||||||
|         'kl': 'kal', |  | ||||||
|         'km': 'khm', |  | ||||||
|         'kn': 'kan', |  | ||||||
|         'ko': 'kor', |  | ||||||
|         'kr': 'kau', |  | ||||||
|         'ks': 'kas', |  | ||||||
|         'ku': 'kur', |  | ||||||
|         'kv': 'kom', |  | ||||||
|         'kw': 'cor', |  | ||||||
|         'ky': 'kir', |  | ||||||
|         'la': 'lat', |  | ||||||
|         'lb': 'ltz', |  | ||||||
|         'lg': 'lug', |  | ||||||
|         'li': 'lim', |  | ||||||
|         'ln': 'lin', |  | ||||||
|         'lo': 'lao', |  | ||||||
|         'lt': 'lit', |  | ||||||
|         'lu': 'lub', |  | ||||||
|         'lv': 'lav', |  | ||||||
|         'mg': 'mlg', |  | ||||||
|         'mh': 'mah', |  | ||||||
|         'mi': 'mri', |  | ||||||
|         'mk': 'mkd', |  | ||||||
|         'ml': 'mal', |  | ||||||
|         'mn': 'mon', |  | ||||||
|         'mr': 'mar', |  | ||||||
|         'ms': 'msa', |  | ||||||
|         'mt': 'mlt', |  | ||||||
|         'my': 'mya', |  | ||||||
|         'na': 'nau', |  | ||||||
|         'nb': 'nob', |  | ||||||
|         'nd': 'nde', |  | ||||||
|         'ne': 'nep', |  | ||||||
|         'ng': 'ndo', |  | ||||||
|         'nl': 'nld', |  | ||||||
|         'nn': 'nno', |  | ||||||
|         'no': 'nor', |  | ||||||
|         'nr': 'nbl', |  | ||||||
|         'nv': 'nav', |  | ||||||
|         'ny': 'nya', |  | ||||||
|         'oc': 'oci', |  | ||||||
|         'oj': 'oji', |  | ||||||
|         'om': 'orm', |  | ||||||
|         'or': 'ori', |  | ||||||
|         'os': 'oss', |  | ||||||
|         'pa': 'pan', |  | ||||||
|         'pi': 'pli', |  | ||||||
|         'pl': 'pol', |  | ||||||
|         'ps': 'pus', |  | ||||||
|         'pt': 'por', |  | ||||||
|         'qu': 'que', |  | ||||||
|         'rm': 'roh', |  | ||||||
|         'rn': 'run', |  | ||||||
|         'ro': 'ron', |  | ||||||
|         'ru': 'rus', |  | ||||||
|         'rw': 'kin', |  | ||||||
|         'sa': 'san', |  | ||||||
|         'sc': 'srd', |  | ||||||
|         'sd': 'snd', |  | ||||||
|         'se': 'sme', |  | ||||||
|         'sg': 'sag', |  | ||||||
|         'si': 'sin', |  | ||||||
|         'sk': 'slk', |  | ||||||
|         'sl': 'slv', |  | ||||||
|         'sm': 'smo', |  | ||||||
|         'sn': 'sna', |  | ||||||
|         'so': 'som', |  | ||||||
|         'sq': 'sqi', |  | ||||||
|         'sr': 'srp', |  | ||||||
|         'ss': 'ssw', |  | ||||||
|         'st': 'sot', |  | ||||||
|         'su': 'sun', |  | ||||||
|         'sv': 'swe', |  | ||||||
|         'sw': 'swa', |  | ||||||
|         'ta': 'tam', |  | ||||||
|         'te': 'tel', |  | ||||||
|         'tg': 'tgk', |  | ||||||
|         'th': 'tha', |  | ||||||
|         'ti': 'tir', |  | ||||||
|         'tk': 'tuk', |  | ||||||
|         'tl': 'tgl', |  | ||||||
|         'tn': 'tsn', |  | ||||||
|         'to': 'ton', |  | ||||||
|         'tr': 'tur', |  | ||||||
|         'ts': 'tso', |  | ||||||
|         'tt': 'tat', |  | ||||||
|         'tw': 'twi', |  | ||||||
|         'ty': 'tah', |  | ||||||
|         'ug': 'uig', |  | ||||||
|         'uk': 'ukr', |  | ||||||
|         'ur': 'urd', |  | ||||||
|         'uz': 'uzb', |  | ||||||
|         've': 'ven', |  | ||||||
|         'vi': 'vie', |  | ||||||
|         'vo': 'vol', |  | ||||||
|         'wa': 'wln', |  | ||||||
|         'wo': 'wol', |  | ||||||
|         'xh': 'xho', |  | ||||||
|         'yi': 'yid', |  | ||||||
|         'yo': 'yor', |  | ||||||
|         'za': 'zha', |  | ||||||
|         'zh': 'zho', |  | ||||||
|         'zu': 'zul', |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @classmethod |  | ||||||
|     def _conver_lang_code(cls, code): |  | ||||||
|         """Convert language code from ISO 639-1 to ISO 639-2/T""" |  | ||||||
|         return cls._lang_map.get(code[:2]) |  | ||||||
|  |  | ||||||
|     def run(self, information): |     def run(self, information): | ||||||
|         if information['ext'] not in ['mp4', 'mkv']: |         if information['ext'] not in ['mp4', 'mkv']: | ||||||
|             self._downloader.to_screen('[ffmpeg] Subtitles can only be embedded in mp4 or mkv files') |             self._downloader.to_screen('[ffmpeg] Subtitles can only be embedded in mp4 or mkv files') | ||||||
| @@ -525,7 +333,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | |||||||
|             opts += ['-c:s', 'mov_text'] |             opts += ['-c:s', 'mov_text'] | ||||||
|         for (i, lang) in enumerate(sub_langs): |         for (i, lang) in enumerate(sub_langs): | ||||||
|             opts.extend(['-map', '%d:0' % (i + 1)]) |             opts.extend(['-map', '%d:0' % (i + 1)]) | ||||||
|             lang_code = self._conver_lang_code(lang) |             lang_code = ISO639Utils.short2long(lang) | ||||||
|             if lang_code is not None: |             if lang_code is not None: | ||||||
|                 opts.extend(['-metadata:s:s:%d' % i, 'language=%s' % lang_code]) |                 opts.extend(['-metadata:s:s:%d' % i, 'language=%s' % lang_code]) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1879,6 +1879,208 @@ def dfxp2srt(dfxp_data): | |||||||
|     return ''.join(out) |     return ''.join(out) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ISO639Utils(object): | ||||||
|  |     # See http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt | ||||||
|  |     _lang_map = { | ||||||
|  |         'aa': 'aar', | ||||||
|  |         'ab': 'abk', | ||||||
|  |         'ae': 'ave', | ||||||
|  |         'af': 'afr', | ||||||
|  |         'ak': 'aka', | ||||||
|  |         'am': 'amh', | ||||||
|  |         'an': 'arg', | ||||||
|  |         'ar': 'ara', | ||||||
|  |         'as': 'asm', | ||||||
|  |         'av': 'ava', | ||||||
|  |         'ay': 'aym', | ||||||
|  |         'az': 'aze', | ||||||
|  |         'ba': 'bak', | ||||||
|  |         'be': 'bel', | ||||||
|  |         'bg': 'bul', | ||||||
|  |         'bh': 'bih', | ||||||
|  |         'bi': 'bis', | ||||||
|  |         'bm': 'bam', | ||||||
|  |         'bn': 'ben', | ||||||
|  |         'bo': 'bod', | ||||||
|  |         'br': 'bre', | ||||||
|  |         'bs': 'bos', | ||||||
|  |         'ca': 'cat', | ||||||
|  |         'ce': 'che', | ||||||
|  |         'ch': 'cha', | ||||||
|  |         'co': 'cos', | ||||||
|  |         'cr': 'cre', | ||||||
|  |         'cs': 'ces', | ||||||
|  |         'cu': 'chu', | ||||||
|  |         'cv': 'chv', | ||||||
|  |         'cy': 'cym', | ||||||
|  |         'da': 'dan', | ||||||
|  |         'de': 'deu', | ||||||
|  |         'dv': 'div', | ||||||
|  |         'dz': 'dzo', | ||||||
|  |         'ee': 'ewe', | ||||||
|  |         'el': 'ell', | ||||||
|  |         'en': 'eng', | ||||||
|  |         'eo': 'epo', | ||||||
|  |         'es': 'spa', | ||||||
|  |         'et': 'est', | ||||||
|  |         'eu': 'eus', | ||||||
|  |         'fa': 'fas', | ||||||
|  |         'ff': 'ful', | ||||||
|  |         'fi': 'fin', | ||||||
|  |         'fj': 'fij', | ||||||
|  |         'fo': 'fao', | ||||||
|  |         'fr': 'fra', | ||||||
|  |         'fy': 'fry', | ||||||
|  |         'ga': 'gle', | ||||||
|  |         'gd': 'gla', | ||||||
|  |         'gl': 'glg', | ||||||
|  |         'gn': 'grn', | ||||||
|  |         'gu': 'guj', | ||||||
|  |         'gv': 'glv', | ||||||
|  |         'ha': 'hau', | ||||||
|  |         'he': 'heb', | ||||||
|  |         'hi': 'hin', | ||||||
|  |         'ho': 'hmo', | ||||||
|  |         'hr': 'hrv', | ||||||
|  |         'ht': 'hat', | ||||||
|  |         'hu': 'hun', | ||||||
|  |         'hy': 'hye', | ||||||
|  |         'hz': 'her', | ||||||
|  |         'ia': 'ina', | ||||||
|  |         'id': 'ind', | ||||||
|  |         'ie': 'ile', | ||||||
|  |         'ig': 'ibo', | ||||||
|  |         'ii': 'iii', | ||||||
|  |         'ik': 'ipk', | ||||||
|  |         'io': 'ido', | ||||||
|  |         'is': 'isl', | ||||||
|  |         'it': 'ita', | ||||||
|  |         'iu': 'iku', | ||||||
|  |         'ja': 'jpn', | ||||||
|  |         'jv': 'jav', | ||||||
|  |         'ka': 'kat', | ||||||
|  |         'kg': 'kon', | ||||||
|  |         'ki': 'kik', | ||||||
|  |         'kj': 'kua', | ||||||
|  |         'kk': 'kaz', | ||||||
|  |         'kl': 'kal', | ||||||
|  |         'km': 'khm', | ||||||
|  |         'kn': 'kan', | ||||||
|  |         'ko': 'kor', | ||||||
|  |         'kr': 'kau', | ||||||
|  |         'ks': 'kas', | ||||||
|  |         'ku': 'kur', | ||||||
|  |         'kv': 'kom', | ||||||
|  |         'kw': 'cor', | ||||||
|  |         'ky': 'kir', | ||||||
|  |         'la': 'lat', | ||||||
|  |         'lb': 'ltz', | ||||||
|  |         'lg': 'lug', | ||||||
|  |         'li': 'lim', | ||||||
|  |         'ln': 'lin', | ||||||
|  |         'lo': 'lao', | ||||||
|  |         'lt': 'lit', | ||||||
|  |         'lu': 'lub', | ||||||
|  |         'lv': 'lav', | ||||||
|  |         'mg': 'mlg', | ||||||
|  |         'mh': 'mah', | ||||||
|  |         'mi': 'mri', | ||||||
|  |         'mk': 'mkd', | ||||||
|  |         'ml': 'mal', | ||||||
|  |         'mn': 'mon', | ||||||
|  |         'mr': 'mar', | ||||||
|  |         'ms': 'msa', | ||||||
|  |         'mt': 'mlt', | ||||||
|  |         'my': 'mya', | ||||||
|  |         'na': 'nau', | ||||||
|  |         'nb': 'nob', | ||||||
|  |         'nd': 'nde', | ||||||
|  |         'ne': 'nep', | ||||||
|  |         'ng': 'ndo', | ||||||
|  |         'nl': 'nld', | ||||||
|  |         'nn': 'nno', | ||||||
|  |         'no': 'nor', | ||||||
|  |         'nr': 'nbl', | ||||||
|  |         'nv': 'nav', | ||||||
|  |         'ny': 'nya', | ||||||
|  |         'oc': 'oci', | ||||||
|  |         'oj': 'oji', | ||||||
|  |         'om': 'orm', | ||||||
|  |         'or': 'ori', | ||||||
|  |         'os': 'oss', | ||||||
|  |         'pa': 'pan', | ||||||
|  |         'pi': 'pli', | ||||||
|  |         'pl': 'pol', | ||||||
|  |         'ps': 'pus', | ||||||
|  |         'pt': 'por', | ||||||
|  |         'qu': 'que', | ||||||
|  |         'rm': 'roh', | ||||||
|  |         'rn': 'run', | ||||||
|  |         'ro': 'ron', | ||||||
|  |         'ru': 'rus', | ||||||
|  |         'rw': 'kin', | ||||||
|  |         'sa': 'san', | ||||||
|  |         'sc': 'srd', | ||||||
|  |         'sd': 'snd', | ||||||
|  |         'se': 'sme', | ||||||
|  |         'sg': 'sag', | ||||||
|  |         'si': 'sin', | ||||||
|  |         'sk': 'slk', | ||||||
|  |         'sl': 'slv', | ||||||
|  |         'sm': 'smo', | ||||||
|  |         'sn': 'sna', | ||||||
|  |         'so': 'som', | ||||||
|  |         'sq': 'sqi', | ||||||
|  |         'sr': 'srp', | ||||||
|  |         'ss': 'ssw', | ||||||
|  |         'st': 'sot', | ||||||
|  |         'su': 'sun', | ||||||
|  |         'sv': 'swe', | ||||||
|  |         'sw': 'swa', | ||||||
|  |         'ta': 'tam', | ||||||
|  |         'te': 'tel', | ||||||
|  |         'tg': 'tgk', | ||||||
|  |         'th': 'tha', | ||||||
|  |         'ti': 'tir', | ||||||
|  |         'tk': 'tuk', | ||||||
|  |         'tl': 'tgl', | ||||||
|  |         'tn': 'tsn', | ||||||
|  |         'to': 'ton', | ||||||
|  |         'tr': 'tur', | ||||||
|  |         'ts': 'tso', | ||||||
|  |         'tt': 'tat', | ||||||
|  |         'tw': 'twi', | ||||||
|  |         'ty': 'tah', | ||||||
|  |         'ug': 'uig', | ||||||
|  |         'uk': 'ukr', | ||||||
|  |         'ur': 'urd', | ||||||
|  |         'uz': 'uzb', | ||||||
|  |         've': 'ven', | ||||||
|  |         'vi': 'vie', | ||||||
|  |         'vo': 'vol', | ||||||
|  |         'wa': 'wln', | ||||||
|  |         'wo': 'wol', | ||||||
|  |         'xh': 'xho', | ||||||
|  |         'yi': 'yid', | ||||||
|  |         'yo': 'yor', | ||||||
|  |         'za': 'zha', | ||||||
|  |         'zh': 'zho', | ||||||
|  |         'zu': 'zul', | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def short2long(cls, code): | ||||||
|  |         """Convert language code from ISO 639-1 to ISO 639-2/T""" | ||||||
|  |         return cls._lang_map.get(code[:2]) | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def long2short(cls, code): | ||||||
|  |         """Convert language code from ISO 639-2/T to ISO 639-1""" | ||||||
|  |         for short_name, long_name in cls._lang_map.items(): | ||||||
|  |             if long_name == code: | ||||||
|  |                 return short_name | ||||||
|  |  | ||||||
|  |  | ||||||
| class PerRequestProxyHandler(compat_urllib_request.ProxyHandler): | class PerRequestProxyHandler(compat_urllib_request.ProxyHandler): | ||||||
|     def __init__(self, proxies=None): |     def __init__(self, proxies=None): | ||||||
|         # Set default handlers |         # Set default handlers | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yen Chi Hsuan
					Yen Chi Hsuan