From 0b5e38b17c2f4c85387be752e2514d4614332c80 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 00:43:37 +0200 Subject: [PATCH 01/14] Adding video support --- sigal/gallery.py | 83 ++++++++++++------ sigal/settings.py | 3 +- sigal/themes/galleria/templates/index.html | 10 ++- sigal/video.py | 44 ++++++++++ sigal/writer.py | 9 ++ .../stallman-software-freedom-day-low.ogv | Bin 0 -> 159393 bytes tests/test_gallery.py | 19 ++-- 7 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 sigal/video.py create mode 100644 tests/sample/pictures/video/stallman-software-freedom-day-low.ogv diff --git a/sigal/gallery.py b/sigal/gallery.py index ce749f6..55aefa1 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -34,7 +34,8 @@ from clint.textui import progress, colored from os.path import join from PIL import Image as PILImage -from .image import generate_image, generate_thumbnail +import sigal.image +import sigal.video from .settings import get_thumb from .writer import Writer @@ -49,8 +50,9 @@ class PathsDb(object): """ - def __init__(self, path, ext_list): - self.ext_list = ext_list + def __init__(self, path, img_ext_list, vid_ext_list): + self.img_ext_list = img_ext_list + self.vid_ext_list = vid_ext_list self.logger = logging.getLogger(__name__) # basepath must to be a unicode string so that os.walk will return @@ -93,22 +95,26 @@ class PathsDb(object): self.db['paths_list'].append(relpath) self.db[relpath] = { 'img': [f for f in filenames - if os.path.splitext(f)[1] in self.ext_list], + if os.path.splitext(f)[1] in self.img_ext_list], + 'vid': [f for f in filenames + if os.path.splitext(f)[1] in self.vid_ext_list], 'subdir': dirnames } self.db[relpath].update(get_metadata(path)) - path_im = [path for path in self.db['paths_list'] - if self.db[path]['img'] and path != '.'] - path_noim = [path for path in self.db['paths_list'] - if not self.db[path]['img'] and path != '.'] + path_media = [path for path in self.db['paths_list'] + if (self.db[path]['img'] or self.db[path]['vid']) and + path != '.'] + path_nomedia = [path for path in self.db['paths_list'] if not + (self.db[path]['img'] or self.db[path]['vid']) and path != + '.'] # dir with images: check the thumbnail, and find it if necessary - for path in path_im: + for path in path_media: self.check_thumbnail(path) # dir without images, start with the deepest ones - for path in reversed(sorted(path_noim, key=lambda x: x.count('/'))): + for path in reversed(sorted(path_nomedia, key=lambda x: x.count('/'))): for subdir in self.get_subdirs(path): # use the thumbnail of their sub-directories if self.db[subdir].get('thumbnail', ''): @@ -162,7 +168,8 @@ class Gallery(object): theme=theme) self.paths = PathsDb(self.settings['source'], - self.settings['ext_list']) + self.settings['img_ext_list'], + self.settings['vid_ext_list']) self.paths.build() self.db = self.paths.db @@ -181,20 +188,22 @@ class Gallery(object): for path in reversed(self.db['paths_list']): imglist = [os.path.normpath(join(self.settings['source'], path, f)) for f in self.db[path]['img']] + vidlist = [os.path.normpath(join(self.settings['source'], path, f)) + for f in self.db[path]['vid']] # output dir for the current path - img_out = os.path.normpath(join(self.settings['destination'], + outpath = os.path.normpath(join(self.settings['destination'], path)) - check_or_create_dir(img_out) + check_or_create_dir(outpath) - if len(imglist) != 0: - self.process_dir(imglist, img_out, path, + if len(imglist) != 0 or len(vidlist) != 0: + self.process_dir(imglist, vidlist, outpath, path, label_width=label_width) if self.settings['write_html']: self.writer.write(self.db, path) - def process_dir(self, imglist, outpath, dirname, label_width=20): + def process_dir(self, imglist, vidlist, outpath, dirname, label_width=20): """Process a list of images in a directory.""" # Create thumbnails directory and optionally the one for original img @@ -203,28 +212,36 @@ class Gallery(object): if self.settings['keep_orig']: check_or_create_dir(join(outpath, self.settings['orig_dir'])) + media_files = imglist + vidlist + # use progressbar if level is > INFO if self.logger.getEffectiveLevel() > 20: label = colored.green(dirname.ljust(label_width)) - img_iterator = progress.bar(imglist, label=label) + media_iterator = progress.bar(media_files, label=label) else: - img_iterator = iter(imglist) + media_iterator = iter(media_files) self.logger.info("") - self.logger.info(":: Processing '%s' [%i images]", - colored.green(dirname), len(imglist)) + self.logger.info(":: Processing '%s' [%i img/vid]", + colored.green(dirname), len(media_files)) self.logger.info("") try: # loop on images - for f in img_iterator: + for f in media_iterator: filename = os.path.split(f)[1] - outname = join(outpath, filename) + if f in imglist: + outname = join(outpath, filename) + else: + outname = ''.join([os.path.splitext(filename)[0], '.webm']) if os.path.isfile(outname) and not self.force: self.logger.info("%s exists - skipping", filename) else: self.logger.info(filename) - process_image(f, outpath, self.settings) + if f in imglist: + process_image(f, outpath, self.settings) + else: + process_video(f, outpath, self.settings) except KeyboardInterrupt: sys.exit('Interrupted') @@ -247,15 +264,31 @@ def process_image(filepath, outpath, settings): if settings['keep_orig']: shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) - generate_image(filepath, outname, settings['img_size'], None, + sigal.image.generate_image(filepath, outname, settings['img_size'], None, options=options, copyright_text=settings['copyright'], method=settings['img_processor']) if settings['make_thumbs']: thumb_name = join(outpath, get_thumb(settings, filename)) - generate_thumbnail(outname, thumb_name, settings['thumb_size'], None, + sigal.image.generate_thumbnail(outname, thumb_name, settings['thumb_size'], None, fit=settings['thumb_fit'], options=options) +def process_video(filepath, outpath, settings): + """Process one image: resize, create thumbnail.""" + + filename = os.path.split(filepath)[1] + base, ext = os.path.splitext(filename) + outname = join(outpath, base + '.webm') + + if settings['keep_orig']: + shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) + + sigal.video.generate_video(filepath, outname) + + if settings['make_thumbs']: + thumb_name = join(outpath, get_thumb(settings, base + '.jpg')) + sigal.video.generate_thumbnail(outname, thumb_name) + def get_metadata(path): """ Get album metadata from DESCRIPTION_FILE: diff --git a/sigal/settings.py b/sigal/settings.py index 583f15c..a71bf9d 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -38,7 +38,8 @@ _DEFAULT_CONFIG = { 'orig_dir': 'original', 'jpg_options': {'quality': 85, 'optimize': True, 'progressive': True}, 'copyright': '', - 'ext_list': ['.jpg', '.jpeg', '.JPG', '.JPEG', '.png'], + 'img_ext_list': ['.jpg', '.jpeg', '.JPG', '.JPEG', '.png'], + 'vid_ext_list': ['.MOV', '.mov', '.avi', '.mp4', '.webm', '.ogv'], 'theme': 'colorbox', 'write_html': True, 'index_in_url': False, diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index 532a646..700040d 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -13,7 +13,7 @@ @@ -57,7 +57,7 @@ {% endif %} - {% if images %} + {% if image or videos %} {% endif %} @@ -82,7 +86,7 @@ - {% if images %} + {% if images or videos %} diff --git a/sigal/video.py b/sigal/video.py new file mode 100644 index 0000000..1ff35fb --- /dev/null +++ b/sigal/video.py @@ -0,0 +1,44 @@ +# -*- coding:utf-8 -*- + +# Copyright (c) 2013 - Christophe-Marie Duquesne + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from __future__ import with_statement +import subprocess + +def generate_video(source, outname, options=['-vf', 'scale=800:trunc(ow/a/2)*2']): + # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio + """Video processor + + :param source: path to an image + :param outname: name of the generated video + :param options: array of options passed to ffmpeg + + """ + with open("/dev/null") as devnull: + subprocess.call(['ffmpeg', '-i', source, '-y'] + options + + [outname], stderr=devnull) + +def generate_thumbnail(source, outname, options=['-vf', 'scale=80:trunc(ow/a/2)*2']): + # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio + "Create a thumbnail image" + with open("/dev/null") as devnull: + subprocess.call(['ffmpeg', '-i', source, '-an', '-r', '1', + '-vframes', '1', '-y'] + options + [outname], stderr=devnull) diff --git a/sigal/writer.py b/sigal/writer.py index 60d09ed..c7c6d5f 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -90,6 +90,7 @@ class Writer(object): 'sigal_link': sigal_link, 'theme': {'name': os.path.basename(self.theme)}, 'images': [], + 'videos': [], 'albums': [], 'breadcumb': '' } @@ -141,6 +142,14 @@ class Writer(object): img_ctx['big'] = get_orig(self.settings, i) ctx['images'].append(img_ctx) + for i in paths[relpath]['vid']: + base, ext = os.path.splitext(i) + vid_ctx = {'file': base + '.webm', + 'thumb': get_thumb(self.settings, base + '.jpg')} + if self.settings['keep_orig']: + vid_ctx['big'] = get_orig(self.settings, i) + ctx['videos'].append(vid_ctx) + for d in paths[relpath]['subdir']: dpath = os.path.normpath(os.path.join(relpath, d)) alb_thumb = paths[dpath]['thumbnail'] diff --git a/tests/sample/pictures/video/stallman-software-freedom-day-low.ogv b/tests/sample/pictures/video/stallman-software-freedom-day-low.ogv new file mode 100644 index 0000000000000000000000000000000000000000..0a88cb4738f28cfd8c3c503d77ed7b46e9cadb74 GIT binary patch literal 159393 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 z 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 `S)od&=7+_<& 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

a-p;k=F^(u84@}J0Wmtn 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ξ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 literal 0 HcmV?d00001 diff --git a/tests/test_gallery.py b/tests/test_gallery.py index 039c5d6..9e91f27 100644 --- a/tests/test_gallery.py +++ b/tests/test_gallery.py @@ -37,6 +37,12 @@ REF = { 'title': u'Accentué', 'thumbnail': u'hélicoïde.jpg', 'img': [u'hélicoïde.jpg', 'superdupont_source_wikipedia_en.jpg'] + }, + 'video': { + 'title': 'Video', + 'thumbnail': '', + 'img': [], + 'video': [] } } @@ -47,7 +53,8 @@ def paths(): default_conf = os.path.join(SAMPLE_DIR, 'sigal.conf.py') settings = read_settings(default_conf) - return PathsDb(os.path.join(SAMPLE_DIR, 'pictures'), settings['ext_list']) + return PathsDb(os.path.join(SAMPLE_DIR, 'pictures'), + settings['img_ext_list'], settings['vid_ext_list']) @pytest.fixture(scope='module') @@ -58,14 +65,15 @@ def db(paths): def test_filelist(db): assert set(db.keys()) == set(['paths_list', 'skipped_dir', '.', - 'dir1', 'dir2', 'dir1/test1', 'dir1/test2', u'accentué']) + 'dir1', 'dir2', 'dir1/test1', 'dir1/test2', u'accentué', 'video']) assert set(db['paths_list']) == set(['.', 'dir1', 'dir1/test1', - 'dir1/test2', 'dir2', u'accentué']) + 'dir1/test2', 'dir2', u'accentué', 'video']) assert set(db['skipped_dir']) == set(['empty', 'dir1/empty']) assert db['.']['img'] == [] - assert set(db['.']['subdir']) == set([u'accentué', 'dir1', 'dir2']) + assert set(db['.']['subdir']) == set([u'accentué', 'dir1', 'dir2', + 'video']) def test_title(db): @@ -86,7 +94,8 @@ def test_imglist(db): def test_get_subdir(paths): assert set(paths.get_subdirs('dir1')) == set(['dir1/test1', 'dir1/test2']) assert set(paths.get_subdirs('.')) == set(['dir1', 'dir2', 'dir1/test1', - 'dir1/test2', u'accentué']) + 'dir1/test2', u'accentué', + 'video']) def test_get_metadata(): From 6df0f58a881bc73202cd629cb77807d741747c7a Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 03:11:49 +0200 Subject: [PATCH 02/14] removing the ugly thumbnail behind the video --- sigal/gallery.py | 2 +- sigal/themes/galleria/static/img/empty.png | Bin 0 -> 151 bytes sigal/themes/galleria/templates/index.html | 4 +++- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 sigal/themes/galleria/static/img/empty.png diff --git a/sigal/gallery.py b/sigal/gallery.py index 55aefa1..db91a93 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -232,7 +232,7 @@ class Gallery(object): if f in imglist: outname = join(outpath, filename) else: - outname = ''.join([os.path.splitext(filename)[0], '.webm']) + outname = os.path.splitext(filename)[0] + '.webm' if os.path.isfile(outname) and not self.force: self.logger.info("%s exists - skipping", filename) diff --git a/sigal/themes/galleria/static/img/empty.png b/sigal/themes/galleria/static/img/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc626c5f684efa87a6d9aa655525706078e0da4 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}bl&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVmz`VONQzJI**>6`Ki;O^-gkfN8$ l4ixA0ba4#fxSpH<1VAn;17qB0Eh`|4!PC{xWt~$(697OoAPfKi literal 0 HcmV?d00001 diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index 700040d..c16f20f 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -67,8 +67,10 @@ {% endfor %} {% for video in videos %} + {{ video.file }} + data-layer="" /> + {% endfor %} {% endif %} From 96539dc3cc4ccbd5756718b2e01634fea0f71596 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 11:37:54 +0200 Subject: [PATCH 03/14] Correct size on videos; Got the video centered in galleria. --- sigal/gallery.py | 29 ++++++++++++---------- sigal/settings.py | 15 ++++++++++- sigal/themes/galleria/templates/index.html | 10 ++++++-- sigal/video.py | 20 +++++++++------ sigal/writer.py | 2 +- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index db91a93..3ee783c 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -103,11 +103,11 @@ class PathsDb(object): self.db[relpath].update(get_metadata(path)) path_media = [path for path in self.db['paths_list'] - if (self.db[path]['img'] or self.db[path]['vid']) and - path != '.'] - path_nomedia = [path for path in self.db['paths_list'] if not - (self.db[path]['img'] or self.db[path]['vid']) and path != - '.'] + if (self.db[path]['img'] or self.db[path]['vid']) + and path != '.'] + path_nomedia = [path for path in self.db['paths_list'] + if not (self.db[path]['img'] or self.db[path]['vid']) + and path !='.'] # dir with images: check the thumbnail, and find it if necessary for path in path_media: @@ -264,14 +264,15 @@ def process_image(filepath, outpath, settings): if settings['keep_orig']: shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) - sigal.image.generate_image(filepath, outname, settings['img_size'], None, - options=options, copyright_text=settings['copyright'], - method=settings['img_processor']) + sigal.image.generate_image(filepath, outname, settings['img_size'], + None, options=options, copyright_text=settings['copyright'], + method=settings['img_processor']) if settings['make_thumbs']: thumb_name = join(outpath, get_thumb(settings, filename)) - sigal.image.generate_thumbnail(outname, thumb_name, settings['thumb_size'], None, - fit=settings['thumb_fit'], options=options) + sigal.image.generate_thumbnail(outname, thumb_name, + settings['thumb_size'], None, fit=settings['thumb_fit'], + options=options) def process_video(filepath, outpath, settings): """Process one image: resize, create thumbnail.""" @@ -283,11 +284,13 @@ def process_video(filepath, outpath, settings): if settings['keep_orig']: shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) - sigal.video.generate_video(filepath, outname) + # TODO: Add specific video size settings + sigal.video.generate_video(filepath, outname, settings['img_size']) if settings['make_thumbs']: - thumb_name = join(outpath, get_thumb(settings, base + '.jpg')) - sigal.video.generate_thumbnail(outname, thumb_name) + thumb_name = join(outpath, get_thumb(settings, filename)) + sigal.video.generate_thumbnail(outname, thumb_name, + settings['thumb_size']) def get_metadata(path): diff --git a/sigal/settings.py b/sigal/settings.py index a71bf9d..cf5598d 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -49,10 +49,23 @@ _DEFAULT_CONFIG = { def get_thumb(settings, filename): - """Return the path to the thumb.""" + """Return the path to the thumb. + + examples: + >>> get_thumb(default_settings, "bar/foo.jpg") + "bar/thumbnails/foo.jpg" + >>> get_thumb(default_settings, "bar/foo.png") + "bar/thumbnails/foo.png" + + for videos, it returns a jpg file: + >>> get_thumb(default_settings, "bar/foo.webm") + "bar/thumbnails/foo.jpg" + """ path, filen = os.path.split(filename) name, ext = os.path.splitext(filen) + if ext in settings['vid_ext_list']: + ext = '.jpg' return os.path.join(path, settings['thumb_dir'], settings['thumb_prefix'] + name + settings['thumb_suffix'] + ext) diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index c16f20f..b25f2f2 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -57,7 +57,7 @@ {% endif %} - {% if image or videos %} + {% if images or videos %}

diff --git a/sigal/video.py b/sigal/video.py index 1ff35fb..b0601d2 100644 --- a/sigal/video.py +++ b/sigal/video.py @@ -23,8 +23,7 @@ from __future__ import with_statement import subprocess -def generate_video(source, outname, options=['-vf', 'scale=800:trunc(ow/a/2)*2']): - # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio +def generate_video(source, outname, size, options=[]): """Video processor :param source: path to an image @@ -32,13 +31,20 @@ def generate_video(source, outname, options=['-vf', 'scale=800:trunc(ow/a/2)*2'] :param options: array of options passed to ffmpeg """ + # We don't keep the h param, because we want to keep the same ratio as + # the original file (resizeToFit is not available in ffmpeg) + # see http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio + (w, h) = size with open("/dev/null") as devnull: - subprocess.call(['ffmpeg', '-i', source, '-y'] + options + - [outname], stderr=devnull) + subprocess.call(['ffmpeg', '-i', source, '-y', '-vf', + "scale=%i:trunc(ow/a/2)*2'" % w] + options + [outname], + stderr=devnull) -def generate_thumbnail(source, outname, options=['-vf', 'scale=80:trunc(ow/a/2)*2']): - # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio +def generate_thumbnail(source, outname, box, options=[]): "Create a thumbnail image" + # See comment in the previous function + (w, h) = box with open("/dev/null") as devnull: subprocess.call(['ffmpeg', '-i', source, '-an', '-r', '1', - '-vframes', '1', '-y'] + options + [outname], stderr=devnull) + '-vframes', '1', '-y', '-vf', "scale=%i:trunc(ow/a/2)*2" % h] + + options + [outname], stderr=devnull) diff --git a/sigal/writer.py b/sigal/writer.py index c7c6d5f..ae127ad 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -145,7 +145,7 @@ class Writer(object): for i in paths[relpath]['vid']: base, ext = os.path.splitext(i) vid_ctx = {'file': base + '.webm', - 'thumb': get_thumb(self.settings, base + '.jpg')} + 'thumb': get_thumb(self.settings, i)} if self.settings['keep_orig']: vid_ctx['big'] = get_orig(self.settings, i) ctx['videos'].append(vid_ctx) From 45020ef100918ca88394689314f545aa3f15df52 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 14:16:30 +0200 Subject: [PATCH 04/14] fix the thumbnail generation for videos, add test --- sigal/gallery.py | 17 ++++++++++++----- sigal/video.py | 22 ++++++++++++++-------- sigal/writer.py | 15 +++++++++++---- tests/test_gallery.py | 20 +++++++++++++++----- 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index 3ee783c..e7cd5ce 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -148,11 +148,17 @@ class PathsDb(object): self.db[path]['thumbnail'] = f return - # else simply return the 1st image + # else try returning the 1st image if self.db[path]['img']: self.db[path]['thumbnail'] = self.db[path]['img'][0] - else: - self.db[path]['thumbnail'] = '' + return + + # last, we try the first vid + if self.db[path]['vid']: + self.db[path]['thumbnail'] = self.db[path]['vid'][0] + return + + self.db[path]['thumbnail'] = '' class Gallery(object): @@ -232,7 +238,7 @@ class Gallery(object): if f in imglist: outname = join(outpath, filename) else: - outname = os.path.splitext(filename)[0] + '.webm' + outname = join(outpath, os.path.splitext(filename)[0] + '.webm') if os.path.isfile(outname) and not self.force: self.logger.info("%s exists - skipping", filename) @@ -290,7 +296,8 @@ def process_video(filepath, outpath, settings): if settings['make_thumbs']: thumb_name = join(outpath, get_thumb(settings, filename)) sigal.video.generate_thumbnail(outname, thumb_name, - settings['thumb_size']) + settings['thumb_size'], None, fit=settings['thumb_fit'], + options=settings['jpg_options']) def get_metadata(path): diff --git a/sigal/video.py b/sigal/video.py index b0601d2..559a860 100644 --- a/sigal/video.py +++ b/sigal/video.py @@ -22,6 +22,8 @@ from __future__ import with_statement import subprocess +import os +import sigal.image def generate_video(source, outname, size, options=[]): """Video processor @@ -31,20 +33,24 @@ def generate_video(source, outname, size, options=[]): :param options: array of options passed to ffmpeg """ - # We don't keep the h param, because we want to keep the same ratio as - # the original file (resizeToFit is not available in ffmpeg) - # see http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio + # Until we find a better solution, we don't keep the h param: We want + # to preserve the ratio of the original file (resizeToFit is not + # available in ffmpeg) see + # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio (w, h) = size with open("/dev/null") as devnull: subprocess.call(['ffmpeg', '-i', source, '-y', '-vf', "scale=%i:trunc(ow/a/2)*2'" % w] + options + [outname], stderr=devnull) -def generate_thumbnail(source, outname, box, options=[]): +def generate_thumbnail(source, outname, box, format, fit=True, options=None): "Create a thumbnail image" - # See comment in the previous function - (w, h) = box + # 1) dump an image of the video + tmpfile = outname + ".tmp.jpg" with open("/dev/null") as devnull: subprocess.call(['ffmpeg', '-i', source, '-an', '-r', '1', - '-vframes', '1', '-y', '-vf', "scale=%i:trunc(ow/a/2)*2" % h] - + options + [outname], stderr=devnull) + '-vframes', '1', '-y', tmpfile], stderr=devnull) + # 2) use the generate_thumbnail function from sigal.image + sigal.image.generate_thumbnail(tmpfile, outname, box, format, fit, options) + # 3) remove the image + os.unlink(tmpfile) diff --git a/sigal/writer.py b/sigal/writer.py index ae127ad..690a758 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -33,7 +33,8 @@ from distutils.dir_util import copy_tree from jinja2 import Environment, FileSystemLoader, ChoiceLoader, PrefixLoader from jinja2.exceptions import TemplateNotFound -from .image import generate_thumbnail +import sigal.image +import sigal.video from .settings import get_thumb, get_orig from .pkgmeta import __url__ as sigal_link @@ -161,9 +162,15 @@ class Writer(object): # settings['make_thumbs'] is False) if not os.path.exists(thumb_path): source = os.path.join(self.output_dir, dpath, alb_thumb) - generate_thumbnail( - source, thumb_path, self.settings['thumb_size'], None, - fit=self.settings['thumb_fit']) + base, ext = os.path.splitext(source) + if ext in self.settings['img_ext_list']: + sigal.image.generate_thumbnail( + source, thumb_path, self.settings['thumb_size'], None, + fit=self.settings['thumb_fit']) + else: + sigal.video.generate_thumbnail( + source, thumb_path, self.settings['thumb_size'], + None, fit=self.settings['thumb_fit']) ctx['albums'].append({ 'url': d + '/' + self.url_ext, diff --git a/tests/test_gallery.py b/tests/test_gallery.py index 9e91f27..3103749 100644 --- a/tests/test_gallery.py +++ b/tests/test_gallery.py @@ -13,17 +13,20 @@ REF = { 'dir1': { 'title': 'An example gallery', 'thumbnail': 'test1/11.jpg', - 'img': '', + 'img': [], + 'vid': [] }, 'dir1/test1': { 'title': 'An example sub-category', 'thumbnail': '11.jpg', 'img': ['11.jpg', 'archlinux-kiss-1024x640.png'], + 'vid': [] }, 'dir1/test2': { 'title': 'Test2', 'thumbnail': '21.jpg', 'img': ['21.jpg', '22.jpg'], + 'vid': [] }, 'dir2': { 'title': 'Another example gallery', @@ -31,18 +34,20 @@ REF = { 'img': ['exo20101028-b-full.jpg', 'm57_the_ring_nebula-587px.jpg', 'Hubble ultra deep field.jpg', - 'Hubble Interacting Galaxy NGC 5257.jpg'] + 'Hubble Interacting Galaxy NGC 5257.jpg'], + 'vid': [], }, u'accentué': { 'title': u'Accentué', 'thumbnail': u'hélicoïde.jpg', - 'img': [u'hélicoïde.jpg', 'superdupont_source_wikipedia_en.jpg'] + 'img': [u'hélicoïde.jpg', 'superdupont_source_wikipedia_en.jpg'], + 'vid': [], }, 'video': { 'title': 'Video', - 'thumbnail': '', + 'thumbnail': 'stallman-software-freedom-day-low.ogv', 'img': [], - 'video': [] + 'vid': ['stallman-software-freedom-day-low.ogv'] } } @@ -91,6 +96,11 @@ def test_imglist(db): assert set(db[p]['img']) == set(REF[p]['img']) +def test_vidlist(db): + for p in REF.keys(): + assert set(db[p]['vid']) == set(REF[p]['vid']) + + def test_get_subdir(paths): assert set(paths.get_subdirs('dir1')) == set(['dir1/test1', 'dir1/test2']) assert set(paths.get_subdirs('.')) == set(['dir1', 'dir2', 'dir1/test1', From 100ce701fbf9b371a4280a8e00db8d6c91594535 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 16:47:27 +0200 Subject: [PATCH 05/14] Add support for the colorbox theme --- sigal/themes/colorbox/templates/index.html | 28 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/sigal/themes/colorbox/templates/index.html b/sigal/themes/colorbox/templates/index.html index 28bd825..46b50ed 100644 --- a/sigal/themes/colorbox/templates/index.html +++ b/sigal/themes/colorbox/templates/index.html @@ -12,7 +12,7 @@ @@ -67,7 +67,7 @@ {% endif %} - {% if images %} + {% if images or videos %} {% endif %} @@ -90,7 +109,7 @@ - {% if images %} + {% if images or videos %} @@ -109,6 +128,9 @@ title += " (full size)".link(this.getAttribute("data-big")); } return title; + }, + inline: function() { + return this.hasAttribute("inline"); } }); From fac27ba7d50aee0f7b899a95f03dda9248539fa6 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Wed, 17 Jul 2013 21:56:26 +0200 Subject: [PATCH 06/14] improved encoding options --- sigal/video.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sigal/video.py b/sigal/video.py index 559a860..e0a807b 100644 --- a/sigal/video.py +++ b/sigal/video.py @@ -33,15 +33,18 @@ def generate_video(source, outname, size, options=[]): :param options: array of options passed to ffmpeg """ - # Until we find a better solution, we don't keep the h param: We want - # to preserve the ratio of the original file (resizeToFit is not - # available in ffmpeg) see + # 2013-07-16: Until we find a better solution, we don't keep the h + # param: We want to preserve the ratio of the original file + # (resizeToFit is not available in ffmpeg) see # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio + # + # 2013-07-17: encoding options improved, thanks to + # http://ffmpeg.org/trac/ffmpeg/wiki/vpxEncodingGuide (w, h) = size with open("/dev/null") as devnull: - subprocess.call(['ffmpeg', '-i', source, '-y', '-vf', - "scale=%i:trunc(ow/a/2)*2'" % w] + options + [outname], - stderr=devnull) + subprocess.call(['ffmpeg', '-i', source, '-y', '-crf', '10', + '-b:v', '1.6M','-vf', "scale=%i:trunc(ow/a/2)*2'" % w] + + options + [outname], stderr=devnull) def generate_thumbnail(source, outname, box, format, fit=True, options=None): "Create a thumbnail image" From 004aefdeca14e21f286ec7bd267642c5551636c8 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Thu, 18 Jul 2013 14:14:39 +0200 Subject: [PATCH 07/14] Make the video encoding user configurable --- sigal/gallery.py | 3 ++- sigal/settings.py | 1 + sigal/templates/sigal.conf.py | 12 +++++++++++- sigal/video.py | 12 ++++++++---- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index e7cd5ce..ec85a40 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -291,7 +291,8 @@ def process_video(filepath, outpath, settings): shutil.copy(filepath, join(outpath, settings['orig_dir'], filename)) # TODO: Add specific video size settings - sigal.video.generate_video(filepath, outname, settings['img_size']) + sigal.video.generate_video(filepath, outname, settings['img_size'], + settings['webm_options']) if settings['make_thumbs']: thumb_name = join(outpath, get_thumb(settings, filename)) diff --git a/sigal/settings.py b/sigal/settings.py index cf5598d..05a7294 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -37,6 +37,7 @@ _DEFAULT_CONFIG = { 'keep_orig': False, 'orig_dir': 'original', 'jpg_options': {'quality': 85, 'optimize': True, 'progressive': True}, + 'webm_options': {'crf': '10', 'bitrate': '1.6M', 'qmin': '4', 'qmax': '63'}, 'copyright': '', 'img_ext_list': ['.jpg', '.jpeg', '.JPG', '.JPEG', '.png'], 'vid_ext_list': ['.MOV', '.mov', '.avi', '.mp4', '.webm', '.ogv'], diff --git a/sigal/templates/sigal.conf.py b/sigal/templates/sigal.conf.py index 1c6b50d..841bd2c 100644 --- a/sigal/templates/sigal.conf.py +++ b/sigal/templates/sigal.conf.py @@ -16,7 +16,7 @@ source = 'pictures' # - colorbox (default), galleria, or the path to a custom theme directory theme = 'galleria' -# Size of resized image +# Size of resized image (default: (640, 480)) img_size = (800, 600) # Pilkit processor used to resize the image @@ -55,6 +55,16 @@ thumb_size = (280, 210) # 'optimize': True, # 'progressive': True} +# Webm options +# Options used in ffmpeg to encode the webm video. You may want to read +# http://ffmpeg.org/trac/ffmpeg/wiki/vpxEncodingGuide +# Be aware of the fact these options need to be passed as strings. +# webm_options = {'crf': '10', +# 'bitrate': '1.6M', +# 'qmin': '4', +# 'qmax': '63'} + + # Write HTML files. If False, sigal will only process the images. # write_html = True diff --git a/sigal/video.py b/sigal/video.py index e0a807b..aff4383 100644 --- a/sigal/video.py +++ b/sigal/video.py @@ -25,7 +25,7 @@ import subprocess import os import sigal.image -def generate_video(source, outname, size, options=[]): +def generate_video(source, outname, size, options={}): """Video processor :param source: path to an image @@ -42,9 +42,13 @@ def generate_video(source, outname, size, options=[]): # http://ffmpeg.org/trac/ffmpeg/wiki/vpxEncodingGuide (w, h) = size with open("/dev/null") as devnull: - subprocess.call(['ffmpeg', '-i', source, '-y', '-crf', '10', - '-b:v', '1.6M','-vf', "scale=%i:trunc(ow/a/2)*2'" % w] + - options + [outname], stderr=devnull) + subprocess.call(['ffmpeg', '-i', source, '-y', + '-crf', options.get('crf', '10'), + '-b:v', options.get('bitrate', '1.6M'), + '-qmin', options.get('qmin', '4'), + '-qmax',options.get('qmax', '63'), + '-vf', "scale=%i:trunc(ow/a/2)*2'" % w, + outname], stderr=devnull) def generate_thumbnail(source, outname, box, format, fit=True, options=None): "Create a thumbnail image" From d82f0aa007a8b6486b29570d88aca90bbf707ada Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Thu, 18 Jul 2013 16:36:46 +0200 Subject: [PATCH 08/14] merge img and vid into media and update themes --- .travis.yml | 2 +- requirements.txt | 1 + sigal/gallery.py | 67 +++++++++++----------- sigal/themes/colorbox/templates/index.html | 60 +++++++++---------- sigal/themes/galleria/templates/index.html | 42 +++++++------- sigal/writer.py | 30 +++++----- tests/test_gallery.py | 29 +++------- 7 files changed, 110 insertions(+), 121 deletions(-) diff --git a/.travis.yml b/.travis.yml index f642eee..3795238 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ python: before_install: # Dependencies to build PIL - sudo apt-get update -qq - - sudo apt-get install -qq libfreetype6-dev libjpeg8-dev zlib1g-dev + - sudo apt-get install -qq libfreetype6-dev libjpeg8-dev zlib1g-dev ffmpeg install: - pip install pytest --use-mirrors - pip install . --use-mirrors diff --git a/requirements.txt b/requirements.txt index 18306a3..9bf7eb8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ Markdown Pillow pilkit pytest +ffmpeg diff --git a/sigal/gallery.py b/sigal/gallery.py index ec85a40..70753bd 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -41,6 +41,9 @@ from .writer import Writer DESCRIPTION_FILE = "index.md" +class FileExtensionError(Exception): + """Raised if we made an error when handling file extensions""" + pass class PathsDb(object): """Container for all the information on the directory structure. @@ -94,20 +97,16 @@ class PathsDb(object): self.db['paths_list'].append(relpath) self.db[relpath] = { - 'img': [f for f in filenames - if os.path.splitext(f)[1] in self.img_ext_list], - 'vid': [f for f in filenames - if os.path.splitext(f)[1] in self.vid_ext_list], + 'medias': [ f for f in filenames if os.path.splitext(f)[1] + in (self.img_ext_list + self.vid_ext_list) ], 'subdir': dirnames } self.db[relpath].update(get_metadata(path)) path_media = [path for path in self.db['paths_list'] - if (self.db[path]['img'] or self.db[path]['vid']) - and path != '.'] + if self.db[path]['medias'] and path != '.'] path_nomedia = [path for path in self.db['paths_list'] - if not (self.db[path]['img'] or self.db[path]['vid']) - and path !='.'] + if not self.db[path]['medias'] and path !='.'] # dir with images: check the thumbnail, and find it if necessary for path in path_media: @@ -142,20 +141,17 @@ class PathsDb(object): return # find and return the first landscape image - for f in self.db[path]['img']: - im = PILImage.open(join(self.basepath, path, f)) - if im.size[0] > im.size[1]: - self.db[path]['thumbnail'] = f - return + for f in self.db[path]['medias']: + base, ext = os.path.splitext(f) + if ext in self.img_ext_list: + im = PILImage.open(join(self.basepath, path, f)) + if im.size[0] > im.size[1]: + self.db[path]['thumbnail'] = f + return - # else try returning the 1st image - if self.db[path]['img']: - self.db[path]['thumbnail'] = self.db[path]['img'][0] - return - - # last, we try the first vid - if self.db[path]['vid']: - self.db[path]['thumbnail'] = self.db[path]['vid'][0] + # else simply return the 1st media file + if self.db[path]['medias']: + self.db[path]['thumbnail'] = self.db[path]['medias'][0] return self.db[path]['thumbnail'] = '' @@ -192,24 +188,22 @@ class Gallery(object): # loop on directories in reversed order, to process subdirectories # before their parent for path in reversed(self.db['paths_list']): - imglist = [os.path.normpath(join(self.settings['source'], path, f)) - for f in self.db[path]['img']] - vidlist = [os.path.normpath(join(self.settings['source'], path, f)) - for f in self.db[path]['vid']] + media_files = [os.path.normpath(join(self.settings['source'], path, f)) + for f in self.db[path]['medias']] # output dir for the current path outpath = os.path.normpath(join(self.settings['destination'], path)) check_or_create_dir(outpath) - if len(imglist) != 0 or len(vidlist) != 0: - self.process_dir(imglist, vidlist, outpath, path, - label_width=label_width) + if len(media_files) != 0: + self.process_dir(media_files, outpath, path, + label_width=label_width) if self.settings['write_html']: self.writer.write(self.db, path) - def process_dir(self, imglist, vidlist, outpath, dirname, label_width=20): + def process_dir(self, media_files, outpath, dirname, label_width=20): """Process a list of images in a directory.""" # Create thumbnails directory and optionally the one for original img @@ -218,8 +212,6 @@ class Gallery(object): if self.settings['keep_orig']: check_or_create_dir(join(outpath, self.settings['orig_dir'])) - media_files = imglist + vidlist - # use progressbar if level is > INFO if self.logger.getEffectiveLevel() > 20: label = colored.green(dirname.ljust(label_width)) @@ -235,19 +227,24 @@ class Gallery(object): # loop on images for f in media_iterator: filename = os.path.split(f)[1] - if f in imglist: + base, ext = os.path.splitext(filename) + if ext in self.settings['img_ext_list']: outname = join(outpath, filename) + elif ext in self.settings['vid_ext_list']: + outname = join(outpath, base + '.webm') else: - outname = join(outpath, os.path.splitext(filename)[0] + '.webm') + raise FileExtensionError if os.path.isfile(outname) and not self.force: self.logger.info("%s exists - skipping", filename) else: self.logger.info(filename) - if f in imglist: + if ext in self.settings['img_ext_list']: process_image(f, outpath, self.settings) - else: + elif ext in self.settings['vid_ext_list']: process_video(f, outpath, self.settings) + else: + raise FileExtensionError except KeyboardInterrupt: sys.exit('Interrupted') diff --git a/sigal/themes/colorbox/templates/index.html b/sigal/themes/colorbox/templates/index.html index 46b50ed..5a58ea6 100644 --- a/sigal/themes/colorbox/templates/index.html +++ b/sigal/themes/colorbox/templates/index.html @@ -67,36 +67,38 @@ {% endif %} - {% if images or videos %} + {% if medias %} - {% if images or videos %} + {% if medias %} diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index b25f2f2..4434430 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -57,26 +57,28 @@ {% endif %} - {% if images or videos %} + {% if medias %} {% endif %} @@ -94,7 +96,7 @@ - {% if images or videos %} + {% if medias %} diff --git a/sigal/writer.py b/sigal/writer.py index 690a758..9bc1d45 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -90,8 +90,7 @@ class Writer(object): self.ctx = { 'sigal_link': sigal_link, 'theme': {'name': os.path.basename(self.theme)}, - 'images': [], - 'videos': [], + 'medias': [], 'albums': [], 'breadcumb': '' } @@ -136,20 +135,19 @@ class Writer(object): if relpath != '.': ctx['breadcumb'] = self.get_breadcumb(paths, relpath) - for i in paths[relpath]['img']: - img_ctx = {'file': i, - 'thumb': get_thumb(self.settings, i)} - if self.settings['keep_orig']: - img_ctx['big'] = get_orig(self.settings, i) - ctx['images'].append(img_ctx) - - for i in paths[relpath]['vid']: + for i in paths[relpath]['medias']: + media_ctx = {} base, ext = os.path.splitext(i) - vid_ctx = {'file': base + '.webm', - 'thumb': get_thumb(self.settings, i)} + if ext in self.settings['img_ext_list']: + media_ctx['type'] = 'img' + media_ctx['file'] = i + else: + media_ctx['type'] = 'vid' + media_ctx['file'] = base + '.webm' + media_ctx['thumb'] = get_thumb(self.settings, i) if self.settings['keep_orig']: - vid_ctx['big'] = get_orig(self.settings, i) - ctx['videos'].append(vid_ctx) + media_ctx['big'] = get_orig(self.settings, i) + ctx['medias'].append(media_ctx) for d in paths[relpath]['subdir']: dpath = os.path.normpath(os.path.join(relpath, d)) @@ -165,8 +163,8 @@ class Writer(object): base, ext = os.path.splitext(source) if ext in self.settings['img_ext_list']: sigal.image.generate_thumbnail( - source, thumb_path, self.settings['thumb_size'], None, - fit=self.settings['thumb_fit']) + source, thumb_path, self.settings['thumb_size'], + None, fit=self.settings['thumb_fit']) else: sigal.video.generate_thumbnail( source, thumb_path, self.settings['thumb_size'], diff --git a/tests/test_gallery.py b/tests/test_gallery.py index 3103749..7cd0bbe 100644 --- a/tests/test_gallery.py +++ b/tests/test_gallery.py @@ -13,41 +13,35 @@ REF = { 'dir1': { 'title': 'An example gallery', 'thumbnail': 'test1/11.jpg', - 'img': [], - 'vid': [] + 'medias': [], }, 'dir1/test1': { 'title': 'An example sub-category', 'thumbnail': '11.jpg', - 'img': ['11.jpg', 'archlinux-kiss-1024x640.png'], - 'vid': [] + 'medias': ['11.jpg', 'archlinux-kiss-1024x640.png'], }, 'dir1/test2': { 'title': 'Test2', 'thumbnail': '21.jpg', - 'img': ['21.jpg', '22.jpg'], - 'vid': [] + 'medias': ['21.jpg', '22.jpg'], }, 'dir2': { 'title': 'Another example gallery', 'thumbnail': 'm57_the_ring_nebula-587px.jpg', - 'img': ['exo20101028-b-full.jpg', + 'medias': ['exo20101028-b-full.jpg', 'm57_the_ring_nebula-587px.jpg', 'Hubble ultra deep field.jpg', 'Hubble Interacting Galaxy NGC 5257.jpg'], - 'vid': [], }, u'accentué': { 'title': u'Accentué', 'thumbnail': u'hélicoïde.jpg', - 'img': [u'hélicoïde.jpg', 'superdupont_source_wikipedia_en.jpg'], - 'vid': [], + 'medias': [u'hélicoïde.jpg', 'superdupont_source_wikipedia_en.jpg'], }, 'video': { 'title': 'Video', 'thumbnail': 'stallman-software-freedom-day-low.ogv', - 'img': [], - 'vid': ['stallman-software-freedom-day-low.ogv'] + 'medias': ['stallman-software-freedom-day-low.ogv'] } } @@ -76,7 +70,7 @@ def test_filelist(db): 'dir1/test2', 'dir2', u'accentué', 'video']) assert set(db['skipped_dir']) == set(['empty', 'dir1/empty']) - assert db['.']['img'] == [] + assert db['.']['medias'] == [] assert set(db['.']['subdir']) == set([u'accentué', 'dir1', 'dir2', 'video']) @@ -91,14 +85,9 @@ def test_thumbnail(db): assert db[p]['thumbnail'] == REF[p]['thumbnail'] -def test_imglist(db): +def test_medialist(db): for p in REF.keys(): - assert set(db[p]['img']) == set(REF[p]['img']) - - -def test_vidlist(db): - for p in REF.keys(): - assert set(db[p]['vid']) == set(REF[p]['vid']) + assert set(db[p]['medias']) == set(REF[p]['medias']) def test_get_subdir(paths): From a5014c9d73525421dc4dc7f946eb2549d85285b5 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Thu, 18 Jul 2013 16:46:06 +0200 Subject: [PATCH 09/14] update copyright information in modified files --- sigal/gallery.py | 1 + sigal/settings.py | 1 + sigal/writer.py | 1 + 3 files changed, 3 insertions(+) diff --git a/sigal/gallery.py b/sigal/gallery.py index 70753bd..af99c43 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -1,6 +1,7 @@ # -*- coding:utf-8 -*- # Copyright (c) 2009-2013 - Simon Conseil +# Copyright (c) 2013 - Christophe-Marie Duquesne # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to diff --git a/sigal/settings.py b/sigal/settings.py index 05a7294..715f011 100644 --- a/sigal/settings.py +++ b/sigal/settings.py @@ -1,6 +1,7 @@ # -*- coding:utf-8 -*- # Copyright (c) 2009-2013 - Simon Conseil +# Copyright (c) 2013 - Christophe-Marie Duquesne # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to diff --git a/sigal/writer.py b/sigal/writer.py index 9bc1d45..ec6d580 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -1,6 +1,7 @@ # -*- coding:utf-8 -*- # Copyright (c) 2009-2013 - Simon Conseil +# Copyright (c) 2013 - Christophe-Marie Duquesne # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to From 848a9c99440b61fbb464e312a1144f47eda35b71 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Thu, 18 Jul 2013 17:26:17 +0200 Subject: [PATCH 10/14] pep8 --- sigal/gallery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index af99c43..4e7f429 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -98,8 +98,8 @@ class PathsDb(object): self.db['paths_list'].append(relpath) self.db[relpath] = { - 'medias': [ f for f in filenames if os.path.splitext(f)[1] - in (self.img_ext_list + self.vid_ext_list) ], + 'medias': [f for f in filenames if os.path.splitext(f)[1] + in (self.img_ext_list + self.vid_ext_list)], 'subdir': dirnames } self.db[relpath].update(get_metadata(path)) From 39e69a4d36e2062f62c13a383e0674072acdaa4d Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Thu, 18 Jul 2013 23:16:41 +0200 Subject: [PATCH 11/14] removing ffmpeg from the requirements, following the comments --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9bf7eb8..18306a3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,3 @@ Markdown Pillow pilkit pytest -ffmpeg From 1f40adc56178d6b22106502744bb599b253a71d5 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Fri, 19 Jul 2013 12:49:37 +0200 Subject: [PATCH 12/14] Don't transcode if unnecessary + don't enlarge --- sigal/video.py | 52 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/sigal/video.py b/sigal/video.py index aff4383..a806d11 100644 --- a/sigal/video.py +++ b/sigal/video.py @@ -23,8 +23,25 @@ from __future__ import with_statement import subprocess import os +import re +import shutil import sigal.image +def vid_size(source): + """Returns the dimensions of the video""" + pattern = re.compile(r'Stream.*Video.* ([0-9]+)x([0-9]+)') + p = subprocess.Popen(['ffmpeg', '-i', source], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = p.communicate() + match = pattern.search(stderr) + if match: + x, y = int(match.groups()[0]), int(match.groups()[1]) + else: + x = y = 0 + return (x, y) + + def generate_video(source, outname, size, options={}): """Video processor @@ -33,22 +50,39 @@ def generate_video(source, outname, size, options={}): :param options: array of options passed to ffmpeg """ - # 2013-07-16: Until we find a better solution, we don't keep the h - # param: We want to preserve the ratio of the original file - # (resizeToFit is not available in ffmpeg) see + # Don't transcode if source is in the required format and + # has fitting datedimensions, copy instead. + w_src, h_src = vid_size(source) + w_dst, h_dst = size + base, src_ext = os.path.splitext(source) + base, dst_ext = os.path.splitext(outname) + if dst_ext == src_ext and w_src <= w_dst and h_src <= w_dst: + shutil.copy(source, outname) + return + # http://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio - # - # 2013-07-17: encoding options improved, thanks to + # + I made a drawing on paper to figure this out + if h_dst * w_src < h_src * w_dst: + # biggest fitting dimension is height + resize_opt = ['-vf', "scale=trunc(oh*a/2)*2:%i" % h_dst] + else: + # biggest fitting dimension is width + resize_opt = ['-vf', "scale=%i:trunc(ow/a/2)*2" % w_dst] + + # do not resize if input dimensions are smaller than output dimensions + if w_src <= w_dst and h_src <= h_dst: + resize_opt = [] + + # Encoding options improved, thanks to # http://ffmpeg.org/trac/ffmpeg/wiki/vpxEncodingGuide - (w, h) = size with open("/dev/null") as devnull: subprocess.call(['ffmpeg', '-i', source, '-y', '-crf', options.get('crf', '10'), '-b:v', options.get('bitrate', '1.6M'), '-qmin', options.get('qmin', '4'), - '-qmax',options.get('qmax', '63'), - '-vf', "scale=%i:trunc(ow/a/2)*2'" % w, - outname], stderr=devnull) + '-qmax', options.get('qmax', '63')] + + resize_opt + [outname], + stderr=devnull) def generate_thumbnail(source, outname, box, format, fit=True, options=None): "Create a thumbnail image" From c4a751d36646937bd302441a1c46726d7c9c2efd Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Fri, 19 Jul 2013 23:48:35 +0200 Subject: [PATCH 13/14] adding tests for the video module --- tests/test_video.py | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/test_video.py diff --git a/tests/test_video.py b/tests/test_video.py new file mode 100644 index 0000000..065059c --- /dev/null +++ b/tests/test_video.py @@ -0,0 +1,56 @@ +# -*- coding:utf-8 -*- + +from __future__ import division + +import os +import filecmp +import pytest + +from sigal import init_logging +from sigal.video import vid_size, generate_video + +CURRENT_DIR = os.path.dirname(__file__) +TEST_VIDEO = 'stallman-software-freedom-day-low.ogv' +SRCFILE = os.path.join(CURRENT_DIR, 'sample', 'pictures', 'video', TEST_VIDEO) + + + +def test_generate_video_fit_height(tmpdir): + """largest fitting dimension is height""" + + base, ext = os.path.splitext(TEST_VIDEO) + dstfile = str(tmpdir.join(base + '.webm')) + generate_video(SRCFILE, dstfile, (50, 100)) + + size_src = vid_size(SRCFILE) + size_dst = vid_size(dstfile) + + assert size_dst[0] == 50 + # less than 2% error on ratio + assert abs(size_dst[0]/size_dst[1] - size_src[0]/size_src[1]) < 2e-2 + +def test_generate_video_fit_width(tmpdir): + """largest fitting dimension is width""" + + base, ext = os.path.splitext(TEST_VIDEO) + dstfile = str(tmpdir.join(base + '.webm')) + generate_video(SRCFILE, dstfile, (100, 50)) + + size_src = vid_size(SRCFILE) + size_dst = vid_size(dstfile) + + assert size_dst[1] == 50 + # less than 2% error on ratio + assert abs(size_dst[0]/size_dst[1] - size_src[0]/size_src[1]) < 2e-2 + +def test_generate_video_dont_enlarge(tmpdir): + """video dimensions should not be enlarged""" + + base, ext = os.path.splitext(TEST_VIDEO) + dstfile = str(tmpdir.join(base + '.webm')) + generate_video(SRCFILE, dstfile, (1000, 1000)) + + size_src = vid_size(SRCFILE) + size_dst = vid_size(dstfile) + + assert size_src == size_dst From 080742c02e364802c1ed2e142ff671fc70797450 Mon Sep 17 00:00:00 2001 From: Christophe-Marie Duquesne Date: Sun, 21 Jul 2013 14:43:55 +0200 Subject: [PATCH 14/14] oops, bad merge --- sigal/themes/galleria/templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index 4434430..80ba88c 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -64,7 +64,7 @@ {{ media.file }} + {%- if media.big %} data-description="Full size"{% endif %}/> {% endif %} {% if media.type == "vid" %}