Honor 'use_orig' for videos

When 'use_orig' is True, copy the original video files (or symlink them,
depending if 'orig_link' is True) to the destination, and use them as they are,
without processing.

This setting is ignored for all files not supported in HTML5; those are
converted anyway, because otherwise we could not reproduce them.
This commit is contained in:
Juan A. Suarez Romero
2015-04-26 22:09:10 +02:00
parent 016317b479
commit fb9eb3552d
4 changed files with 22 additions and 13 deletions

View File

@@ -44,7 +44,7 @@ from .compat import PY2, UnicodeMixin, strxfrm, url_quote, text_type
from .image import process_image, get_exif_tags, get_exif_data
from .settings import get_thumb
from .utils import (Devnull, copy, check_or_create_dir, url_from_path,
read_markdown, cached_property)
read_markdown, cached_property, is_valid_html5_video)
from .video import process_video
from .writer import Writer
@@ -176,11 +176,12 @@ class Video(Media):
def __init__(self, filename, path, settings):
super(Video, self).__init__(filename, path, settings)
base = splitext(filename)[0]
(base, ext) = splitext(filename)
self.date = None
self.src_filename = filename
self.filename = self.url = base + '.webm'
self.dst_path = join(settings['destination'], path, base + '.webm')
if not settings['use_orig'] or not is_valid_html5_video(ext):
self.filename = self.url = base + '.webm'
self.dst_path = join(settings['destination'], path, base + '.webm')
class Album(UnicodeMixin):

View File

@@ -99,6 +99,9 @@ def call_subprocess(cmd):
stdout = stdout.decode('utf8')
return p.returncode, stdout, stderr
def is_valid_html5_video(ext):
"""Checks if ext is a supported HTML5 video."""
return ext in ('.mp4', '.webm', '.ogv')
class cached_property(object):
""" A property that is only computed once per instance and then replaces

View File

@@ -29,9 +29,9 @@ import re
import shutil
from os.path import splitext
from . import image
from . import image, utils
from .settings import get_thumb, Status
from .utils import call_subprocess
from .utils import call_subprocess, is_valid_html5_video
class SubprocessException(Exception):
@@ -75,12 +75,12 @@ def video_size(source):
return x, y
def generate_video(source, outname, size, options=None):
def generate_video(source, outname, settings, options=None):
"""Video processor.
:param source: path to a video
:param outname: path to the generated video
:param size: size of the resized video `(width, height)`
:param settings: settings dict
:param options: array of options passed to ffmpeg
"""
@@ -89,7 +89,7 @@ def generate_video(source, outname, size, options=None):
# Don't transcode if source is in the required format and
# has fitting datedimensions, copy instead.
w_src, h_src = video_size(source)
w_dst, h_dst = size
w_dst, h_dst = settings['video_size']
logger.debug('Video size: %i, %i -> %i, %i', w_src, h_src, w_dst, h_dst)
base, src_ext = splitext(source)
@@ -149,12 +149,16 @@ def process_video(filepath, outpath, settings):
"""Process a video: resize, create thumbnail."""
filename = os.path.split(filepath)[1]
basename = splitext(filename)[0]
outname = os.path.join(outpath, basename + '.webm')
(basename, ext) = splitext(filename)
try:
generate_video(filepath, outname, settings['video_size'],
options=settings['webm_options'])
if settings['use_orig'] and is_valid_html5_video(ext):
outname = os.path.join(outpath, filename)
utils.copy(filepath, outname, symlink=settings['orig_link'])
else:
outname = os.path.join(outpath, basename + '.webm')
generate_video(filepath, outname, settings,
options=settings['webm_options'])
except Exception:
return Status.FAILURE

View File

@@ -114,6 +114,7 @@ def test_image(settings, tmpdir):
def test_video(settings, tmpdir):
settings['destination'] = str(tmpdir)
settings['use_orig'] = False
m = Video('stallman software-freedom-day-low.ogv', 'video', settings)
file_path = join('video', 'stallman software-freedom-day-low.webm')
assert str(m) == file_path