我遇到速度优化问题。我正在使用TideSDK在桌面上构建Web技术的视频剪辑工具。工具上有一个带位置滑块的时间轴
基本上,每当滑块移动时,(使用jquery UI),我得到位置,将其转换为时间码并要求FFMPEG编码为文件,当获取完成的事件时,我只需更新background-image属性这个文件的'viewer'。该文件位于某个临时文件夹中。
事情是,它有点太慢了。可用但速度慢(高端计算机上大约2 fps) 我认为这个策略存在两个瓶颈: - 将ffmpeg输出写入文件&回读css - 在ffmpeg中重复加载相同的电影文件这是每次移动时执行的代码(var timecode是根据指针位置计算的时间码)
var cmd = [FFMPEG];
cmd.push('-y'); //overwrite existing files
cmd.push('-ss',timecode); //CUE position
cmd.push('-i',input); //input file
cmd.push('-f','image2'); //output format
cmd.push('-vframes','1'); //number of images to render
cmd.push(Ti.API.Application.getDataPath( )+"/encoderframe.jpg"); //output file
var makeframe = Ti.Process.createProcess(cmd);
makeframe.setOnReadLine(function(data){ /*console.log(data);*/ });
var time = new Date().getTime();
makeframe.setOnExit(function(){ ffmpegrunning = false; $('#videoframe').css('background-image','url(file://'+Ti.API.Application.getDataPath( ).replace(" ","%20")+'/encoderframe.jpg?'+time+')'); });
makeframe.launch();
基本上,这会反复询问同一个命令:
ffmpeg -y -ss 00:00:01.04 -i /somepath/somevideo.mov -f image2 -vframes 1 /path/to/output/encoderframe204.jpg
如何优化此代码,使用Base64数据直接输出到css背景,或者在ffmpeg中重用已加载的内存文件。 ?
谢谢!