Update app-backup6.py
Browse files- app-backup6.py +53 -33
app-backup6.py
CHANGED
|
@@ -659,18 +659,33 @@ rec.start(100);
|
|
| 659 |
|
| 660 |
var dur=S.dur;
|
| 661 |
var fps=30;
|
|
|
|
| 662 |
var totalFrames=Math.ceil(dur*fps);
|
| 663 |
-
var
|
| 664 |
|
| 665 |
-
//
|
| 666 |
-
|
| 667 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 668 |
|
| 669 |
-
|
| 670 |
-
document.getElementById('exportBar').style.width=(
|
| 671 |
-
document.getElementById('exportMsg').textContent='๋
นํ ์ค... '+Math.round(
|
| 672 |
|
| 673 |
-
// ์คํ์คํฌ๋ฆฐ ์บ๋ฒ์ค์
|
| 674 |
offCtx.fillStyle='#000';
|
| 675 |
offCtx.fillRect(0,0,1280,720);
|
| 676 |
|
|
@@ -680,8 +695,22 @@ var el=S.els[vc.mid];
|
|
| 680 |
if(el){{
|
| 681 |
if(vc.type==='video'){{
|
| 682 |
var clipT=t-vc.start+vc.ts;
|
| 683 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 684 |
}}
|
|
|
|
|
|
|
|
|
|
| 685 |
try{{
|
| 686 |
var sw=el.videoWidth||el.naturalWidth||el.width||1280;
|
| 687 |
var sh=el.videoHeight||el.naturalHeight||el.height||720;
|
|
@@ -690,19 +719,27 @@ var dw=sw*scale,dh=sh*scale;
|
|
| 690 |
offCtx.drawImage(el,(1280-dw)/2,(720-dh)/2,dw,dh);
|
| 691 |
}}catch(e){{}}
|
| 692 |
}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 693 |
}}
|
| 694 |
|
| 695 |
-
// ์์ฑ๋ ํ๋ ์์ ๋ฉ์ธ ์บ๋ฒ์ค๋ก
|
| 696 |
ctx.drawImage(offCanvas,0,0);
|
| 697 |
|
| 698 |
-
|
| 699 |
-
await new Promise(function(resolve){{setTimeout(resolve,33)}});
|
| 700 |
}}
|
| 701 |
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
| 705 |
-
|
|
|
|
|
|
|
|
|
|
| 706 |
}});
|
| 707 |
|
| 708 |
if(S.cancelled)return;
|
|
@@ -744,23 +781,6 @@ downloadDiv.appendChild(copyBtn);
|
|
| 744 |
document.querySelector('.modal-box').appendChild(downloadDiv);
|
| 745 |
}}
|
| 746 |
|
| 747 |
-
// ๋น๋์ค seek ์๋ฃ ๋๊ธฐ ํจ์
|
| 748 |
-
function seekVideo(video,time){{
|
| 749 |
-
return new Promise(function(resolve){{
|
| 750 |
-
if(Math.abs(video.currentTime-time)<0.05){{
|
| 751 |
-
resolve();
|
| 752 |
-
return;
|
| 753 |
-
}}
|
| 754 |
-
var onSeeked=function(){{
|
| 755 |
-
video.removeEventListener('seeked',onSeeked);
|
| 756 |
-
resolve();
|
| 757 |
-
}};
|
| 758 |
-
video.addEventListener('seeked',onSeeked);
|
| 759 |
-
video.currentTime=time;
|
| 760 |
-
setTimeout(resolve,200);
|
| 761 |
-
}});
|
| 762 |
-
}}
|
| 763 |
-
|
| 764 |
function cancelExport(){{S.cancelled=true;document.getElementById('exportModal').style.display='none'}}
|
| 765 |
|
| 766 |
document.addEventListener('keydown',function(e){{
|
|
|
|
| 659 |
|
| 660 |
var dur=S.dur;
|
| 661 |
var fps=30;
|
| 662 |
+
var frameInterval=1000/fps; // 33.33ms
|
| 663 |
var totalFrames=Math.ceil(dur*fps);
|
| 664 |
+
var startTime=performance.now();
|
| 665 |
|
| 666 |
+
// ์ค์๊ฐ ๊ธฐ๋ฐ ๋ ๋๋ง (์ ํํ ํ์ด๋ฐ)
|
| 667 |
+
await new Promise(function(resolve){{
|
| 668 |
+
var frameCount=0;
|
| 669 |
+
var lastVideoEl=null;
|
| 670 |
+
var lastClipId=null;
|
| 671 |
+
|
| 672 |
+
function render(){{
|
| 673 |
+
if(S.cancelled){{rec.stop();resolve();return}}
|
| 674 |
+
|
| 675 |
+
var elapsed=performance.now()-startTime;
|
| 676 |
+
var t=elapsed/1000; // ํ์ฌ ์๊ฐ (์ด)
|
| 677 |
+
|
| 678 |
+
if(t>=dur){{
|
| 679 |
+
rec.stop();
|
| 680 |
+
setTimeout(resolve,100);
|
| 681 |
+
return;
|
| 682 |
+
}}
|
| 683 |
|
| 684 |
+
// ํ๋ก๊ทธ๋ ์ค ์
๋ฐ์ดํธ
|
| 685 |
+
document.getElementById('exportBar').style.width=(t/dur*100)+'%';
|
| 686 |
+
document.getElementById('exportMsg').textContent='๋
นํ ์ค... '+Math.round(t/dur*100)+'% ('+t.toFixed(1)+'/'+dur.toFixed(1)+'์ด)';
|
| 687 |
|
| 688 |
+
// ์คํ์คํฌ๋ฆฐ ์บ๋ฒ์ค์ ๋ ๋๋ง
|
| 689 |
offCtx.fillStyle='#000';
|
| 690 |
offCtx.fillRect(0,0,1280,720);
|
| 691 |
|
|
|
|
| 695 |
if(el){{
|
| 696 |
if(vc.type==='video'){{
|
| 697 |
var clipT=t-vc.start+vc.ts;
|
| 698 |
+
|
| 699 |
+
// ํด๋ฆฝ์ด ๋ฐ๋๋ฉด seekํ๊ณ ์ฌ์
|
| 700 |
+
if(lastClipId!==vc.id){{
|
| 701 |
+
el.currentTime=clipT;
|
| 702 |
+
el.play().catch(function(){{}});
|
| 703 |
+
lastClipId=vc.id;
|
| 704 |
+
lastVideoEl=el;
|
| 705 |
+
}}
|
| 706 |
+
|
| 707 |
+
// ์ด์ ๋น๋์ค ์ ์ง
|
| 708 |
+
if(lastVideoEl&&lastVideoEl!==el&&!lastVideoEl.paused){{
|
| 709 |
+
lastVideoEl.pause();
|
| 710 |
}}
|
| 711 |
+
lastVideoEl=el;
|
| 712 |
+
}}
|
| 713 |
+
|
| 714 |
try{{
|
| 715 |
var sw=el.videoWidth||el.naturalWidth||el.width||1280;
|
| 716 |
var sh=el.videoHeight||el.naturalHeight||el.height||720;
|
|
|
|
| 719 |
offCtx.drawImage(el,(1280-dw)/2,(720-dh)/2,dw,dh);
|
| 720 |
}}catch(e){{}}
|
| 721 |
}}
|
| 722 |
+
}}else{{
|
| 723 |
+
// ํด๋ฆฝ ์์ผ๋ฉด ์ด์ ๋น๋์ค ์ ์ง
|
| 724 |
+
if(lastVideoEl&&!lastVideoEl.paused){{
|
| 725 |
+
lastVideoEl.pause();
|
| 726 |
+
lastClipId=null;
|
| 727 |
+
}}
|
| 728 |
}}
|
| 729 |
|
| 730 |
+
// ์์ฑ๋ ํ๋ ์์ ๋ฉ์ธ ์บ๋ฒ์ค๋ก ๋ณต์ฌ
|
| 731 |
ctx.drawImage(offCanvas,0,0);
|
| 732 |
|
| 733 |
+
requestAnimationFrame(render);
|
|
|
|
| 734 |
}}
|
| 735 |
|
| 736 |
+
requestAnimationFrame(render);
|
| 737 |
+
}});
|
| 738 |
+
|
| 739 |
+
// ๋ชจ๋ ๋น๋์ค ์ ์ง
|
| 740 |
+
Object.keys(S.els).forEach(function(k){{
|
| 741 |
+
var el=S.els[k];
|
| 742 |
+
if(el&&el.pause)el.pause();
|
| 743 |
}});
|
| 744 |
|
| 745 |
if(S.cancelled)return;
|
|
|
|
| 781 |
document.querySelector('.modal-box').appendChild(downloadDiv);
|
| 782 |
}}
|
| 783 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 784 |
function cancelExport(){{S.cancelled=true;document.getElementById('exportModal').style.display='none'}}
|
| 785 |
|
| 786 |
document.addEventListener('keydown',function(e){{
|