[postprocessor/ffmpeg] apply FFmpegFixupM3u8PP only for videos with aac codec(#5591)
This commit is contained in:
		| @@ -139,6 +139,30 @@ class FFmpegPostProcessor(PostProcessor): | ||||
|     def probe_executable(self): | ||||
|         return self._paths[self.probe_basename] | ||||
|  | ||||
|     def get_audio_codec(self, path): | ||||
|         if not self.probe_available: | ||||
|             raise PostProcessingError('ffprobe or avprobe not found. Please install one.') | ||||
|         try: | ||||
|             cmd = [ | ||||
|                 encodeFilename(self.probe_executable, True), | ||||
|                 encodeArgument('-show_streams'), | ||||
|                 encodeFilename(self._ffmpeg_filename_argument(path), True)] | ||||
|             if self._downloader.params.get('verbose', False): | ||||
|                 self._downloader.to_screen('[debug] %s command line: %s' % (self.basename, shell_quote(cmd))) | ||||
|             handle = subprocess.Popen(cmd, stderr=compat_subprocess_get_DEVNULL(), stdout=subprocess.PIPE, stdin=subprocess.PIPE) | ||||
|             output = handle.communicate()[0] | ||||
|             if handle.wait() != 0: | ||||
|                 return None | ||||
|         except (IOError, OSError): | ||||
|             return None | ||||
|         audio_codec = None | ||||
|         for line in output.decode('ascii', 'ignore').split('\n'): | ||||
|             if line.startswith('codec_name='): | ||||
|                 audio_codec = line.split('=')[1].strip() | ||||
|             elif line.strip() == 'codec_type=audio' and audio_codec is not None: | ||||
|                 return audio_codec | ||||
|         return None | ||||
|  | ||||
|     def run_ffmpeg_multiple_files(self, input_paths, out_path, opts): | ||||
|         self.check_version() | ||||
|  | ||||
| @@ -188,31 +212,6 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): | ||||
|         self._preferredquality = preferredquality | ||||
|         self._nopostoverwrites = nopostoverwrites | ||||
|  | ||||
|     def get_audio_codec(self, path): | ||||
|  | ||||
|         if not self.probe_available: | ||||
|             raise PostProcessingError('ffprobe or avprobe not found. Please install one.') | ||||
|         try: | ||||
|             cmd = [ | ||||
|                 encodeFilename(self.probe_executable, True), | ||||
|                 encodeArgument('-show_streams'), | ||||
|                 encodeFilename(self._ffmpeg_filename_argument(path), True)] | ||||
|             if self._downloader.params.get('verbose', False): | ||||
|                 self._downloader.to_screen('[debug] %s command line: %s' % (self.basename, shell_quote(cmd))) | ||||
|             handle = subprocess.Popen(cmd, stderr=compat_subprocess_get_DEVNULL(), stdout=subprocess.PIPE, stdin=subprocess.PIPE) | ||||
|             output = handle.communicate()[0] | ||||
|             if handle.wait() != 0: | ||||
|                 return None | ||||
|         except (IOError, OSError): | ||||
|             return None | ||||
|         audio_codec = None | ||||
|         for line in output.decode('ascii', 'ignore').split('\n'): | ||||
|             if line.startswith('codec_name='): | ||||
|                 audio_codec = line.split('=')[1].strip() | ||||
|             elif line.strip() == 'codec_type=audio' and audio_codec is not None: | ||||
|                 return audio_codec | ||||
|         return None | ||||
|  | ||||
|     def run_ffmpeg(self, path, out_path, codec, more_opts): | ||||
|         if codec is None: | ||||
|             acodec_opts = [] | ||||
| @@ -504,15 +503,15 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor): | ||||
| class FFmpegFixupM3u8PP(FFmpegPostProcessor): | ||||
|     def run(self, info): | ||||
|         filename = info['filepath'] | ||||
|         temp_filename = prepend_extension(filename, 'temp') | ||||
|         if self.get_audio_codec(filename) == 'aac': | ||||
|             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)) | ||||
|             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 | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user