我正在尝试编写一个nodejs服务器,该服务器将花费一个时间输入(可能是url路径的一部分),然后在该时间索引处以jpeg图片的形式提供静止的视频帧。
我可以用普通的Javascript轻松地做到这一点,但是我看不到在nodejs中做到这一点的方法。我知道我可能需要使用像node- canvas这样的画布插件来做快照。
任何想法欢迎。
以下是我目前在Javascript中的处理方式:
myjavascript.js
function capture(video, scaleFactor) { if(scaleFactor == null){ scaleFactor = 1; } var w = video.videoWidth * scaleFactor; var h = video.videoHeight * scaleFactor; stdout("<br/> w: "+ w+ "<br/> h: "+ h); var canvas = document.createElement('canvas'); canvas.width = w; canvas.height = h; var ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, w, h); return canvas; } function shoot(){ var video = document.getElementById("videoTag"); var output = document.getElementById("output"); var canvas = capture(video, 1); output.innerHTML = ''; output.appendChild(canvas); }
index.html
<html> <head> <title>video snap</title> <script type="text/javascript" src="myjavascript.js"></script> </head> <body> <div id="video_container" > <video id="videoTag" width="640" height="360" autobuffer="" controls="true"> <source src="frozenplanet.mp4" type="video/mp4"> <source src="frozenplanet.ogv" type="video/ogg"> </video> </div> <div id="output"></div> </body> </html>
node-fluent-ffmpeg具有不错的takeScreenshots功能。
takeScreenshots
var proc = new ffmpeg('/path/to/your_movie.avi') .takeScreenshots({ count: 1, timemarks: [ '600' ] // number of seconds }, '/path/to/thumbnail/folder', function(err) { console.log('screenshots were saved') });