From 5f9b83944da7c531f82ace0ce9275c2661e7187e Mon Sep 17 00:00:00 2001 From: Philipp Hagemeister Date: Sat, 6 Dec 2014 12:14:26 +0100 Subject: [PATCH] [ffmpeg] Improve version check and call it from hls (Fixes #4377) --- test/test_utils.py | 6 ++++++ youtube_dl/downloader/hls.py | 4 ++++ youtube_dl/postprocessor/ffmpeg.py | 6 +++--- youtube_dl/utils.py | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/test/test_utils.py b/test/test_utils.py index badab1370..5c7bf5175 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -48,6 +48,7 @@ from youtube_dl.utils import ( intlist_to_bytes, args_to_str, parse_filesize, + version_tuple, ) @@ -381,5 +382,10 @@ class TestUtil(unittest.TestCase): self.assertEqual(parse_filesize('1.2Tb'), 1200000000000) 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__': unittest.main() diff --git a/youtube_dl/downloader/hls.py b/youtube_dl/downloader/hls.py index 954beffd5..ad26cfa40 100644 --- a/youtube_dl/downloader/hls.py +++ b/youtube_dl/downloader/hls.py @@ -4,6 +4,7 @@ import os import re import subprocess +from ..postprocessor.ffmpeg import FFmpegPostProcessor from .common import FileDownloader from ..utils import ( compat_urlparse, @@ -32,6 +33,9 @@ class HlsFD(FileDownloader): return False cmd = [program] + args + ffpp = FFmpegPostProcessor(downloader=self) + ffpp.check_version() + retval = subprocess.call(cmd) if retval == 0: fsize = os.path.getsize(encodeFilename(tmpfilename)) diff --git a/youtube_dl/postprocessor/ffmpeg.py b/youtube_dl/postprocessor/ffmpeg.py index 9303b8378..965ded4c1 100644 --- a/youtube_dl/postprocessor/ffmpeg.py +++ b/youtube_dl/postprocessor/ffmpeg.py @@ -37,11 +37,11 @@ class FFmpegPostProcessor(PostProcessor): if not self._executable: 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( - 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.' % ( - self._executable, self._executable, REQUIRED_VERSION) + self._executable, self._executable, required_version) if self._downloader: self._downloader.report_warning(warning) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 5efb4c59a..2e70cc791 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1502,7 +1502,7 @@ def limit_length(s, length): 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):