2015-08-27 17 views
7

Pracuję nad jedną aplikacją Meteor, w której używam CollectionFS do przesyłania plików.Meteor.JS CollectionFS Miniatury wideo do grafiki (Magia grafiki)

Jestem w stanie przesyłać i generować miniatury obrazów.

Ale moim problemem jest: Jak utworzyć miniatury filmów wideo?

widzę, że jest to możliwe za pomocą wiersza poleceń: https://superuser.com/questions/599348/can-imagemagick-make-thumbnails-from-video

Ale w jaki sposób można zastosować to do mojego kodu Meteor.

Oto co robię:

VideoFileCollection = new FS.Collection("VideoFileCollection", { 
stores: [ 
    new FS.Store.FileSystem("videos", {path: "/uploads/videos"}), 
    new FS.Store.FileSystem("videosthumbs", {path: "/uploads/videosthumbs", 
    beforeWrite: function(fileObj) { 
     // We return an object, which will change the 
     // filename extension and type for this store only. 
     return { 
     extension: 'png', 
     type: 'image/png' 
     }; 
    }, 
    transformWrite: function(fileObj, readStream, writeStream) { 
     gm(readStream, fileObj.name()).stream('PNG').pipe(writeStream); 

    } 
    }) 
] 
}); 

Co tu się dzieje, że wideo jest uzyskiwanie Dodane do „filmy” folder i jeden PNG jest tworzony w ramach „videosthumbs” z 0 bajtów i miniatury nie jest uzyskiwanie generowane .

Mam również przeczytać na stronie: https://github.com/aheckmann/gm#custom-arguments

które możemy wykorzystać. G() polecenie() - polecenie niestandardowe, takie jak zidentyfikować lub przekonwertować

Czy ktoś mi doradzić na co można zrobić, aby obsłużyć ta sytuacja?

Dzięki i Pozdrawiam

Odpowiedz

1

sprawdzone łącza, które zostały dodane, a tutaj jest szorstka rozwiązanie, które może pomóc

ffmpeg -ss 600 -i input.mp4 -vframes 1 -s 420x270 -filter:v 'yadif' output.png 

Oto funkcja, która zrobiłem.

var im = require('imagemagick'); 

var args = [ 
    "ffmpeg", "-ss", "600", "-i", "input.mp4", "-vframes", " 1", "-s", "420x270", "-filter:v", "'yadif'", "output.png" 
    ]; 

// Function to convert and 
im.convert(args, function(err) 
if (err) throw err; 
}); 
+0

Dzięki, próbowałem, ale nadal nie mogę rozwiązać tego problemu – Manu