Spike to generate video thumbnails + poster with the right aspect ratio

pull/9/head
rprieto 10 years ago
parent dd93e87f42
commit b9c315165a

@ -29,7 +29,8 @@
"lodash": "~2.4.1",
"wrench": "~1.5.8",
"fs-extra": "~0.8.1",
"video-thumb": "0.0.2",
"gulp-rename": "~1.2.0"
"gulp-rename": "~1.2.0",
"exec-sync": "~0.1.6",
"gm": "~1.14.2"
}
}

@ -18,12 +18,12 @@ exports.fromDisk = function(mediaPath, mediaPrefix) {
}
function thumbsPath(file) {
return 'thumbs/' + file.replace(/\.[a-z0-9]+$/, '.jpg');
return path.join('thumbs', file.replace(/\.[a-z0-9]+$/, '.jpg'));
}
function videoPoster(file) {
if (file.match(/mp4$/)) {
return file.replace(/\.[a-z0-9]+$/, '_poster.jpg')
if (isVideo(file)) {
return path.join('thumbs', file.replace(/\.[a-z0-9]+$/, '_poster.jpg'));
} else {
return null;
}

@ -8,7 +8,8 @@ var newer = require('gulp-newer');
var rename = require("gulp-rename");
var imageResize = require('gulp-image-resize');
var parallel = require('concurrent-transform');
var thumbler = require('video-thumb');
var exec = require('exec-sync');
var gm = require('gm');
var galleries = require('./galleries');
var render = require('./render');
@ -34,9 +35,27 @@ exports.build = function(opts) {
var videos = files.filter(function(f) { return f.match(/\.mp4$/); });
videos.forEach(function(videoPath) {
var input = path.join(opts.input, videoPath);
var output = path.join(opts.output, 'thumbs', videoPath.replace('.mp4', '.jpg'));
thumbler.extract(input, output, '00:00:00', '100x100', function() {});
var input = path.join(opts.input, videoPath);
var thumb = path.join(opts.output, 'thumbs', videoPath.replace('.mp4', '.jpg'));
var poster = path.join(opts.output, 'thumbs', videoPath.replace('.mp4', '_poster.jpg'));
var ffmpeg = 'ffmpeg -itsoffset -1 -i ' + input + ' -ss 0.1 -vframes 1 -y ' + poster;
var exec = require('child_process').exec
exec(ffmpeg, function(err, stdout, stderr) {
if (err) {
console.error('ffmpeg:', err);
}
gm(poster)
.resize(opts.size, opts.size, "^")
.gravity('Center')
.crop(opts.size, opts.size)
.write(thumb, function (err) {
if (err) console.error(err);
});
});
});
});

Loading…
Cancel
Save