|
var workerPath = |
|
'https://archive.org/download/ffmpeg_asm/ffmpeg_asm.js'; |
|
|
|
function processInWebWorker() { |
|
var blob = URL.createObjectURL( |
|
new Blob( |
|
[ |
|
'importScripts("' + |
|
workerPath + |
|
'");var now = Date.now;function print(text) {postMessage({"type" : "stdout","data" : text});};onmessage = function(event) {var message = event.data;if (message.type === "command") {var Module = {print: print,printErr: print,files: message.files || [],arguments: message.arguments || [],TOTAL_MEMORY: message.TOTAL_MEMORY||536870912 || false};postMessage({"type" : "start","data" : Module.arguments.join(" ")});postMessage({"type" : "stdout","data" : "Received command: " +Module.arguments.join(" ") +((Module.TOTAL_MEMORY ) ? ". Processing with " + Module.TOTAL_MEMORY + " bits." : "")});var time = now();var result = ffmpeg_run(Module);var totalTime = now() - time;postMessage({"type" : "stdout","data" : "Finished processing (took " + totalTime + "ms)"});postMessage({"type" : "done","data" : result,"time" : totalTime});}};postMessage({"type" : "ready"});', |
|
], |
|
{ |
|
type: 'application/javascript', |
|
} |
|
) |
|
); |
|
|
|
var worker = new Worker(blob); |
|
URL.revokeObjectURL(blob); |
|
return worker; |
|
} |
|
|
|
var worker; |
|
|
|
function convertStreams(videoBlob, setting) { |
|
var aab; |
|
var buffersReady; |
|
var workerReady; |
|
var posted; |
|
|
|
var fileReader = new FileReader(); |
|
fileReader.onload = function () { |
|
aab = this.result; |
|
postMessage(); |
|
}; |
|
fileReader.readAsArrayBuffer(videoBlob); |
|
|
|
if (!worker) { |
|
worker = processInWebWorker(); |
|
} |
|
worker.onmessage = function (event) { |
|
var message = event.data; |
|
if (message.type == 'ready') { |
|
workerReady = true; |
|
if (buffersReady) postMessage(); |
|
} else if (message.type == 'done') { |
|
var result = message.data[0]; |
|
if (setting == 'gif') { |
|
var blob = new File([result.data], 'test.gif', { |
|
type: 'image/gif', |
|
}); |
|
PostBlob(blob); |
|
} else if (setting == 'mp4') { |
|
var blob = new File([result.data], 'test.mp4', { |
|
type: 'video/mp4', |
|
}); |
|
PostBlob(blob); |
|
} |
|
} |
|
}; |
|
var postMessage = function () { |
|
posted = true; |
|
if (setting == 'gif') { |
|
worker.postMessage({ |
|
type: 'command', |
|
arguments: '-i video.webm -r 24 output-10.gif'.split(' '), |
|
files: [ |
|
{ |
|
data: new Uint8Array(aab), |
|
name: 'video.webm', |
|
}, |
|
], |
|
}); |
|
} else if (setting == 'mp4') { |
|
worker.postMessage({ |
|
type: 'command', |
|
arguments: |
|
'-i video.webm -c:v mpeg4 -b:v 6400k -strict experimental output.mp4'.split( |
|
' ' |
|
), |
|
files: [ |
|
{ |
|
data: new Uint8Array(aab), |
|
name: 'video.webm', |
|
}, |
|
], |
|
}); |
|
} |
|
}; |
|
} |
|
|
|
function PostBlob(blob) { |
|
var url = URL.createObjectURL(blob); |
|
const a = document.createElement('a'); |
|
a.style.display = 'none'; |
|
a.href = url; |
|
a.download = name; |
|
document.body.appendChild(a); |
|
a.click(); |
|
recording = false; |
|
currenttime = 0; |
|
animate(false, 0); |
|
$('#seekbar').offset({ |
|
left: |
|
offset_left + |
|
$('#inner-timeline').offset().left + |
|
currenttime / timelinetime, |
|
}); |
|
canvas.renderAll(); |
|
resizeCanvas(); |
|
if (background_audio != false) { |
|
background_audio.pause(); |
|
background_audio = new Audio(background_audio.src); |
|
} |
|
$('#download-real').html('Download'); |
|
$('#download-real').removeClass('downloading'); |
|
updateRecordCanvas(); |
|
} |
|
|