[ffmpeg] Improve version check and call it from hls (Fixes #4377)

pull/4392/head
Philipp Hagemeister 10 years ago
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…
Cancel
Save