mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Improve and test ffmpeg version detection
This commit is contained in:
		| @@ -16,39 +16,40 @@ import json | ||||
| import xml.etree.ElementTree | ||||
|  | ||||
| from youtube_dl.utils import ( | ||||
|     args_to_str, | ||||
|     clean_html, | ||||
|     DateRange, | ||||
|     detect_exe_version, | ||||
|     encodeFilename, | ||||
|     escape_rfc3986, | ||||
|     escape_url, | ||||
|     find_xpath_attr, | ||||
|     fix_xml_ampersands, | ||||
|     orderedSet, | ||||
|     OnDemandPagedList, | ||||
|     InAdvancePagedList, | ||||
|     intlist_to_bytes, | ||||
|     js_to_json, | ||||
|     limit_length, | ||||
|     OnDemandPagedList, | ||||
|     orderedSet, | ||||
|     parse_duration, | ||||
|     parse_filesize, | ||||
|     parse_iso8601, | ||||
|     read_batch_urls, | ||||
|     sanitize_filename, | ||||
|     shell_quote, | ||||
|     smuggle_url, | ||||
|     str_to_int, | ||||
|     strip_jsonp, | ||||
|     struct_unpack, | ||||
|     timeconvert, | ||||
|     unescapeHTML, | ||||
|     unified_strdate, | ||||
|     unsmuggle_url, | ||||
|     uppercase_escape, | ||||
|     url_basename, | ||||
|     urlencode_postdata, | ||||
|     xpath_with_ns, | ||||
|     parse_iso8601, | ||||
|     strip_jsonp, | ||||
|     uppercase_escape, | ||||
|     limit_length, | ||||
|     escape_rfc3986, | ||||
|     escape_url, | ||||
|     js_to_json, | ||||
|     intlist_to_bytes, | ||||
|     args_to_str, | ||||
|     parse_filesize, | ||||
|     version_tuple, | ||||
|     xpath_with_ns, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -390,5 +391,16 @@ class TestUtil(unittest.TestCase): | ||||
|         self.assertEqual(version_tuple('10.23.344'), (10, 23, 344)) | ||||
|         self.assertEqual(version_tuple('10.1-6'), (10, 1, 6))  # avconv style | ||||
|  | ||||
|     def test_detect_exe_version(self): | ||||
|         self.assertEqual(detect_exe_version('''ffmpeg version 1.2.1 | ||||
| built on May 27 2013 08:37:26 with gcc 4.7 (Debian 4.7.3-4) | ||||
| configuration: --prefix=/usr --extra-'''), '1.2.1') | ||||
|         self.assertEqual(detect_exe_version('''ffmpeg version N-63176-g1fb4685 | ||||
| built on May 15 2014 22:09:06 with gcc 4.8.2 (GCC)'''), 'N-63176-g1fb4685') | ||||
|         self.assertEqual(detect_exe_version('''X server found. dri2 connection failed! | ||||
| Trying to open render node... | ||||
| Success at /dev/dri/renderD128. | ||||
| ffmpeg version 2.4.4 Copyright (c) 2000-2014 the FFmpeg ...'''), '2.4.4') | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
| @@ -1262,18 +1262,25 @@ def check_executable(exe, args=[]): | ||||
|  | ||||
|  | ||||
| def get_exe_version(exe, args=['--version'], | ||||
|                     version_re=r'version\s+([0-9._-a-zA-Z]+)', | ||||
|                     unrecognized='present'): | ||||
|                     version_re=None, unrecognized='present'): | ||||
|     """ Returns the version of the specified executable, | ||||
|     or False if the executable is not present """ | ||||
|     try: | ||||
|         out, err = subprocess.Popen( | ||||
|         out, _ = subprocess.Popen( | ||||
|             [exe] + args, | ||||
|             stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate() | ||||
|     except OSError: | ||||
|         return False | ||||
|     firstline = out.partition(b'\n')[0].decode('ascii', 'ignore') | ||||
|     m = re.search(version_re, firstline) | ||||
|     if isinstance(out, bytes):  # Python 2.x | ||||
|         out = out.decode('ascii', 'ignore') | ||||
|     return detect_exe_version(out, version_re, unrecognized) | ||||
|  | ||||
|  | ||||
| def detect_exe_version(output, version_re=None, unrecognized='present'): | ||||
|     assert isinstance(output, compat_str) | ||||
|     if version_re is None: | ||||
|         version_re = r'version\s+([-0-9._a-zA-Z]+)' | ||||
|     m = re.search(version_re, output) | ||||
|     if m: | ||||
|         return m.group(1) | ||||
|     else: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister