mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	Added option to allow different audio encoding qualities and to allow specify whether erase or not the video when it's need to extract the audio.
This commit is contained in:
		
							
								
								
									
										21
									
								
								youtube-dl
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										21
									
								
								youtube-dl
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -2611,11 +2611,17 @@ class PostProcessor(object): | ||||
|  | ||||
| class FFmpegExtractAudioPP(PostProcessor): | ||||
|  | ||||
| 	def __init__(self, downloader=None, preferredcodec=None): | ||||
| 	def __init__(self, downloader=None, preferredcodec=None, preferredquality=None, keepvideo=None): | ||||
| 		PostProcessor.__init__(self, downloader) | ||||
| 		if preferredcodec is None: | ||||
| 			preferredcodec = 'best' | ||||
| 		if preferredquality is None: | ||||
| 			preferredquality = '128K' | ||||
| 		if keepvideo is None: | ||||
| 			keepvideo = False; | ||||
| 		self._preferredcodec = preferredcodec | ||||
| 		self._preferredquality = preferredquality | ||||
| 		self._keepvideo = keepvideo | ||||
|  | ||||
| 	@staticmethod | ||||
| 	def get_audio_codec(path): | ||||
| @@ -2653,6 +2659,8 @@ class FFmpegExtractAudioPP(PostProcessor): | ||||
| 			return None | ||||
|  | ||||
| 		more_opts = [] | ||||
| 		if (self._preferredquality != '128K') and (self._preferredquality != '160K') and (self._preferredquality != '192K'): | ||||
| 			self._preferredquality = '128K' | ||||
| 		if self._preferredcodec == 'best' or self._preferredcodec == filecodec: | ||||
| 			if filecodec == 'aac' or filecodec == 'mp3': | ||||
| 				# Lossless if possible | ||||
| @@ -2664,12 +2672,12 @@ class FFmpegExtractAudioPP(PostProcessor): | ||||
| 				# MP3 otherwise. | ||||
| 				acodec = 'libmp3lame' | ||||
| 				extension = 'mp3' | ||||
| 				more_opts = ['-ab', '128k'] | ||||
| 				more_opts = ['-ab', self._preferredquality] | ||||
| 		else: | ||||
| 			# We convert the audio (lossy) | ||||
| 			acodec = {'mp3': 'libmp3lame', 'aac': 'aac'}[self._preferredcodec] | ||||
| 			extension = self._preferredcodec | ||||
| 			more_opts = ['-ab', '128k'] | ||||
| 			more_opts = ['-ab', self._preferredquality] | ||||
| 			if self._preferredcodec == 'aac': | ||||
| 				more_opts += ['-f', 'adts'] | ||||
|  | ||||
| @@ -2682,6 +2690,7 @@ class FFmpegExtractAudioPP(PostProcessor): | ||||
| 			self._downloader.to_stderr(u'WARNING: error running ffmpeg') | ||||
| 			return None | ||||
|  | ||||
| 		if not self._keepvideo: | ||||
| 			try: | ||||
| 				os.remove(path) | ||||
| 			except (IOError, OSError): | ||||
| @@ -2820,6 +2829,10 @@ if __name__ == '__main__': | ||||
| 				help='convert video files to audio-only files (requires ffmpeg and ffprobe)') | ||||
| 		postproc.add_option('--audio-format', metavar='FORMAT', dest='audioformat', default='best', | ||||
| 				help='"best", "aac" or "mp3"; best by default') | ||||
| 		postproc.add_option('--audio-quality', metavar='QUALITY', dest='audioquality', default='128K', | ||||
| 				help='128K, 160K or 192K; 128K by default') | ||||
| 		postproc.add_option('-k', '--keep-video', action='store_true', dest='keepvideo', default=False, | ||||
| 				help='keeps the video file on disk after the post-processing; the video is erased by default') | ||||
| 		parser.add_option_group(postproc) | ||||
|  | ||||
| 		(opts, args) = parser.parse_args() | ||||
| @@ -2970,7 +2983,7 @@ if __name__ == '__main__': | ||||
|  | ||||
| 		# PostProcessors | ||||
| 		if opts.extractaudio: | ||||
| 			fd.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat)) | ||||
| 			fd.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat,preferredquality=opts.audioquality,keepvideo=opts.keepvideo)) | ||||
|  | ||||
| 		# Update version | ||||
| 		if opts.update_self: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user