mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 22:55:18 +00:00 
			
		
		
		
	Add fixup for media files produced by HlsNative downloader(fixes #4776)
This commit is contained in:
		| @@ -87,6 +87,7 @@ from .extractor import get_info_extractor, gen_extractors | ||||
| from .downloader import get_suitable_downloader | ||||
| from .downloader.rtmp import rtmpdump_version | ||||
| from .postprocessor import ( | ||||
|     FFmpegFixupM3u8PP, | ||||
|     FFmpegFixupM4aPP, | ||||
|     FFmpegFixupStretchedPP, | ||||
|     FFmpegMergerPP, | ||||
| @@ -1670,6 +1671,22 @@ class YoutubeDL(object): | ||||
|                     else: | ||||
|                         assert fixup_policy in ('ignore', 'never') | ||||
|  | ||||
|                 if info_dict.get('protocol') == 'm3u8_native' or info_dict.get('protocol') == 'm3u8' and self._downloader.params.get('hls_prefer_native', False): | ||||
|                     if fixup_policy == 'warn': | ||||
|                         self.report_warning('%s: malformated aac bitstream.' % ( | ||||
|                             info_dict['id'])) | ||||
|                     elif fixup_policy == 'detect_or_warn': | ||||
|                         fixup_pp = FFmpegFixupM3u8PP(self) | ||||
|                         if fixup_pp.available: | ||||
|                             info_dict.setdefault('__postprocessors', []) | ||||
|                             info_dict['__postprocessors'].append(fixup_pp) | ||||
|                         else: | ||||
|                             self.report_warning( | ||||
|                                 '%s: malformated aac bitstream. Install ffmpeg or avconv to fix this automatically.' % ( | ||||
|                                     info_dict['id'])) | ||||
|                     else: | ||||
|                         assert fixup_policy in ('ignore', 'never') | ||||
|  | ||||
|                 try: | ||||
|                     self.post_process(filename, info_dict) | ||||
|                 except (PostProcessingError) as err: | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from .ffmpeg import ( | ||||
|     FFmpegEmbedSubtitlePP, | ||||
|     FFmpegExtractAudioPP, | ||||
|     FFmpegFixupStretchedPP, | ||||
|     FFmpegFixupM3u8PP, | ||||
|     FFmpegFixupM4aPP, | ||||
|     FFmpegMergerPP, | ||||
|     FFmpegMetadataPP, | ||||
| @@ -26,6 +27,7 @@ __all__ = [ | ||||
|     'ExecAfterDownloadPP', | ||||
|     'FFmpegEmbedSubtitlePP', | ||||
|     'FFmpegExtractAudioPP', | ||||
|     'FFmpegFixupM3u8PP', | ||||
|     'FFmpegFixupM4aPP', | ||||
|     'FFmpegFixupStretchedPP', | ||||
|     'FFmpegMergerPP', | ||||
|   | ||||
| @@ -391,10 +391,6 @@ class FFmpegMetadataPP(FFmpegPostProcessor): | ||||
|         for (name, value) in metadata.items(): | ||||
|             options.extend(['-metadata', '%s=%s' % (name, value)]) | ||||
|  | ||||
|         # https://github.com/rg3/youtube-dl/issues/8350 | ||||
|         if info.get('protocol') == 'm3u8_native' or info.get('protocol') == 'm3u8' and self._downloader.params.get('hls_prefer_native', False): | ||||
|             options.extend(['-bsf:a', 'aac_adtstoasc']) | ||||
|  | ||||
|         self._downloader.to_screen('[ffmpeg] Adding metadata to \'%s\'' % filename) | ||||
|         self.run_ffmpeg(filename, temp_filename, options) | ||||
|         os.remove(encodeFilename(filename)) | ||||
| @@ -467,6 +463,21 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor): | ||||
|         return [], info | ||||
|  | ||||
|  | ||||
| class FFmpegFixupM3u8PP(FFmpegPostProcessor): | ||||
|     def run(self, info): | ||||
|         filename = info['filepath'] | ||||
|         temp_filename = prepend_extension(filename, 'temp') | ||||
|  | ||||
|         options = ['-c', 'copy', '-f', 'mp4', '-bsf:a', 'aac_adtstoasc'] | ||||
|         self._downloader.to_screen('[ffmpeg] Fixing malformated aac bitstream in "%s"' % filename) | ||||
|         self.run_ffmpeg(filename, temp_filename, options) | ||||
|  | ||||
|         os.remove(encodeFilename(filename)) | ||||
|         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) | ||||
|  | ||||
|         return [], info | ||||
|  | ||||
|  | ||||
| class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): | ||||
|     def __init__(self, downloader=None, format=None): | ||||
|         super(FFmpegSubtitlesConvertorPP, self).__init__(downloader) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 remitamine
					remitamine