add new tests and fix some filter bugs
This commit is contained in:
parent
5d16aeb816
commit
f2d2f16722
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf8 -*-
|
||||
|
||||
from itertools import chain, islice
|
||||
from itertools import chain
|
||||
|
||||
from .options import CombinedOptions
|
||||
|
||||
|
|
@ -11,12 +11,8 @@ class CombinedFilter(CombinedOptions):
|
|||
return ",".join(CombinedFilter.__iter__(self))
|
||||
|
||||
def __iter__(self):
|
||||
i = CombinedOptions.__iter__
|
||||
keys = islice(i(self), 0, None, 2)
|
||||
values = islice(i(self), 1, None, 2)
|
||||
|
||||
for key, value in zip(keys, values):
|
||||
if value:
|
||||
for key, value in CombinedOptions.iteritems(self):
|
||||
if value is not None:
|
||||
yield "=".join([key, str(value)])
|
||||
else:
|
||||
yield key
|
||||
|
|
@ -73,8 +69,8 @@ class VideoFilter(CombinedFilter):
|
|||
self.add_option('format', filter)
|
||||
return self
|
||||
|
||||
def freior(self, name, **kwargs):
|
||||
filter = self._format_keyword_parameter(name, **kwargs)
|
||||
def freior(self, name, *args):
|
||||
filter = self._format_parameter(name, *args)
|
||||
self.add_option('frei0r', filter)
|
||||
return self
|
||||
|
||||
|
|
@ -87,7 +83,8 @@ class VideoFilter(CombinedFilter):
|
|||
self.add_option('hflip', None)
|
||||
return self
|
||||
|
||||
def hqdn3d(self, luma_sp='', chroma_sp='', luma_tmp='', chroma_tmp=''):
|
||||
def hqdn3d(self, luma_sp=None, chroma_sp=None,
|
||||
luma_tmp=None, chroma_tmp=None):
|
||||
filter = self._format_parameter(
|
||||
luma_sp, chroma_sp, luma_tmp, chroma_tmp)
|
||||
self.add_option('hqdn3d', filter)
|
||||
|
|
@ -130,25 +127,18 @@ class VideoFilter(CombinedFilter):
|
|||
self.add_option('select', expression)
|
||||
return self
|
||||
|
||||
def setdar(self, aspect):
|
||||
self.add_option('setdar', aspect)
|
||||
def setdar(self, x, y):
|
||||
filter = self._format_parameter(x, y)
|
||||
self.add_option('setdar', filter)
|
||||
return self
|
||||
|
||||
def setpts(self, expression):
|
||||
self.add_option('setpts', expression)
|
||||
return self
|
||||
|
||||
def setsar(self, aspect):
|
||||
self.add_option('setsar', aspect)
|
||||
return self
|
||||
|
||||
def settb(self, expression):
|
||||
self.add_option('settb', expression)
|
||||
return self
|
||||
|
||||
def showinfo(self, **kwargs):
|
||||
filter = self._format_keyword_parameter(**kwargs)
|
||||
self.add_option('showinfo', filter)
|
||||
def setsar(self, x, y):
|
||||
filter = self._format_parameter(x, y)
|
||||
self.add_option('setsar', filter)
|
||||
return self
|
||||
|
||||
def slicify(self, height=16):
|
||||
|
|
@ -177,13 +167,17 @@ class VideoFilter(CombinedFilter):
|
|||
|
||||
def _format_keyword_parameter(self, **kwargs):
|
||||
parameter_list = []
|
||||
for key, value in kwargs:
|
||||
print(kwargs)
|
||||
for key, value in kwargs.items():
|
||||
try:
|
||||
if not value:
|
||||
parameter_list.append(key)
|
||||
else:
|
||||
parameter_list.append("=".join([key, value]))
|
||||
except TypeError:
|
||||
values = ":".join(value)
|
||||
values = ':'.join(kwargs[key])
|
||||
parameter_list.append("=".join([key, values]))
|
||||
return ":".join(parameter_list)
|
||||
return '"' + ':'.join(parameter_list) + '"'
|
||||
|
||||
def __iter__(self):
|
||||
return chain(['-vf', CombinedFilter.__str__(self)])
|
||||
|
|
|
|||
|
|
@ -11,14 +11,15 @@ class Options(dict):
|
|||
return dict.__getitem__(self, key)
|
||||
|
||||
def __iter__(self):
|
||||
return self.iteritems()
|
||||
|
||||
def iteritems(self):
|
||||
for option, value in self.items():
|
||||
yield option
|
||||
if value:
|
||||
yield value
|
||||
|
||||
def iteritems(self):
|
||||
for option, value in self.items():
|
||||
yield (option, value)
|
||||
|
||||
def __repr__(self):
|
||||
return "<{cls} {opts}>".format(opts=list(self),
|
||||
cls=self.__class__.__name__)
|
||||
|
|
@ -58,9 +59,14 @@ class CombinedOptions(object):
|
|||
return self._list
|
||||
|
||||
def __iter__(self):
|
||||
for item in self._list:
|
||||
for option in item:
|
||||
yield option
|
||||
for option in self._list:
|
||||
for item in option:
|
||||
yield item
|
||||
|
||||
def iteritems(self):
|
||||
for option in self._list:
|
||||
for item in option.iteritems():
|
||||
yield item
|
||||
|
||||
def __repr__(self):
|
||||
return "<{cls} {opts}>".format(opts=list(self),
|
||||
|
|
|
|||
144
test.py
144
test.py
|
|
@ -61,8 +61,148 @@ class FFmpegTestCase(unittest.TestCase):
|
|||
self.assertEqual(list(ffmpeg), ['-i', '/old', '/new'])
|
||||
|
||||
|
||||
class VideoFilter(unittest.TestCase):
|
||||
pass
|
||||
class VideoFilterTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.filter = VideoFilter()
|
||||
|
||||
def prefix(self, *args):
|
||||
return ['-vf'] + list(args)
|
||||
|
||||
def test_blackframe(self):
|
||||
self.filter.blackframe(10, 100)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('blackframe=10:100'))
|
||||
|
||||
def test_copy(self):
|
||||
self.filter.copy()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('copy'))
|
||||
|
||||
def test_crop(self):
|
||||
self.filter.crop(100, 100)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('crop=100:100'))
|
||||
|
||||
def test_cropdetect(self):
|
||||
self.filter.cropdetect(10)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('cropdetect=10'))
|
||||
|
||||
def test_drawbox(self):
|
||||
self.filter.drawbox(10, 10, 10, 10, 'red')
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('drawbox=10:10:10:10:red'))
|
||||
|
||||
def test_drawtext(self):
|
||||
self.filter.drawtext(fontfile="./font.ttf", text="Title")
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('drawtext="fontfile=./font.ttf:text=Title"'))
|
||||
|
||||
def test_fade(self):
|
||||
self.filter.fade(10, 10, 10)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('fade=10:10:10'))
|
||||
|
||||
def test_fieldorder(self):
|
||||
self.filter.fieldorder(1)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('fieldorder=1'))
|
||||
|
||||
def test_fifo(self):
|
||||
self.filter.fifo()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('fifo'))
|
||||
|
||||
def test_format(self):
|
||||
self.filter.format('yuv420p')
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('format=yuv420p'))
|
||||
|
||||
def test_freior(self):
|
||||
self.filter.freior('distort0r', 0.5, 0.01)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('frei0r=distort0r:0.5:0.01'))
|
||||
|
||||
def test_gradfun(self):
|
||||
self.filter.gradfun(10, 100)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('gradfun=10:100'))
|
||||
|
||||
def test_hflip(self):
|
||||
self.filter.hflip()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('hflip'))
|
||||
|
||||
def test_hqdn3d(self):
|
||||
self.filter.hqdn3d(2)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('hqdn3d=2'))
|
||||
|
||||
def test_mp(self):
|
||||
self.filter.mp(delogo=None)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('mp="delogo"'))
|
||||
|
||||
def test_negate(self):
|
||||
self.filter.negate()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('negate=1'))
|
||||
|
||||
def test_noformat(self):
|
||||
self.filter.noformat('yuv420p')
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('noformat=yuv420p'))
|
||||
|
||||
def test_null(self):
|
||||
self.filter.null()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('null'))
|
||||
|
||||
def test_overlay(self):
|
||||
self.filter.overlay(10, 10)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('overlay=10:10'))
|
||||
|
||||
def test_scale(self):
|
||||
self.filter.scale(792)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('scale=792:-1'))
|
||||
|
||||
def test_select(self):
|
||||
self.filter.select(1)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('select=1'))
|
||||
|
||||
def test_setdar(self):
|
||||
self.filter.setdar(16, 9)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('setdar=16:9'))
|
||||
|
||||
def test_setsar(self):
|
||||
self.filter.setsar(16, 9)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('setsar=16:9'))
|
||||
|
||||
def test_slicify(self):
|
||||
self.filter.slicify(20)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('slicify=20'))
|
||||
|
||||
def test_transpose(self):
|
||||
self.filter.transpose(2)
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('transpose=2'))
|
||||
|
||||
def test_vflip(self):
|
||||
self.filter.vflip()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('vflip'))
|
||||
|
||||
def test_yadif(self):
|
||||
self.filter.yadif()
|
||||
self.assertEqual(list(self.filter),
|
||||
self.prefix('yadif=0:-1'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
Loading…
Reference in a new issue