[postprocessor/ffmpeg] apply FFmpegFixupM3u8PP only for videos with aac codec(#5591)
This commit is contained in:
		
							parent
							
								
									fc86d4eed0
								
							
						
					
					
						commit
						30d9e20938
					
				
					 1 changed files with 31 additions and 32 deletions
				
			
		| 
						 | 
				
			
			@ -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,6 +503,7 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor):
 | 
			
		|||
class FFmpegFixupM3u8PP(FFmpegPostProcessor):
 | 
			
		||||
    def run(self, info):
 | 
			
		||||
        filename = info['filepath']
 | 
			
		||||
        if self.get_audio_codec(filename) == 'aac':
 | 
			
		||||
            temp_filename = prepend_extension(filename, 'temp')
 | 
			
		||||
 | 
			
		||||
            options = ['-c', 'copy', '-f', 'mp4', '-bsf:a', 'aac_adtstoasc']
 | 
			
		||||
| 
						 | 
				
			
			@ -512,7 +512,6 @@ class FFmpegFixupM3u8PP(FFmpegPostProcessor):
 | 
			
		|||
 | 
			
		||||
            os.remove(encodeFilename(filename))
 | 
			
		||||
            os.rename(encodeFilename(temp_filename), encodeFilename(filename))
 | 
			
		||||
 | 
			
		||||
        return [], info
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue