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 import get_suitable_downloader | ||||||
| from .downloader.rtmp import rtmpdump_version | from .downloader.rtmp import rtmpdump_version | ||||||
| from .postprocessor import ( | from .postprocessor import ( | ||||||
|  |     FFmpegFixupM3u8PP, | ||||||
|     FFmpegFixupM4aPP, |     FFmpegFixupM4aPP, | ||||||
|     FFmpegFixupStretchedPP, |     FFmpegFixupStretchedPP, | ||||||
|     FFmpegMergerPP, |     FFmpegMergerPP, | ||||||
| @@ -1670,6 +1671,22 @@ class YoutubeDL(object): | |||||||
|                     else: |                     else: | ||||||
|                         assert fixup_policy in ('ignore', 'never') |                         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: |                 try: | ||||||
|                     self.post_process(filename, info_dict) |                     self.post_process(filename, info_dict) | ||||||
|                 except (PostProcessingError) as err: |                 except (PostProcessingError) as err: | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ from .ffmpeg import ( | |||||||
|     FFmpegEmbedSubtitlePP, |     FFmpegEmbedSubtitlePP, | ||||||
|     FFmpegExtractAudioPP, |     FFmpegExtractAudioPP, | ||||||
|     FFmpegFixupStretchedPP, |     FFmpegFixupStretchedPP, | ||||||
|  |     FFmpegFixupM3u8PP, | ||||||
|     FFmpegFixupM4aPP, |     FFmpegFixupM4aPP, | ||||||
|     FFmpegMergerPP, |     FFmpegMergerPP, | ||||||
|     FFmpegMetadataPP, |     FFmpegMetadataPP, | ||||||
| @@ -26,6 +27,7 @@ __all__ = [ | |||||||
|     'ExecAfterDownloadPP', |     'ExecAfterDownloadPP', | ||||||
|     'FFmpegEmbedSubtitlePP', |     'FFmpegEmbedSubtitlePP', | ||||||
|     'FFmpegExtractAudioPP', |     'FFmpegExtractAudioPP', | ||||||
|  |     'FFmpegFixupM3u8PP', | ||||||
|     'FFmpegFixupM4aPP', |     'FFmpegFixupM4aPP', | ||||||
|     'FFmpegFixupStretchedPP', |     'FFmpegFixupStretchedPP', | ||||||
|     'FFmpegMergerPP', |     'FFmpegMergerPP', | ||||||
|   | |||||||
| @@ -391,10 +391,6 @@ class FFmpegMetadataPP(FFmpegPostProcessor): | |||||||
|         for (name, value) in metadata.items(): |         for (name, value) in metadata.items(): | ||||||
|             options.extend(['-metadata', '%s=%s' % (name, value)]) |             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._downloader.to_screen('[ffmpeg] Adding metadata to \'%s\'' % filename) | ||||||
|         self.run_ffmpeg(filename, temp_filename, options) |         self.run_ffmpeg(filename, temp_filename, options) | ||||||
|         os.remove(encodeFilename(filename)) |         os.remove(encodeFilename(filename)) | ||||||
| @@ -467,6 +463,21 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor): | |||||||
|         return [], info |         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): | class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): | ||||||
|     def __init__(self, downloader=None, format=None): |     def __init__(self, downloader=None, format=None): | ||||||
|         super(FFmpegSubtitlesConvertorPP, self).__init__(downloader) |         super(FFmpegSubtitlesConvertorPP, self).__init__(downloader) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 remitamine
					remitamine