mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[ffmpeg] Improve version check and call it from hls (Fixes #4377)
This commit is contained in:
		| @@ -48,6 +48,7 @@ from youtube_dl.utils import ( | |||||||
|     intlist_to_bytes, |     intlist_to_bytes, | ||||||
|     args_to_str, |     args_to_str, | ||||||
|     parse_filesize, |     parse_filesize, | ||||||
|  |     version_tuple, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -381,5 +382,10 @@ class TestUtil(unittest.TestCase): | |||||||
|         self.assertEqual(parse_filesize('1.2Tb'), 1200000000000) |         self.assertEqual(parse_filesize('1.2Tb'), 1200000000000) | ||||||
|         self.assertEqual(parse_filesize('1,24 KB'), 1240) |         self.assertEqual(parse_filesize('1,24 KB'), 1240) | ||||||
|  |  | ||||||
|  |     def test_version_tuple(self): | ||||||
|  |         self.assertEqual(version_tuple('1'), (1,)) | ||||||
|  |         self.assertEqual(version_tuple('10.23.344'), (10, 23, 344)) | ||||||
|  |         self.assertEqual(version_tuple('10-6'), (10, 6))  # avconv style | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import os | |||||||
| import re | import re | ||||||
| import subprocess | import subprocess | ||||||
|  |  | ||||||
|  | from ..postprocessor.ffmpeg import FFmpegPostProcessor | ||||||
| from .common import FileDownloader | from .common import FileDownloader | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     compat_urlparse, |     compat_urlparse, | ||||||
| @@ -32,6 +33,9 @@ class HlsFD(FileDownloader): | |||||||
|             return False |             return False | ||||||
|         cmd = [program] + args |         cmd = [program] + args | ||||||
|  |  | ||||||
|  |         ffpp = FFmpegPostProcessor(downloader=self) | ||||||
|  |         ffpp.check_version() | ||||||
|  |  | ||||||
|         retval = subprocess.call(cmd) |         retval = subprocess.call(cmd) | ||||||
|         if retval == 0: |         if retval == 0: | ||||||
|             fsize = os.path.getsize(encodeFilename(tmpfilename)) |             fsize = os.path.getsize(encodeFilename(tmpfilename)) | ||||||
|   | |||||||
| @@ -37,11 +37,11 @@ class FFmpegPostProcessor(PostProcessor): | |||||||
|         if not self._executable: |         if not self._executable: | ||||||
|             raise FFmpegPostProcessorError('ffmpeg or avconv not found. Please install one.') |             raise FFmpegPostProcessorError('ffmpeg or avconv not found. Please install one.') | ||||||
|  |  | ||||||
|         REQUIRED_VERSION = '1.0' |         required_version = '10-0' if self._uses_avconv() else '1.0' | ||||||
|         if is_outdated_version( |         if is_outdated_version( | ||||||
|                 self._versions[self._executable], REQUIRED_VERSION): |                 self._versions[self._executable], required_version): | ||||||
|             warning = 'Your copy of %s is outdated, update %s to version %s or newer if you encounter any errors.' % ( |             warning = 'Your copy of %s is outdated, update %s to version %s or newer if you encounter any errors.' % ( | ||||||
|                 self._executable, self._executable, REQUIRED_VERSION) |                 self._executable, self._executable, required_version) | ||||||
|             if self._downloader: |             if self._downloader: | ||||||
|                 self._downloader.report_warning(warning) |                 self._downloader.report_warning(warning) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1502,7 +1502,7 @@ def limit_length(s, length): | |||||||
|  |  | ||||||
|  |  | ||||||
| def version_tuple(v): | def version_tuple(v): | ||||||
|     return [int(e) for e in v.split('.')] |     return tuple(int(e) for e in re.split(r'[-.]', v)) | ||||||
|  |  | ||||||
|  |  | ||||||
| def is_outdated_version(version, limit, assume_new=True): | def is_outdated_version(version, limit, assume_new=True): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister