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(); }