diff options
Diffstat (limited to 'tests/python/ffmpeg_tests.py')
-rwxr-xr-x | tests/python/ffmpeg_tests.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/python/ffmpeg_tests.py b/tests/python/ffmpeg_tests.py new file mode 100755 index 00000000000..9493d6f7a17 --- /dev/null +++ b/tests/python/ffmpeg_tests.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +import argparse +import functools +import shutil +import pathlib +import subprocess +import sys +import tempfile +import unittest + +from modules.test_utils import AbstractBlenderRunnerTest + + +class AbstractFFmpegTest(AbstractBlenderRunnerTest): + @classmethod + def setUpClass(cls): + cls.blender = args.blender + cls.testdir = pathlib.Path(args.testdir) + + +class AbstractFFmpegSequencerTest(AbstractFFmpegTest): + def get_script_for_file(self, filename: pathlib.Path) -> str: + movie = self.testdir / filename + return \ + "import bpy; " \ + "bpy.context.scene.sequence_editor_create(); " \ + "strip = bpy.context.scene.sequence_editor.sequences.new_movie(" \ + "'test_movie', %r, channel=1, frame_start=1); " \ + "print(f'fps:{strip.fps}')" % movie.as_posix() + + def get_movie_file_fps(self, filename: pathlib.Path) -> float: + script = self.get_script_for_file(filename) + output = self.run_blender('', script) + for line in output.splitlines(): + if line.startswith('fps:'): + return float(line.split(':')[1]) + return 0.0 + + +class FPSDetectionTest(AbstractFFmpegSequencerTest): + def test_T51153(self): + self.assertAlmostEqual( + self.get_movie_file_fps('T51153_bad_clip_2.mts'), + 29.97, + places=2) + + def test_T53857(self): + self.assertAlmostEqual( + self.get_movie_file_fps('T53857_2018-01-22_15-30-49.mkv'), + 30.0, + places=2) + + def test_T54148(self): + self.assertAlmostEqual( + self.get_movie_file_fps('T54148_magn_0.mkv'), + 1.0, + places=2) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--blender', required=True) + parser.add_argument('--testdir', required=True) + args, remaining = parser.parse_known_args() + + unittest.main(argv=sys.argv[0:1] + remaining) |