2013-07-19 23:48:35 +02:00
|
|
|
import os
|
2020-03-15 22:58:03 -03:00
|
|
|
|
2015-05-26 23:05:40 +02:00
|
|
|
import pytest
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2020-03-15 22:58:03 -03:00
|
|
|
from sigal.settings import Status, create_settings
|
2020-11-25 23:33:21 -03:00
|
|
|
from sigal.video import (generate_thumbnail, generate_video, process_video,
|
|
|
|
|
video_size)
|
2013-07-19 23:48:35 +02:00
|
|
|
|
|
|
|
|
CURRENT_DIR = os.path.dirname(__file__)
|
2018-02-20 00:05:02 +01:00
|
|
|
TEST_VIDEO = 'example video.ogv'
|
2013-07-19 23:48:35 +02:00
|
|
|
SRCFILE = os.path.join(CURRENT_DIR, 'sample', 'pictures', 'video', TEST_VIDEO)
|
|
|
|
|
|
|
|
|
|
|
2014-07-20 23:35:28 +02:00
|
|
|
def test_video_size():
|
|
|
|
|
size_src = video_size(SRCFILE)
|
2018-09-05 13:26:05 +02:00
|
|
|
assert size_src == (320, 240)
|
2015-08-07 00:35:07 +02:00
|
|
|
size_src = video_size('missing/file.mp4')
|
|
|
|
|
assert size_src == (0, 0)
|
2014-07-20 23:35:28 +02:00
|
|
|
|
2015-06-14 00:38:45 +02:00
|
|
|
|
2020-11-25 23:33:21 -03:00
|
|
|
def test_generate_thumbnail(tmpdir):
|
|
|
|
|
outname = str(tmpdir.join('test.jpg'))
|
|
|
|
|
generate_thumbnail(SRCFILE, outname, (50, 50), 5)
|
|
|
|
|
assert os.path.isfile(outname)
|
|
|
|
|
|
|
|
|
|
|
2015-08-31 00:26:20 +02:00
|
|
|
def test_process_video(tmpdir):
|
|
|
|
|
base, ext = os.path.splitext(TEST_VIDEO)
|
|
|
|
|
|
|
|
|
|
settings = create_settings(video_format='ogv', use_orig=True,
|
|
|
|
|
orig_link=True)
|
|
|
|
|
process_video(SRCFILE, str(tmpdir), settings)
|
|
|
|
|
dstfile = str(tmpdir.join(base + '.ogv'))
|
|
|
|
|
assert os.path.realpath(dstfile) == SRCFILE
|
|
|
|
|
|
|
|
|
|
settings = create_settings(video_format='mjpg')
|
|
|
|
|
assert process_video(SRCFILE, str(tmpdir), settings) == Status.FAILURE
|
|
|
|
|
|
|
|
|
|
settings = create_settings(thumb_video_delay=-1)
|
|
|
|
|
assert process_video(SRCFILE, str(tmpdir), settings) == Status.FAILURE
|
|
|
|
|
|
|
|
|
|
|
2015-06-14 00:38:45 +02:00
|
|
|
@pytest.mark.parametrize("fmt", ['webm', 'mp4'])
|
2015-05-26 23:05:40 +02:00
|
|
|
def test_generate_video_fit_height(tmpdir, fmt):
|
2013-07-19 23:48:35 +02:00
|
|
|
"""largest fitting dimension is height"""
|
|
|
|
|
|
|
|
|
|
base, ext = os.path.splitext(TEST_VIDEO)
|
2015-05-26 23:05:40 +02:00
|
|
|
dstfile = str(tmpdir.join(base + '.' + fmt))
|
2018-09-05 13:26:05 +02:00
|
|
|
settings = create_settings(video_size=(80, 100), video_format=fmt)
|
2015-06-14 00:38:45 +02:00
|
|
|
generate_video(SRCFILE, dstfile, settings,
|
|
|
|
|
options=settings[fmt + '_options'])
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2013-12-18 00:25:39 +01:00
|
|
|
size_src = video_size(SRCFILE)
|
|
|
|
|
size_dst = video_size(dstfile)
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2018-09-05 13:26:05 +02:00
|
|
|
assert size_dst[0] == 80
|
2013-07-19 23:48:35 +02:00
|
|
|
# less than 2% error on ratio
|
2020-11-25 23:33:21 -03:00
|
|
|
assert abs(size_dst[0] / size_dst[1] - size_src[0] / size_src[1]) < 2e-2
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2015-06-14 00:38:45 +02:00
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("fmt", ['webm', 'mp4'])
|
2015-05-26 23:05:40 +02:00
|
|
|
def test_generate_video_fit_width(tmpdir, fmt):
|
2013-07-19 23:48:35 +02:00
|
|
|
"""largest fitting dimension is width"""
|
|
|
|
|
|
|
|
|
|
base, ext = os.path.splitext(TEST_VIDEO)
|
2015-05-26 23:05:40 +02:00
|
|
|
dstfile = str(tmpdir.join(base + '.' + fmt))
|
|
|
|
|
settings = create_settings(video_size=(100, 50), video_format=fmt)
|
2015-06-14 00:38:45 +02:00
|
|
|
generate_video(SRCFILE, dstfile, settings,
|
|
|
|
|
options=settings[fmt + '_options'])
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2013-12-18 00:25:39 +01:00
|
|
|
size_src = video_size(SRCFILE)
|
|
|
|
|
size_dst = video_size(dstfile)
|
2013-07-19 23:48:35 +02:00
|
|
|
|
|
|
|
|
assert size_dst[1] == 50
|
|
|
|
|
# less than 2% error on ratio
|
2020-11-25 23:33:21 -03:00
|
|
|
assert abs(size_dst[0] / size_dst[1] - size_src[0] / size_src[1]) < 2e-2
|
2013-07-19 23:48:35 +02:00
|
|
|
|
2015-06-14 00:38:45 +02:00
|
|
|
|
2015-08-31 00:26:20 +02:00
|
|
|
@pytest.mark.parametrize("fmt", ['webm', 'mp4', 'ogv'])
|
2015-05-26 23:05:40 +02:00
|
|
|
def test_generate_video_dont_enlarge(tmpdir, fmt):
|
2013-07-19 23:48:35 +02:00
|
|
|
"""video dimensions should not be enlarged"""
|
|
|
|
|
|
|
|
|
|
base, ext = os.path.splitext(TEST_VIDEO)
|
2015-05-26 23:05:40 +02:00
|
|
|
dstfile = str(tmpdir.join(base + '.' + fmt))
|
|
|
|
|
settings = create_settings(video_size=(1000, 1000), video_format=fmt)
|
2015-06-14 00:38:45 +02:00
|
|
|
generate_video(SRCFILE, dstfile, settings,
|
2015-08-31 00:26:20 +02:00
|
|
|
options=settings.get(fmt + '_options'))
|
2013-12-18 00:25:39 +01:00
|
|
|
size_src = video_size(SRCFILE)
|
|
|
|
|
size_dst = video_size(dstfile)
|
2013-07-19 23:48:35 +02:00
|
|
|
|
|
|
|
|
assert size_src == size_dst
|