From 04959effe5fd908573fc73b4df2097d719bf66bc Mon Sep 17 00:00:00 2001 From: okor Date: Sun, 9 Apr 2017 10:03:13 -0400 Subject: [PATCH] remove scale option from ffmpeg, move dimension enforcement to transformer --- tests/handlers/test_base_handler.py | 8 ++++++++ thumbor/__init__.py | 4 ++-- thumbor/optimizers/gifv.py | 2 -- thumbor/transformer.py | 8 ++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/tests/handlers/test_base_handler.py b/tests/handlers/test_base_handler.py index 9050aad43..5634aea73 100644 --- a/tests/handlers/test_base_handler.py +++ b/tests/handlers/test_base_handler.py @@ -665,6 +665,14 @@ def test_should_convert_animated_gif_to_webm_when_filter_with_gifv_webm_param(se expect(response.code).to_equal(200) expect(response.headers['Content-Type']).to_equal('video/webm') + def test_should_convert_animated_gif_to_video_and_force_even_dimensions(self): + response = self.fetch('/unsafe/meta/51x51/filters:gifv()/animated.gif') + + expect(response.code).to_equal(200) + obj = loads(response.body) + expect(obj['thumbor']['target']['width']).to_equal(50) + expect(obj['thumbor']['target']['height']).to_equal(50) + class ImageOperationsImageCoverTestCase(BaseImagingTestCase): def get_context(self): diff --git a/thumbor/__init__.py b/thumbor/__init__.py index 21b2fa5eb..7ad521f8f 100644 --- a/thumbor/__init__.py +++ b/thumbor/__init__.py @@ -10,5 +10,5 @@ '''This is the main module in thumbor''' -__version__ = "6.3.1" -__release_date__ = "27-Mar-2017" +__version__ = "6.3.2" +__release_date__ = "10-Apr-2017" diff --git a/thumbor/optimizers/gifv.py b/thumbor/optimizers/gifv.py index 21525a79b..02d9a89ed 100644 --- a/thumbor/optimizers/gifv.py +++ b/thumbor/optimizers/gifv.py @@ -49,8 +49,6 @@ def optimize(self, buffer, input_file, output_file): '23', '-maxrate', '500k', - '-vf', - 'scale=trunc(iw/2)*2:trunc(ih/2)*2', output_file, '-loglevel', 'error' diff --git a/thumbor/transformer.py b/thumbor/transformer.py index 91e9bcd5f..c9db4cb1c 100644 --- a/thumbor/transformer.py +++ b/thumbor/transformer.py @@ -55,6 +55,14 @@ def _calculate_target_dimensions(self): else: self.target_height = self.engine.get_proportional_height(self.context.request.width) + # For gifv requests, videos can only have even number dimensions so we enforce that here. + # When this ffmpeg bug is fixed: https://trac.ffmpeg.org/ticket/6294 + # we can remove this work around and restore the scale filter + # to the original ffmpeg command options => '-vf', 'scale=trunc(iw/2)*2:trunc(ih/2)*2' + if 'gifv' in self.context.request.filters: + self.target_width = (self.target_width // 2) * 2 + self.target_height = (self.target_height // 2) * 2 + def get_target_dimensions(self): """ Returns the target dimensions and calculates them if necessary.