Это может быть слишком много, но вот короткая программа javascript для Node.js https://nodejs.org/, которая удалит все читаемые кадры и сохранить их как отдельные последовательно пронумерованные файлы jpg в текущем каталоге. Осторожно, даже короткий видеоклип может генерировать тысячи кадров, а механизм javascript V8, который использует Node, очень быстр, поэтому я рекомендую закрыть файловый браузер, потому что он будет потреблять ресурсы, пытаясь не отставать.
Если видеофайл слишком велик для создания буфера, Node выдаст ошибку и завершит работу.
В этом случае проще всего будет разделить файл на куски с помощью утилит оболочки или программы, такой как HexEdit. http://www.hexedit.com/
Переписав этот код для асинхронной обработки файла, я решил бы эту проблему, но написание асинхронного кода все еще вызывает у меня беспокойство.
var orgFile=process.cwd()+"/"+process.argv[2]; //Grab the video filename from the command line
var fs = require("fs"); //Load the filesystem module
var stats = fs.statSync(orgFile);//Get stats of video file
var fileSizeInBytes = stats["size"];//Get video file size from stats
var fdata=new Buffer(fileSizeInBytes);//Create a new buffer to hold the video data
var i=0;
var fStart=0;
var fStop=0;
var fCount=0;
fdata=fs.readFileSync(orgFile);//Read the video file into the buffer
//This section looks for the markers at the begining and end of each jpg image
//records their positions and then writes them as separate files.
while (i<fileSizeInBytes){
if (fdata[i]==0xFF){
//console.log("Found FF at "+i.toString);
if (fdata[i+1]==0xD8){
//console.log("Found D8 at "+(i+1).toString);
if (fdata[i+2]==0xFF){
//console.log("Found FF at "+(i+2).toString);
fStart=i;
}
}
}
if (fStart>0){
if (fdata[i]==0xFF){
if(fdata[i+1]==0xD9){
fStop=i+1;
}
}
if (fStart>0){
if (fStop>0){
fCount++;
fs.writeFileSync(orgFile+"."+fCount.toString()+".jpg",fdata.slice(fStart,fStop));
console.log (orgFile+"."+fCount.toString()+".jpg");
fStart=0;
fStop=0;
}
}
}
i++;
}
console.log ("Wrote "+fCount.toString()+" frames.");
Если вы сохраните приведенный выше код как mjpeg_parse.js, пример вызова будет таким:
Узел mjepeg_parse.js videofile.avi
person
user3712539
schedule
25.01.2016