[ffmpeg] Improve version check and call it from hls (Fixes #4377)
This commit is contained in:
parent
f6735be4da
commit
5f9b83944d
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue