2017-05-31 3 views
0

Nur fragen, wie man beginnt? Die Bedürfnisse:wie man Videomodul mit nodejs wie facebook mit Fotos gemacht

Mit etwa 10 Fotos, in der Lage, ein kleines Video von 5-10sek zu produzieren, mit Animationen zum Beispiel (Übergang?), Ich möchte den Facebook-Videos-Prozess reproduzieren, wenn jemand darüber wissen, welche technische Stapel ist die beste, Module (ffmpeg, Wrapper ffmpeg) (pyhton, nodejs).

Thx

+0

Was genau ist der "Facebook Videos Prozess"? – lux

Antwort

0

ich hier mit dieser Antwort beginnen würde: https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/834035#834035

Insbesondere die ffmpeg Mischung Filter Beispiel:

ffmpeg \ 
-loop 1 -t 1 -i 001.png \ 
-loop 1 -t 1 -i 002.png \ 
-loop 1 -t 1 -i 003.png \ 
-loop 1 -t 1 -i 004.png \ 
-loop 1 -t 1 -i 005.png \ 
-filter_complex \ 
"[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \ 
[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \ 
[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \ 
[4:v][3:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b4v]; \ 
[0:v][b1v][1:v][b2v][2:v][b3v][3:v][b4v][4:v]concat=n=9:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4 

Dies wird Ihnen eine Ausgabe mp4 geben, wobei jedes Bild für eine Dauer zweitens mit einer Überblendung von 0,5 Sekunden zwischen den Bildern.

-t 1 

, dass die Dauer für das Bild ist

T,0.5 

Ist Ihre Blendzeit

Wenn Sie schauen, Knoten zu verwenden, würde ich die fließend-ffmpeg Bibliothek empfehlen: https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

Ich mag Knoten als Lösung, weil Sie eine einzige Three Concurrent Event-Schleife verwenden können, die Aufträge an Ihr ffmpeg-Modul übergeben und ffmpeg aufnehmen zu lassen alle verfügbaren Kerne auf Ihrer Maschine.

Sie könnten eine Funktion haben, die etwa wie folgt aussieht: So

function runFfmpeg({inputParams, input, outputParams, output}) { 
    return new Promise((resolve, reject) => { 
     const ffmpegCommand = new ffmpeg() 
     ffmpegCommand.input(input) 
     .inputOptions(inputParams) 
     .on('start', (command) => { 
      // log start 
     }) 
     .on('progress', (progress) => { 
      // log progress 
     }) 
     .on('end',() => { 
      resolve('SUCCESS!') 
     }) 
     .on('error', (error) => { 
      reject(error) 
     }) 
     .outputOptions(outputParams) 
     .output(output) 
     .run() 
    }) 
} 

dass gerade hüllt Ihren ffmpeg Prozesse in einem Versprechen, und es wird beheben nach Beendigung und lehnen ein Fehler auftrat. Sie würden diese Funktion Ihren Kommandozeilen-Eingabeparametern, Eingabedateien, Ausgabeparametern und Ausgabedateien übergeben ... zumindest so etwas. Möglicherweise müssen Sie das für mehrere Eingaben anpassen, aber ihr GitHub ist sehr gut dokumentiert!

+0

Thx für Ihre Antwort, wird dies überprüfen :) – aharit

Verwandte Themen