Files
create-vod/bin/cli.js
2026-01-22 10:44:39 +03:00

86 lines
57 KiB
JavaScript
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
import{createRequire as rF}from"node:module";var nF=Object.create;var{getPrototypeOf:sF,defineProperty:Uu,getOwnPropertyNames:aF}=Object;var iF=Object.prototype.hasOwnProperty;var UD=(D,u,C)=>{C=D!=null?nF(sF(D)):{};let F=u||!D||!D.__esModule?Uu(C,"default",{value:D,enumerable:!0}):C;for(let E of aF(D))if(!iF.call(F,E))Uu(F,E,{get:()=>D[E],enumerable:!0});return F};var H=(D,u)=>()=>(u||D((u={exports:{}}).exports,u),u.exports);var i=rF(import.meta.url);var bu=H((B2,Su)=>{class yu{constructor(D,u,C){this.etaBufferLength=D||100,this.valueBuffer=[C],this.timeBuffer=[u],this.eta="0"}update(D,u,C){this.valueBuffer.push(u),this.timeBuffer.push(D),this.calculate(C-u)}getTime(){return this.eta}calculate(D){let u=this.valueBuffer.length,C=Math.min(this.etaBufferLength,u),F=this.valueBuffer[u-1]-this.valueBuffer[u-C],E=this.timeBuffer[u-1]-this.timeBuffer[u-C],A=F/E;this.valueBuffer=this.valueBuffer.slice(-this.etaBufferLength),this.timeBuffer=this.timeBuffer.slice(-this.etaBufferLength);let B=Math.ceil(D/A/1000);if(isNaN(B))this.eta="NULL";else if(!isFinite(B))this.eta="INF";else if(B>1e7)this.eta="INF";else if(B<0)this.eta=0;else this.eta=B}}Su.exports=yu});var cD=H((A2,Pu)=>{var s=i("readline");class vu{constructor(D){this.stream=D,this.linewrap=!0,this.dy=0}cursorSave(){if(!this.stream.isTTY)return;this.stream.write("\x1B7")}cursorRestore(){if(!this.stream.isTTY)return;this.stream.write("\x1B8")}cursor(D){if(!this.stream.isTTY)return;if(D)this.stream.write("\x1B[?25h");else this.stream.write("\x1B[?25l")}cursorTo(D=null,u=null){if(!this.stream.isTTY)return;s.cursorTo(this.stream,D,u)}cursorRelative(D=null,u=null){if(!this.stream.isTTY)return;this.dy=this.dy+u,s.moveCursor(this.stream,D,u)}cursorRelativeReset(){if(!this.stream.isTTY)return;s.moveCursor(this.stream,0,-this.dy),s.cursorTo(this.stream,0,null),this.dy=0}clearRight(){if(!this.stream.isTTY)return;s.clearLine(this.stream,1)}clearLine(){if(!this.stream.isTTY)return;s.clearLine(this.stream,0)}clearBottom(){if(!this.stream.isTTY)return;s.clearScreenDown(this.stream)}newline(){this.stream.write(`
`),this.dy++}write(D,u=!1){if(this.linewrap===!0&&u===!1)this.stream.write(D.substr(0,this.getWidth()));else this.stream.write(D)}lineWrapping(D){if(!this.stream.isTTY)return;if(this.linewrap=D,D)this.stream.write("\x1B[?7h");else this.stream.write("\x1B[?7l")}isTTY(){return this.stream.isTTY===!0}getWidth(){return this.stream.columns||(this.stream.isTTY?80:200)}}Pu.exports=vu});var fu=H((Z2,hu)=>{hu.exports=({onlyFirst:D=!1}={})=>{let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,D?void 0:"g")}});var mu=H(($2,gu)=>{var _8=fu();gu.exports=(D)=>typeof D==="string"?D.replace(_8(),""):D});var lu=H((J2,lD)=>{var cu=(D)=>{if(Number.isNaN(D))return!1;if(D>=4352&&(D<=4447||D===9001||D===9002||11904<=D&&D<=12871&&D!==12351||12880<=D&&D<=19903||19968<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65131||65281<=D&&D<=65376||65504<=D&&D<=65510||110592<=D&&D<=110593||127488<=D&&D<=127569||131072<=D&&D<=262141))return!0;return!1};lD.exports=cu;lD.exports.default=cu});var du=H((K2,pu)=>{pu.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var su=H((X2,pD)=>{var z8=mu(),q8=lu(),I8=du(),nu=(D)=>{if(typeof D!=="string"||D.length===0)return 0;if(D=z8(D),D.length===0)return 0;D=D.replace(I8()," ");let u=0;for(let C=0;C<D.length;C++){let F=D.codePointAt(C);if(F<=31||F>=127&&F<=159)continue;if(F>=768&&F<=879)continue;if(F>65535)C++;u+=q8(F)?2:1}return u};pD.exports=nu;pD.exports.default=nu});var dD=H((Y2,au)=>{au.exports=function(u,C,F){if(C.autopadding!==!0)return u;function E(A,B){return(C.autopaddingChar+A).slice(-B)}switch(F){case"percentage":return E(u,3);default:return u}}});var nD=H((G2,iu)=>{iu.exports=function(u,C){let F=Math.round(u*C.barsize),E=C.barsize-F;return C.barCompleteString.substr(0,F)+C.barGlue+C.barIncompleteString.substr(0,E)}});var sD=H((U2,ru)=>{ru.exports=function(u,C,F){function E(B){if(F)return F*Math.round(B/F);else return B}function A(B){return(C.autopaddingChar+B).slice(-2)}if(u>3600)return A(Math.floor(u/3600))+"h"+A(E(u%3600/60))+"m";else if(u>60)return A(Math.floor(u/60))+"m"+A(E(u%60))+"s";else if(u>10)return A(E(u))+"s";else return A(u)+"s"}});var aD=H((W2,ou)=>{var V8=su(),H8=dD(),x8=nD(),M8=sD();ou.exports=function(u,C,F){let E=u.format,A=u.formatTime||M8,B=u.formatValue||H8,$=u.formatBar||x8,K=Math.floor(C.progress*100)+"",X=C.stopTime||Date.now(),G=Math.round((X-C.startTime)/1000),Y=Object.assign({},F,{bar:$(C.progress,u),percentage:B(K,u,"percentage"),total:B(C.total,u,"total"),value:B(C.value,u,"value"),eta:B(C.eta,u,"eta"),eta_formatted:A(C.eta,u,5),duration:B(G,u,"duration"),duration_formatted:A(G,u,1)});E=E.replace(/\{(\w+)\}/g,function(_,J){if(typeof Y[J]<"u")return Y[J];return _});let Z=Math.max(0,C.maxWidth-V8(E)-2),k=Math.floor(Z/2);switch(u.align){case"right":E=Z>0?" ".repeat(Z)+E:E;break;case"center":E=k>0?" ".repeat(k)+E:E;break;case"left":default:break}return E}});var qD=H((N2,tu)=>{function I(D,u){if(typeof D>"u"||D===null)return u;else return D}tu.exports={parse:function(u,C){let F={},E=Object.assign({},C,u);return F.throttleTime=1000/I(E.fps,10),F.stream=I(E.stream,process.stderr),F.terminal=I(E.terminal,null),F.clearOnComplete=I(E.clearOnComplete,!1),F.stopOnComplete=I(E.stopOnComplete,!1),F.barsize=I(E.barsize,40),F.align=I(E.align,"left"),F.hideCursor=I(E.hideCursor,!1),F.linewrap=I(E.linewrap,!1),F.barGlue=I(E.barGlue,""),F.barCompleteChar=I(E.barCompleteChar,"="),F.barIncompleteChar=I(E.barIncompleteChar,"-"),F.format=I(E.format,"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"),F.formatTime=I(E.formatTime,null),F.formatValue=I(E.formatValue,null),F.formatBar=I(E.formatBar,null),F.etaBufferLength=I(E.etaBuffer,10),F.etaAsynchronousUpdate=I(E.etaAsynchronousUpdate,!1),F.progressCalculationRelative=I(E.progressCalculationRelative,!1),F.synchronousUpdate=I(E.synchronousUpdate,!0),F.noTTYOutput=I(E.noTTYOutput,!1),F.notTTYSchedule=I(E.notTTYSchedule,2000),F.emptyOnZero=I(E.emptyOnZero,!1),F.forceRedraw=I(E.forceRedraw,!1),F.autopadding=I(E.autopadding,!1),F.gracefulExit=I(E.gracefulExit,!1),F},assignDerivedOptions:function(u){return u.barCompleteString=u.barCompleteChar.repeat(u.barsize+1),u.barIncompleteString=u.barIncompleteChar.repeat(u.barsize+1),u.autopaddingChar=u.autopadding?I(u.autopaddingChar," "):"",u}}});var iD=H((k2,DF)=>{var eu=bu(),O8=cD(),L8=aD(),R8=qD(),j8=i("events");DF.exports=class extends j8{constructor(u){super();this.options=R8.assignDerivedOptions(u),this.terminal=this.options.terminal?this.options.terminal:new O8(this.options.stream),this.value=0,this.startValue=0,this.total=100,this.lastDrawnString=null,this.startTime=null,this.stopTime=null,this.lastRedraw=Date.now(),this.eta=new eu(this.options.etaBufferLength,0,0),this.payload={},this.isActive=!1,this.formatter=typeof this.options.format==="function"?this.options.format:L8}render(u=!1){let C={progress:this.getProgress(),eta:this.eta.getTime(),startTime:this.startTime,stopTime:this.stopTime,total:this.total,value:this.value,maxWidth:this.terminal.getWidth()};if(this.options.etaAsynchronousUpdate)this.updateETA();let F=this.formatter(this.options,C,this.payload);if(u||this.options.forceRedraw||this.options.noTTYOutput&&!this.terminal.isTTY()||this.lastDrawnString!=F)this.emit("redraw-pre"),this.terminal.cursorTo(0,null),this.terminal.write(F),this.terminal.clearRight(),this.lastDrawnString=F,this.lastRedraw=Date.now(),this.emit("redraw-post")}start(u,C,F){this.value=C||0,this.total=typeof u<"u"&&u>=0?u:100,this.startValue=C||0,this.payload=F||{},this.startTime=Date.now(),this.stopTime=null,this.lastDrawnString="",this.eta=new eu(this.options.etaBufferLength,this.startTime,this.value),this.isActive=!0,this.emit("start",u,C)}stop(){this.isActive=!1,this.stopTime=Date.now(),this.emit("stop",this.total,this.value)}update(u,C={}){if(typeof u==="number")this.value=u,this.eta.update(Date.now(),u,this.total);let F=(typeof u==="object"?u:C)||{};this.emit("update",this.total,this.value);for(let E in F)this.payload[E]=F[E];if(this.value>=this.getTotal()&&this.options.stopOnComplete)this.stop()}getProgress(){let u=this.value/this.total;if(this.options.progressCalculationRelative)u=(this.value-this.startValue)/(this.total-this.startValue);if(isNaN(u))u=this.options&&this.options.emptyOnZero?0:1;return u=Math.min(Math.max(u,0),1),u}increment(u=1,C={}){if(typeof u==="object")this.update(this.value+1,u);else this.update(this.value+u,C)}getTotal(){return this.total}setTotal(u){if(typeof u<"u"&&u>=0)this.total=u}updateETA(){this.eta.update(Date.now(),this.value,this.total)}}});var FF=H((Q2,uF)=>{var T8=iD(),w8=qD();uF.exports=class extends T8{constructor(u,C){super(w8.parse(u,C));if(this.timer=null,this.options.noTTYOutput&&this.terminal.isTTY()===!1)this.options.synchronousUpdate=!1;this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.sigintCallback=null}render(){if(this.timer)clearTimeout(this.timer),this.timer=null;if(super.render(),this.options.noTTYOutput&&this.terminal.isTTY()===!1)this.terminal.newline();this.timer=setTimeout(this.render.bind(this),this.schedulingRate)}update(u,C){if(!this.timer)return;if(super.update(u,C),this.options.synchronousUpdate&&this.lastRedraw+this.options.throttleTime*2<Date.now())this.render()}start(u,C,F){if(this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1)return;if(this.sigintCallback===null&&this.options.gracefulExit)this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback);if(this.terminal.cursorSave(),this.options.hideCursor===!0)this.terminal.cursor(!1);if(this.options.linewrap===!1)this.terminal.lineWrapping(!1);super.start(u,C,F),this.render()}stop(){if(!this.timer)return;if(this.sigintCallback)process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null;if(this.render(),super.stop(),clearTimeout(this.timer),this.timer=null,this.options.hideCursor===!0)this.terminal.cursor(!0);if(this.options.linewrap===!1)this.terminal.lineWrapping(!0);if(this.terminal.cursorRestore(),this.options.clearOnComplete)this.terminal.cursorTo(0,null),this.terminal.clearLine();else this.terminal.newline()}}});var CF=H((_2,EF)=>{var y8=cD(),S8=iD(),b8=qD(),v8=i("events");EF.exports=class extends v8{constructor(u,C){super();this.bars=[],this.options=b8.parse(u,C),this.options.synchronousUpdate=!1,this.terminal=this.options.terminal?this.options.terminal:new y8(this.options.stream),this.timer=null,this.isActive=!1,this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.loggingBuffer=[],this.sigintCallback=null}create(u,C,F,E={}){let A=new S8(Object.assign({},this.options,{terminal:this.terminal},E));if(this.bars.push(A),this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1)return A;if(this.sigintCallback===null&&this.options.gracefulExit)this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback);if(!this.isActive){if(this.options.hideCursor===!0)this.terminal.cursor(!1);if(this.options.linewrap===!1)this.terminal.lineWrapping(!1);this.timer=setTimeout(this.update.bind(this),this.schedulingRate)}return this.isActive=!0,A.start(u,C,F),this.emit("start"),A}remove(u){let C=this.bars.indexOf(u);if(C<0)return!1;return this.bars.splice(C,1),this.update(),this.terminal.newline(),this.terminal.clearBottom(),!0}update(){if(this.timer)clearTimeout(this.timer),this.timer=null;if(this.emit("update-pre"),this.terminal.cursorRelativeReset(),this.emit("redraw-pre"),this.loggingBuffer.length>0){this.terminal.clearLine();while(this.loggingBuffer.length>0)this.terminal.write(this.loggingBuffer.shift(),!0)}for(let u=0;u<this.bars.length;u++){if(u>0)this.terminal.newline();this.bars[u].render()}if(this.emit("redraw-post"),this.options.noTTYOutput&&this.terminal.isTTY()===!1)this.terminal.newline(),this.terminal.newline();if(this.timer=setTimeout(this.update.bind(this),this.schedulingRate),this.emit("update-post"),this.options.stopOnComplete&&!this.bars.find((u)=>u.isActive))this.stop()}stop(){if(clearTimeout(this.timer),this.timer=null,this.sigintCallback)process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null;if(this.isActive=!1,this.options.hideCursor===!0)this.terminal.cursor(!0);if(this.options.linewrap===!1)this.terminal.lineWrapping(!0);if(this.terminal.cursorRelativeReset(),this.emit("stop-pre-clear"),this.options.clearOnComplete)this.terminal.clearBottom();else{for(let u=0;u<this.bars.length;u++){if(u>0)this.terminal.newline();this.bars[u].render(),this.bars[u].stop()}this.terminal.newline()}this.emit("stop")}log(u){this.loggingBuffer.push(u)}}});var AF=H((z2,BF)=>{BF.exports={format:"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"=",barIncompleteChar:"-"}});var $F=H((q2,ZF)=>{ZF.exports={format:" {bar} {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"█",barIncompleteChar:"░"}});var KF=H((I2,JF)=>{JF.exports={format:" \x1B[90m{bar}\x1B[0m {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"█",barIncompleteChar:"░"}});var YF=H((V2,XF)=>{XF.exports={format:" {bar}■ {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"■",barIncompleteChar:" "}});var UF=H((H2,GF)=>{var P8=AF(),h8=$F(),f8=KF(),g8=YF();GF.exports={legacy:P8,shades_classic:h8,shades_grey:f8,rect:g8}});var kF=H((x2,NF)=>{var WF=FF(),m8=CF(),c8=UF(),l8=aD(),p8=dD(),d8=nD(),n8=sD();NF.exports={Bar:WF,SingleBar:WF,MultiBar:m8,Presets:c8,Format:{Formatter:l8,BarFormat:d8,ValueFormat:p8,TimeFormat:n8}}});import{join as zD,basename as ju,extname as Tu}from"node:path";import{randomUUID as W8}from"node:crypto";import{rm as wu}from"node:fs/promises";import{spawn as g}from"node:child_process";import{appendFile as oF}from"node:fs/promises";var yD=null;function SD(D){yD=D}async function f(D){if(yD)try{await oF(yD,D,"utf-8")}catch(u){}}async function r(){return new Promise((D)=>{let u=g("ffmpeg",["-version"]);u.on("error",()=>D(!1)),u.on("close",(C)=>D(C===0))})}async function o(){return new Promise((D)=>{let u=g("MP4Box",["-version"]);u.on("error",()=>D(!1)),u.on("close",(C)=>D(C===0))})}async function t(){let D=await new Promise((E)=>{let A=g("ffmpeg",["-hide_banner","-encoders"]),B="";A.stdout.on("data",($)=>{B+=$.toString()}),A.on("error",()=>E("")),A.on("close",()=>E(B))}),u=(E)=>D.includes(E),C=[],F=[{acc:"nvenc",h264:u("h264_nvenc")?"h264_nvenc":void 0,av1:u("av1_nvenc")?"av1_nvenc":void 0},{acc:"qsv",h264:u("h264_qsv")?"h264_qsv":void 0,av1:u("av1_qsv")?"av1_qsv":void 0},{acc:"amf",h264:u("h264_amf")?"h264_amf":void 0,av1:u("av1_amf")?"av1_amf":void 0},{acc:"vaapi",h264:u("h264_vaapi")?"h264_vaapi":void 0,av1:u("av1_vaapi")?"av1_vaapi":void 0},{acc:"videotoolbox",h264:u("h264_videotoolbox")?"h264_videotoolbox":void 0,av1:u("av1_videotoolbox")?"av1_videotoolbox":void 0},{acc:"v4l2",h264:u("h264_v4l2m2m")?"h264_v4l2m2m":void 0,av1:u("av1_v4l2m2m")?"av1_v4l2m2m":void 0}];for(let E of F)if(E.h264||E.av1)C.push({accelerator:E.acc,h264Encoder:E.h264,av1Encoder:E.av1});return C}async function e(){let u=(await new Promise((E)=>{let A=g("ffmpeg",["-hide_banner","-hwaccels"]),B="";A.stdout.on("data",($)=>B+=$.toString()),A.on("error",()=>E("")),A.on("close",()=>E(B))})).split(`
`).map((E)=>E.trim()).filter(Boolean),C=[],F={cuda:"nvenc",qsv:"qsv",vaapi:"vaapi",videotoolbox:"videotoolbox",v4l2m2m:"v4l2",dxva2:"amf"};for(let E of u){let A=F[E];if(A)C.push({accelerator:A})}return C}async function WD(D){let u=["-v","error","-f","lavfi","-i","testsrc=size=320x240:rate=1","-frames:v","1","-an","-c:v",D,"-f","null","-"];return new Promise((C)=>{let F=g("ffmpeg",u);F.on("error",()=>C(!1)),F.on("close",(E)=>C(E===0))})}async function ND(D,u){let C=["-v","error"];if(D==="nvenc")C.push("-hwaccel","cuda","-hwaccel_output_format","cuda");else if(D==="qsv")C.push("-hwaccel","qsv");else if(D==="vaapi")C.push("-hwaccel","vaapi","-vaapi_device","/dev/dri/renderD128");else if(D==="videotoolbox")C.push("-hwaccel","videotoolbox");else if(D==="v4l2")C.push("-hwaccel","v4l2m2m");else if(D==="amf")return!1;return C.push("-i",u,"-frames:v","1","-f","null","-"),new Promise((F)=>{let E=g("ffmpeg",C);E.on("error",()=>F(!1)),E.on("close",(A)=>F(A===0))})}async function d(D,u,C){let E=`
=== FFmpeg Command [${new Date().toISOString()}] ===
ffmpeg ${D.join(" ")}
`;return await f(E),new Promise((A,B)=>{let $=g("ffmpeg",D),K="";$.stderr.on("data",(X)=>{let G=X.toString();if(K+=G,u&&C){let Y=G.match(/time=(\d{2}):(\d{2}):(\d{2}\.\d{2})/);if(Y){let Z=parseInt(Y[1]),k=parseInt(Y[2]),_=parseFloat(Y[3]),J=Z*3600+k*60+_,N=Math.min(100,J/C*100);u(N)}}}),$.on("error",(X)=>{f(`ERROR: ${X.message}
`),B(Error(`FFmpeg error: ${X.message}`))}),$.on("close",(X)=>{if(X===0){let Y=K.split(`
`).filter((Z)=>Z.trim()).slice(-10).join(`
`);f(`SUCCESS: Exit code ${X}
--- Last 10 lines of output ---
${Y}
`),A()}else f(`FAILED: Exit code ${X}
--- Full error output ---
${K}
`),B(Error(`FFmpeg failed with exit code ${X}
${K}`))})})}async function bD(D){let C=`
=== MP4Box Command [${new Date().toISOString()}] ===
MP4Box ${D.join(" ")}
`;return await f(C),new Promise((F,E)=>{let A=g("MP4Box",D),B="",$="";A.stdout.on("data",(K)=>{B+=K.toString()}),A.stderr.on("data",(K)=>{$+=K.toString()}),A.on("error",(K)=>{f(`ERROR: ${K.message}
`),E(Error(`MP4Box error: ${K.message}`))}),A.on("close",(K)=>{if(K===0){let Y=(B||$).split(`
`).filter((Z)=>Z.trim()).slice(-10).join(`
`);f(`SUCCESS: Exit code ${K}
--- Last 10 lines of output ---
${Y}
`),F()}else{let X=$||B;f(`FAILED: Exit code ${K}
--- Full error output ---
${X}
`),E(Error(`MP4Box failed with exit code ${K}
${X}`))}})})}import{spawn as tF}from"node:child_process";async function DD(D){return new Promise((u,C)=>{let F=tF("ffprobe",["-v","error","-show_entries","stream=width,height,duration,r_frame_rate,codec_name,codec_type,bit_rate","-show_entries","format=duration","-of","json",D]),E="";F.stdout.on("data",(A)=>{E+=A.toString()}),F.on("error",(A)=>{C(Error(`ffprobe error: ${A.message}`))}),F.on("close",(A)=>{if(A!==0){C(Error(`ffprobe failed with exit code ${A}`));return}try{let B=JSON.parse(E),$=B.streams.find((J)=>J.codec_type==="video"),K=B.streams.find((J)=>J.codec_type==="audio"),X=B.format;if(!$){C(Error("No video stream found in input file"));return}let G=30;if($.r_frame_rate){let[J,N]=$.r_frame_rate.split("/").map(Number);if(J&&N&&N!==0)G=J/N}let Y=parseFloat($.duration||X.duration||"0"),Z=B.streams.find((J)=>J.codec_type==="audio"&&J.bit_rate),k=Z?.bit_rate?Math.round(parseInt(Z.bit_rate)/1000):void 0,_=$.bit_rate?Math.round(parseInt($.bit_rate)/1000):void 0;u({width:$.width,height:$.height,duration:Y,fps:G,codec:$.codec_name,hasAudio:Boolean(K),audioBitrate:k,videoBitrate:_})}catch(B){C(Error(`Failed to parse ffprobe output: ${B}`))}})})}function kD(D,u=256){if(!D)return`${u}k`;let F=Math.max(D,64),E=Math.min(F,u);if(E<=64)return"64k";if(E<=96)return"96k";if(E<=128)return"128k";if(E<=192)return"192k";return"256k"}function QD(D){let u=Math.floor(D/3600),C=Math.floor(D%3600/60),F=D%60;return`${String(u).padStart(2,"0")}:${String(C).padStart(2,"0")}:${F.toFixed(3).padStart(6,"0")}`}import{mkdir as eF,access as D8,constants as u8}from"node:fs/promises";async function n(D){try{await D8(D,u8.F_OK)}catch{await eF(D,{recursive:!0})}}function C8(D,u){let C=D*u;if(C<=230400)return 0.08;if(C<=409920)return 0.075;if(C<=921600)return 0.07;if(C<=2073600)return 0.065;if(C<=3686400)return 0.06;return 0.055}function v(D,u,C=30,F){let E=C8(D,u),A=Math.round(D*u*C*E/1000);if(F&&A>F)A=F;return`${A}k`}var vD=[{name:"360p",width:640,height:360,videoBitrate:v(640,360,30),audioBitrate:"192k"},{name:"480p",width:854,height:480,videoBitrate:v(854,480,30),audioBitrate:"192k"},{name:"720p",width:1280,height:720,videoBitrate:v(1280,720,30),audioBitrate:"192k"},{name:"1080p",width:1920,height:1080,videoBitrate:v(1920,1080,30),audioBitrate:"256k"},{name:"1440p",width:2560,height:1440,videoBitrate:v(2560,1440,30),audioBitrate:"256k"},{name:"2160p",width:3840,height:2160,videoBitrate:v(3840,2160,30),audioBitrate:"256k"}];function KD(D,u,C=30,F){let E=[],A=vD.filter((B)=>{return B.height<=u});for(let B of A)E.push({...B,videoBitrate:v(B.width,B.height,30,F),fps:30});return E}function B8(D,u,C){return{...D,name:`${D.name}-${u}`,videoBitrate:v(D.width,D.height,u,C),fps:u}}function Wu(D){let C=D.trim().match(/^(\d+)p?(?:[@-](\d+))?$/i);if(!C)return null;let F=C[1]+"p",E=C[2]?parseInt(C[2]):30;return{resolution:F,fps:E}}function Nu(D,u=30,C){let F=vD.find((E)=>E.name===D);if(!F)return null;if(u===30)return{...F,videoBitrate:v(F.width,F.height,30,C),fps:30};return B8(F,u,C)}function A8(D,u,C,F){let E=Wu(D);if(!E)return{error:`Invalid profile format: ${D}. Use format like: 360, 720@60, 1080-60`};let A=Nu(E.resolution,E.fps);if(!A)return{error:`Unknown resolution: ${E.resolution}. Available: 360, 480, 720, 1080, 1440, 2160`};if(A.height>C)return{error:`Source height (${C}px) is lower than requested ${D} height (${A.height}px)`};let B=120,$=E.fps,K;if(E.fps>F)$=Math.min(F,B),K=`Requested ${E.fps} FPS in ${D}, but source is ${F} FPS. Using ${$} FPS instead`;else if(E.fps>B)$=B,K=`Requested ${E.fps} FPS in ${D} exceeds maximum ${B} FPS. Using ${$} FPS instead`;return K?{warning:K,adjustedFps:$}:{}}function _D(D,u,C,F,E){let A=[],B=[],$=[];for(let K of D){let X=A8(K,u,C,F);if(X.error){B.push(X.error);continue}if(X.warning)$.push(X.warning);let G=Wu(K);if(!G)continue;let Y=X.adjustedFps!==void 0?X.adjustedFps:G.fps,Z=Nu(G.resolution,Y,E);if(Z)A.push(Z)}return{profiles:A,errors:B,warnings:$}}import{join as m}from"node:path";import{readdir as Z8,unlink as ku,rmdir as $8,writeFile as Qu}from"node:fs/promises";async function _u(D,u,C="00:00:00"){let F=m(u,"poster.jpg"),E=/^\d+(\.\d+)?$/.test(C)?C:C;return await d(["-ss",E,"-i",D,"-vframes","1","-q:v","2","-y",F]),F}async function zu(D,u,C,F){let{width:E,height:A,interval:B,columns:$}=F,K=m(u,".thumbnails_temp");await n(K),await Qu(m(K,".keep"),"");let X=m(K,"thumb_%04d.jpg");await d(["-i",D,"-vf",`fps=1/${B},scale=${E}:${A}`,"-q:v","5",X]);let Y=(await Z8(K)).filter((W)=>W.startsWith("thumb_")&&W.endsWith(".jpg")).sort();if(Y.length===0)throw Error("No thumbnails generated");let Z=Y.length,k=Math.ceil(Z/$),_=m(u,"thumbnails.jpg"),J=`tile=${$}x${k}`;await d(["-i",X,"-filter_complex",J,"-q:v","5",_]);let N=m(u,"thumbnails.vtt"),U=J8(Z,B,E,A,$,"thumbnails.jpg");await Qu(N,U);for(let W of Y)await ku(m(K,W));return await ku(m(K,".keep")),await $8(K),{spritePath:_,vttPath:N}}function J8(D,u,C,F,E,A){let B=`WEBVTT
`;for(let $=0;$<D;$++){let K=$*u,X=($+1)*u,G=Math.floor($/E),Z=$%E*C,k=G*F;B+=`${QD(K)} --> ${QD(X)}
`,B+=`${A}#xywh=${Z},${k},${C},${F}
`}return B}import{join as K8}from"node:path";function X8(D,u,C){if(C)if(u==="h264")return 32;else return 42;else if(u==="h264"){if(D<=360)return 25;if(D<=480)return 24;if(D<=720)return 23;if(D<=1080)return 22;if(D<=1440)return 21;return 20}else{if(D<=360)return 40;if(D<=480)return 38;if(D<=720)return 35;if(D<=1080)return 32;if(D<=1440)return 30;return 28}}async function qu(D,u,C,F,E,A,B,$,K,X,G,Y=!1,Z,k){let _=K8(u,`video_${K}_${C.name}.mp4`),J=["-y"];if(Z){if(Z==="nvenc")J.push("-hwaccel","cuda","-hwaccel_output_format","cuda");else if(Z==="qsv")J.push("-hwaccel","qsv");else if(Z==="vaapi")J.push("-hwaccel","vaapi");else if(Z==="videotoolbox")J.push("-hwaccel","videotoolbox");else if(Z==="v4l2")J.push("-hwaccel","v4l2")}J.push("-i",D,"-c:v",F);let N=F.includes("nvenc")||F.includes("qsv")||F.includes("amf")||F.includes("vaapi")||F.includes("videotoolbox")||F.includes("v4l2"),U;if(N&&X?.cq!==void 0)U=X.cq;else if(!N&&X?.crf!==void 0)U=X.crf;else U=X8(C.height,K,N);if(F==="h264_nvenc")J.push("-rc:v","vbr"),J.push("-cq",String(U)),J.push("-preset",E),J.push("-2pass","0");else if(F==="av1_nvenc")J.push("-rc:v","vbr"),J.push("-cq",String(U)),J.push("-preset",E),J.push("-2pass","0");else if(F==="av1_qsv")J.push("-preset",E),J.push("-global_quality",String(U));else if(F==="h264_qsv")J.push("-preset",E),J.push("-global_quality",String(U));else if(F==="av1_amf")J.push("-quality","balanced"),J.push("-rc","cqp"),J.push("-qp_i",String(U)),J.push("-qp_p",String(U));else if(F==="h264_amf")J.push("-quality","balanced"),J.push("-rc","cqp"),J.push("-qp_i",String(U)),J.push("-qp_p",String(U));else if(F==="libsvtav1")J.push("-crf",String(U)),J.push("-preset",E),J.push("-svtav1-params","tune=0:enable-overlays=1");else if(F==="libx264")J.push("-crf",String(U)),J.push("-preset",E);else J.push("-preset",E);let W=K==="av1"?0.6:1,z=Math.round(parseInt(C.videoBitrate)*W*1.5);J.push("-maxrate",`${z}k`),J.push("-bufsize",`${z*2}k`);let j=C.fps||30,O=Math.round(j*B);J.push("-g",String(O),"-keyint_min",String(O),"-sc_threshold","0");let x=[],T=C.width,l=C.height,p=Z==="nvenc";if(p)x.push(`scale_cuda=${T}:${l}:force_original_aspect_ratio=decrease:force_divisible_by=2`);else x.push(`scale=${T}:${l}:force_original_aspect_ratio=decrease:force_divisible_by=2`);if(G){if(G.deinterlace)x.push("yadif");if(G.denoise)x.push("hqdn3d");if(G.customFilters)x.push(...G.customFilters)}if(p)x.push("hwdownload","format=nv12");if(x.push(`pad=${T}:${l}:(ow-iw)/2:(oh-ih)/2`,"setsar=1"),J.push("-vf",x.join(",")),!Y){let OD=parseInt(C.audioBitrate)||256,LD=kD($,OD);J.push("-c:a","aac","-b:a",LD);let AD=A.toFixed(3),ZD=["aresample=async=1:min_hard_comp=0.1:first_pts=0",`apad=whole_dur=${AD}`,`atrim=0:${AD}`];if(G?.audioNormalize)ZD.push("loudnorm");J.push("-af",ZD.join(","))}else J.push("-an");return J.push("-f","mp4",_),await d(J,k,A),_}async function Iu(D,u,C,F,E,A,B,$,K,X,G,Y,Z,k=!1,_,J){let N=new Map;if(K&&C.length>1)for(let U=0;U<C.length;U+=X){let W=C.slice(U,U+X),z=W.map((O)=>qu(D,u,O,F,E,A,B,$,G,Y,Z,k,_,(x)=>{if(J)J(O.name,x)}));(await Promise.all(z)).forEach((O,x)=>{let T=W[x];N.set(T.name,O)})}else for(let U of C){let W=await qu(D,u,U,F,E,A,B,$,G,Y,Z,k,_,(z)=>{if(J)J(U.name,z)});N.set(U.name,W)}return N}import{join as L}from"node:path";import{readdir as Ou,rename as c3,mkdir as l3,writeFile as gD}from"node:fs/promises";import{readFile as PD,writeFile as hD}from"node:fs/promises";async function Vu(D){let u=await PD(D,"utf-8");u=u.replace(/\/\/>/g,"/>"),u=u.replace(/\/\s+\/>/g,"/>"),u=u.replace(/(<Representation[^>]+)\s+\/>/g,"$1/>"),u=u.replace(/<Representation\s+([^>]+)\/>\s*<\/Representation>/g,"<Representation $1/>"),u=u.replace(/<Representation\s+([^>]+)\/>\s*(<AudioChannelConfiguration[^>]*\/>)/g,`<Representation $1>
$2
</Representation>`),u=u.replace(/<Representation\s+([^>]+)>\s*(?=<(?:Representation|\/AdaptationSet))/g,`<Representation $1/>
`),await hD(D,u,"utf-8")}async function Hu(D){let u=await PD(D,"utf-8");u=u.replace(/media="\$RepresentationID\$_\$Number\$\.m4s"/g,'media="$RepresentationID$/$RepresentationID$_$Number$.m4s"'),u=u.replace(/initialization="\$RepresentationID\$_\.mp4"/g,'initialization="$RepresentationID$/$RepresentationID$_.mp4"'),await hD(D,u,"utf-8")}async function xu(D){let C=(await PD(D,"utf-8")).split(`
`),F=[],E=0;while(E<C.length){let A=C[E];if(A.includes("<AdaptationSet")&&A.includes("maxWidth")){let B=E,$=[A],K=[],X=[],G=[],Y=!1;E++;while(E<C.length&&!C[E].includes("</AdaptationSet>")){let Z=C[E];if(Z.includes("<SegmentTemplate"))Y=!0;if(Y){if(K.push(Z),Z.includes("</SegmentTemplate>"))Y=!1}else if(Z.includes("<Representation")&&Z.includes("-h264"))X.push(Z);else if(Z.includes("<Representation")&&Z.includes("-av1"))G.push(Z);E++}if(X.length>0&&G.length>0)F.push(A),K.forEach((Z)=>F.push(Z)),X.forEach((Z)=>F.push(Z)),F.push(" </AdaptationSet>"),F.push(A),K.forEach((Z)=>F.push(Z)),G.forEach((Z)=>F.push(Z)),F.push(" </AdaptationSet>");else{F.push(A);for(let Z=B+1;Z<E;Z++)F.push(C[Z]);F.push(C[E])}E++}else F.push(A),E++}await hD(D,F.join(`
`),"utf-8")}function fD(D,u,C){let F=`#EXTM3U
`;F+=`#EXT-X-VERSION:6
`,F+=`#EXT-X-TARGETDURATION:${Math.ceil(C)}
`,F+=`#EXT-X-MEDIA-SEQUENCE:1
`,F+=`#EXT-X-INDEPENDENT-SEGMENTS
`,F+=`#EXT-X-MAP:URI="${u}"
`;for(let E of D)F+=`#EXTINF:${C},
`,F+=`${E}
`;return F+=`#EXT-X-ENDLIST
`,F}function Mu(D,u){let C=`#EXTM3U
`;if(C+=`#EXT-X-VERSION:6
`,C+=`#EXT-X-INDEPENDENT-SEGMENTS
`,u)C+=`#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="audio",AUTOSELECT=YES,URI="audio/playlist.m3u8",CHANNELS="2"
`;for(let F of D){let E=u?"avc1.4D4020,mp4a.40.2":"avc1.4D4020";if(C+=`#EXT-X-STREAM-INF:BANDWIDTH=${F.bandwidth},CODECS="${E}",RESOLUTION=${F.resolution},FRAME-RATE=${F.fps}`,u)C+=',AUDIO="audio"';C+=`
`,C+=`${F.path}
`}return C}async function Y8(D,u,C,F,E,A){let B=L(u,"manifest.mpd"),$=E.length>1,K=["-dash",String(F*1000),"-frag",String(F*1000),"-rap","-segment-timeline","-segment-name","$RepresentationID$_$Number$","-out",B],X=!0;for(let[G,Y]of D.entries())for(let Z of C){let k=Y.get(Z.name);if(!k)throw Error(`MP4 file not found for profile: ${Z.name}, codec: ${G}`);let _=$?`${Z.name}-${G}`:Z.name;if(K.push(`${k}#video:id=${_}`),X&&A)K.push(`${k}#audio:id=audio`),X=!1}if(await bD(K),await G8(u,C,E,A),await Hu(B),$)await xu(B);return await Vu(B),B}async function G8(D,u,C,F){let{readdir:E,rename:A,mkdir:B}=await import("node:fs/promises"),$=C.length>1,K=[];for(let Y of C)for(let Z of u){let k=$?`${Z.name}-${Y}`:Z.name;K.push(k);let _=L(D,k);await B(_,{recursive:!0})}let X=L(D,"audio");if(F)await B(X,{recursive:!0});let G=await E(D);for(let Y of G){if(Y==="manifest.mpd")continue;if(F&&(Y.startsWith("audio_")||Y==="audio_init.m4s")){let Z=L(D,Y),k=L(X,Y);await A(Z,k);continue}for(let Z of K)if(Y.startsWith(`${Z}_`)){let k=L(D,Y),_=L(D,Z,Y);await A(k,_);break}}}async function Lu(D,u,C,F,E,A,B){let $,K,X=A.length>0,G=A.includes("dash"),Y=A.includes("hls");if(X){if($=await Y8(D,u,C,F,E,B),!G)$=void 0}if(Y)K=await U8(u,C,F,E.length>1,B);return{manifestPath:$,hlsManifestPath:K}}async function U8(D,u,C,F,E){let A=L(D,"master.m3u8"),B=[];for(let G of u){let Y=F?`${G.name}-h264`:G.name,Z=L(D,Y),k=await Ou(Z),_=k.filter((z)=>z.endsWith(".m4s")).sort((z,j)=>{let O=parseInt(z.match(/_(\d+)\.m4s$/)?.[1]||"0"),x=parseInt(j.match(/_(\d+)\.m4s$/)?.[1]||"0");return O-x}),J=k.find((z)=>z.endsWith("_.mp4"));if(!J||_.length===0)continue;let N=fD(_,J,C),U=L(Z,"playlist.m3u8");await gD(U,N,"utf-8");let W=parseInt(G.videoBitrate)*1000;B.push({path:`${Y}/playlist.m3u8`,bandwidth:W,resolution:`${G.width}x${G.height}`,fps:G.fps||30})}let $,K=[];if(E){let G=L(D,"audio"),Y=[];try{Y=await Ou(G)}catch{Y=[]}if(K=Y.filter((Z)=>Z.endsWith(".m4s")).sort((Z,k)=>{let _=parseInt(Z.match(/_(\d+)\.m4s$/)?.[1]||"0"),J=parseInt(k.match(/_(\d+)\.m4s$/)?.[1]||"0");return _-J}),$=Y.find((Z)=>Z.endsWith("_.mp4")),$&&K.length>0){let Z=fD(K,$,C);await gD(L(G,"playlist.m3u8"),Z,"utf-8")}}let X=Mu(B,E&&$!==void 0&&K.length>0);return await gD(A,X,"utf-8"),A}async function mD(D){let{input:u,outputDir:C,segmentDuration:F=2,profiles:E,customProfiles:A,codec:B=["h264"],formats:$=["dash","hls"],hardwareDecoder:K,hardwareAccelerator:X,quality:G,generateThumbnails:Y=!0,thumbnailConfig:Z={},generatePoster:k=!0,posterTimecode:_="00:00:00",parallel:J=!0,muted:N=!1,onProgress:U}=D,W=zD("/tmp",`dash-converter-${W8()}`);await n(W);let z=ju(u,Tu(u)),j=zD(C,z);await n(j);let O=zD(j,"conversion.log");SD(O);let{writeFile:x}=await import("node:fs/promises"),T=`===========================================
DASH Conversion Log
Started: ${new Date().toISOString()}
Input: ${u}
Output: ${j}
Codec: ${Array.isArray(B)?B.join(","):B}
Formats: ${$?.join(",")||"dash,hls"}
===========================================
`;await x(O,T,"utf-8");try{return await N8(u,C,W,F,E,A,B,$,X,K,G,Y,Z,k,_,J,N,U)}finally{let{appendFile:l}=await import("node:fs/promises");try{await l(O,`
Completed: ${new Date().toISOString()}
`,"utf-8")}catch(p){}try{await wu(W,{recursive:!0,force:!0})}catch(p){console.warn(`Warning: Failed to cleanup temp directory: ${W}`)}}}async function N8(D,u,C,F,E,A,B,$,K,X,G,Y,Z,k,_,J,N,U){if(!await r())throw Error("FFmpeg is not installed or not in PATH");if(!await o())throw Error("MP4Box is not installed or not in PATH. Install gpac package.");let W=(q,V,TD,wD)=>{if(U)U({stage:q,percent:V,message:TD,currentProfile:wD})};W("analyzing",0,"Analyzing input video...");let z=await DD(D),j=!N&&z.hasAudio,O=z.duration,x=Math.max(1,Math.ceil(O/F)),T=O/x,l=K&&K!=="auto"?K:"auto",p=await t(),OD=await e(),LD=p.some((q)=>q.av1Encoder),AD=Array.isArray(B)?B:[B],ZD=AD.includes("h264"),RD=AD.includes("av1"),{selected:YD,h264Encoder:SF,av1Encoder:bF,warnings:Cu}=k8(p,l,ZD,RD);if(Cu.length>0)for(let q of Cu)console.warn(`⚠️ ${q}`);let{selected:GD}=Q8(OD,X||"auto");if(RD&&!LD)console.warn("⚠️ AV1 hardware encoder not detected. AV1 will use CPU encoder (slow).");let P=[];if(ZD)P.push("h264");if(RD)P.push("av1");if(P.length===0)P.push("h264");let Bu=$&&$.length>0?Array.from(new Set($)):["dash","hls"],R;if(A&&A.length>0){let q=_D(A,z.width,z.height,z.fps,z.videoBitrate);if(q.errors.length>0){console.warn(`
❌ Profile errors:`);for(let V of q.errors)console.warn(` - ${V}`);console.warn("")}if(q.warnings.length>0){console.warn(`
⚠️ Profile warnings:`);for(let V of q.warnings)console.warn(` - ${V}`);console.warn("")}if(R=q.profiles,R.length===0)throw Error("No valid profiles found in custom list. Check errors above.")}else if(E)R=E;else R=KD(z.width,z.height,z.fps,z.videoBitrate);if(R.length===0)throw Error("No suitable profiles found for input video resolution");let vF=ju(D,Tu(D)),$D=zD(u,vF);try{await wu($D,{recursive:!0,force:!0})}catch(q){}await n($D);let h=[];if(P.includes("h264")){let q=SF||"libx264",V=Ru(q,"h264");h.push({type:"h264",codec:q,preset:V})}if(P.includes("av1")){let q=bF||"libsvtav1",V=Ru(q,"av1");h.push({type:"av1",codec:q,preset:V})}let PF=h.map((q)=>q.type.toUpperCase()).join(" + "),hF=YD==="cpu"?"CPU":YD.toUpperCase();W("analyzing",20,`Using ${PF} encoding (${hF}, decoder ${GD.toUpperCase()})`,void 0);let fF=YD==="cpu"?2:3,jD=new Map;for(let q=0;q<h.length;q++){let{type:V,codec:TD,preset:wD}=h[q],Ku=q/h.length,cF=1/h.length;W("encoding",25+Ku*40,`Stage 1: Encoding ${V.toUpperCase()} (${R.length} profiles)...`);let lF=V==="h264"?G?.h264:G?.av1,pF=await Iu(D,C,R,TD,wD,z.duration,T,z.audioBitrate,J,fF,V,lF,void 0,N,GD==="cpu"?void 0:GD,(JD,Xu)=>{let U3=R.findIndex((dF)=>dF.name===JD),Yu=25+Ku*40,Gu=Xu/100*(40*cF/R.length);if(W("encoding",Yu+Gu,`Encoding ${V.toUpperCase()} ${JD}...`,`${V}-${JD}`),U)U({stage:"encoding",percent:Yu+Gu,currentProfile:`${V}-${JD}`,profilePercent:Xu,message:`Encoding ${V.toUpperCase()} ${JD}...`})});jD.set(V,pF)}W("encoding",65,"Stage 1 complete: All codecs and profiles encoded"),W("encoding",70,"Stage 2: Creating segments and manifests...");let{manifestPath:gF,hlsManifestPath:mF}=await Lu(jD,$D,R,T,P,Bu,j),Au=[];for(let q of jD.values())Au.push(...Array.from(q.values()));W("encoding",80,"Stage 2 complete: All formats packaged");let Zu,$u;if(Y){W("thumbnails",80,"Generating thumbnail sprites...");let q={width:Z.width||160,height:Z.height||90,interval:Z.interval||1,columns:Z.columns||10},V=await zu(D,$D,z.duration,q);Zu=V.spritePath,$u=V.vttPath,W("thumbnails",90,"Thumbnails generated")}let Ju;if(k)W("thumbnails",92,"Generating poster image..."),Ju=await _u(D,$D,_),W("thumbnails",95,"Poster generated");return W("manifest",95,"Finalizing..."),W("complete",100,"Conversion complete!"),{manifestPath:gF,hlsManifestPath:mF,videoPaths:Au,thumbnailSpritePath:Zu,thumbnailVttPath:$u,posterPath:Ju,duration:z.duration,profiles:R,usedNvenc:h.some((q)=>q.codec.includes("nvenc")),selectedAccelerator:YD,selectedDecoder:GD,codecs:P,formats:Bu}}var uD={nvenc:100,qsv:90,amf:80,vaapi:70,videotoolbox:65,v4l2:60,cpu:1};function k8(D,u,C,F){let E=[],A=new Set(["nvenc","qsv","amf","vaapi","videotoolbox","v4l2"]),B=D.filter((N)=>C&&N.h264Encoder||F&&N.av1Encoder),$=B.filter((N)=>A.has(N.accelerator)),K=(N)=>B.find((U)=>U.accelerator===N);if(u==="cpu")return{selected:"cpu",h264Encoder:void 0,av1Encoder:void 0,warnings:E};let X;if(u!=="auto"){if(!A.has(u))E.push(`Ускоритель "${u}" пока не поддерживается, использую CPU`);else if(X=K(u),!X)throw Error(`Аппаратный ускоритель "${u}" недоступен в системе`)}else if(X=($.length>0?$:[]).sort((U,W)=>(uD[W.accelerator]||0)-(uD[U.accelerator]||0))[0],!X&&B.length>0)E.push("Доступен аппаратный ускоритель, но он пока не поддерживается пайплайном, использую CPU");let Y=($.length>0?$:[]).sort((N,U)=>(uD[U.accelerator]||0)-(uD[N.accelerator]||0)),Z=(N)=>{let U=N==="h264"?X?.h264Encoder:X?.av1Encoder;if(U)return{encoder:U,accel:X?.accelerator};let W=Y.find((z)=>N==="h264"?z.h264Encoder:z.av1Encoder);if(W){if(u!=="auto"&&X)E.push(`Выбранный ускоритель "${X.accelerator}" не поддерживает ${N.toUpperCase()}, использую ${W.accelerator}`);return{encoder:N==="h264"?W.h264Encoder:W.av1Encoder,accel:W.accelerator}}if(u!=="auto")E.push(`Ускоритель "${u}" не поддерживает ${N.toUpperCase()}, использую CPU`);return{encoder:void 0,accel:"cpu"}},k=C?Z("h264"):{encoder:void 0,accel:X?.accelerator},_=F?Z("av1"):{encoder:void 0,accel:X?.accelerator};return{selected:X?.accelerator||k.accel||_.accel||"cpu",h264Encoder:k.encoder,av1Encoder:_.encoder,warnings:E}}function Q8(D,u){let C=new Set(["nvenc","qsv","vaapi","videotoolbox","v4l2"]),F=(B)=>D.find(($)=>$.accelerator===B);if(u!=="auto"){if(u==="cpu")return{selected:"cpu"};let B=F(u);return{selected:B?B.accelerator:"cpu"}}let E=D.filter((B)=>C.has(B.accelerator));if(E.length===0)return{selected:"cpu"};return{selected:E.sort((B,$)=>(uD[$.accelerator]||0)-(uD[B.accelerator]||0))[0].accelerator}}function Ru(D,u){if(D.includes("nvenc"))return"p4";if(D.includes("qsv"))return"medium";if(D.includes("amf"))return"balanced";if(D.includes("vaapi"))return"5";if(D.includes("videotoolbox"))return"medium";if(D.includes("v4l2"))return"medium";if(D==="libsvtav1")return"8";if(D==="libx264")return"medium";return u==="av1"?"8":"medium"}var tD=UD(kF(),1);import{statSync as s8}from"node:fs";var Q=process.argv.slice(2),XD,Du,VD,uu=[],w,y,S,b,FD,ED,Fu=!1;for(let D=0;D<Q.length;D++)if(Q[D]==="-r"||Q[D]==="--resolutions"){let u=[];for(let F=D+1;F<Q.length;F++){if(Q[F].startsWith("-"))break;u.push(Q[F]),D=F}XD=u.join(",").split(/[,\s]+/).map((F)=>F.trim()).filter((F)=>F.length>0)}else if(Q[D]==="-p"||Q[D]==="--poster")Du=Q[D+1],D++;else if(Q[D]==="-c"||Q[D]==="--codec"){let C=Q[D+1].split(/[,\s]+/).map((E)=>E.trim()).filter(Boolean),F=new Set(["h264","av1"]);for(let E of C)if(!F.has(E))console.error(`❌ Invalid codec: ${E}. Valid options: av1, h264`),process.exit(1);VD=Array.from(new Set(C)),D++}else if(Q[D]==="--h264-cq"){if(w=parseInt(Q[D+1]),isNaN(w)||w<0||w>51)console.error(`❌ Invalid H.264 CQ value: ${Q[D+1]}. Must be 0-51`),process.exit(1);D++}else if(Q[D]==="--h264-crf"){if(y=parseInt(Q[D+1]),isNaN(y)||y<0||y>51)console.error(`❌ Invalid H.264 CRF value: ${Q[D+1]}. Must be 0-51`),process.exit(1);D++}else if(Q[D]==="--av1-cq"){if(S=parseInt(Q[D+1]),isNaN(S)||S<0||S>51)console.error(`❌ Invalid AV1 CQ value: ${Q[D+1]}. Must be 0-51`),process.exit(1);D++}else if(Q[D]==="--av1-crf"){if(b=parseInt(Q[D+1]),isNaN(b)||b<0||b>63)console.error(`❌ Invalid AV1 CRF value: ${Q[D+1]}. Must be 0-63`),process.exit(1);D++}else if(Q[D]==="-e"||Q[D]==="--encoder"){let u=Q[D+1];if(!["auto","nvenc","qsv","amf","cpu","vaapi","videotoolbox","v4l2"].includes(u))console.error(`❌ Invalid accelerator: ${u}. Valid: auto, nvenc, qsv, amf, vaapi, videotoolbox, v4l2, cpu`),process.exit(1);FD=u,D++}else if(Q[D]==="-d"||Q[D]==="--decoder"){let u=Q[D+1];if(!["auto","nvenc","qsv","amf","vaapi","videotoolbox","v4l2","cpu"].includes(u))console.error(`❌ Invalid decoder: ${u}. Valid: auto, nvenc, qsv, amf, vaapi, videotoolbox, v4l2, cpu`),process.exit(1);ED=u,D++}else if(Q[D]==="-m"||Q[D]==="--muted")Fu=!0;else if(!Q[D].startsWith("-"))uu.push(Q[D]);var a=uu[0],HF=uu[1]||".";if(!a)console.error("❌ Usage: create-vod <input-video> [output-dir] [options]"),console.error(`
Options:`),console.error(" -r, --resolutions Video resolutions (e.g., 360,480,720 or 720@60,1080@60)"),console.error(" -c, --codec Video codec: av1 or h264 (default: auto = h264 + AV1 if HW)"),console.error(" -f, --format Streaming format: dash or hls (default: auto = dash + hls)"),console.error(" -p, --poster Poster timecode (e.g., 00:00:05 or 10)"),console.error(" -e, --encoder <type> Hardware encoder: auto|nvenc|qsv|amf|vaapi|videotoolbox|v4l2|cpu (default: auto)"),console.error(" -d, --decoder <type> Hardware decoder: auto|nvenc|qsv|amf|vaapi|videotoolbox|v4l2|cpu (default: auto)"),console.error(" -m, --muted Disable audio track (no audio in output)"),console.error(`
Quality Options (override defaults):`),console.error(" --h264-cq <value> H.264 GPU CQ value (0-51, lower = better, default: auto)"),console.error(" --h264-crf <value> H.264 CPU CRF value (0-51, lower = better, default: auto)"),console.error(" --av1-cq <value> AV1 GPU CQ value (0-51, lower = better, default: auto)"),console.error(" --av1-crf <value> AV1 CPU CRF value (0-63, lower = better, default: auto)"),console.error(`
Examples:`),console.error(" create-vod video.mp4"),console.error(" create-vod video.mp4 ./output"),console.error(" create-vod video.mp4 -r 360,480,720"),console.error(" create-vod video.mp4 -c av1 --av1-cq 40"),console.error(" create-vod video.mp4 -c h264 --h264-cq 30"),console.error(" create-vod video.mp4 -f hls"),console.error(" create-vod video.mp4 -r 720@60,1080@60,2160@60 -c av1 -f dash"),console.error(" create-vod video.mp4 -p 00:00:05"),console.error(" create-vod video.mp4 ./output -r 720,1080 -p 10 --h264-cq 28"),process.exit(1);console.log(`\uD83D\uDD0D Checking system...
`);var xF=await r(),MF=await o(),OF=await t(),a8=await e(),i8=OF.some((D)=>D.av1Encoder),HD={nvenc:100,qsv:90,amf:80,vaapi:70,videotoolbox:65,v4l2:60,cpu:1},r8={nvenc:"h264_nvenc",qsv:"h264_qsv",amf:"h264_amf",vaapi:"h264_vaapi",videotoolbox:"h264_videotoolbox",v4l2:"h264_v4l2m2m",cpu:"libx264"},o8=Array.from(new Set([...OF.map((D)=>D.accelerator),"cpu"])),t8=Array.from(new Set([...a8.map((D)=>D.accelerator),"cpu"]));async function e8(){let D=[];for(let u of o8){if(u==="amf")continue;let C=r8[u]||"libx264";if(await WD(C))D.push(u)}return D}async function D3(){let D=[];for(let u of t8){if(u==="cpu"){D.push("cpu");continue}if(await ND(u,a))D.push(u)}return D}var LF=await e8(),RF=await D3(),CD=LF.slice().sort((D,u)=>(HD[u]||0)-(HD[D]||0))[0],BD=RF.slice().sort((D,u)=>(HD[u]||0)-(HD[D]||0))[0];console.log(`FFmpeg: ${xF?"✅":"❌"}`);console.log(`MP4Box: ${MF?"✅":"❌"}`);var QF=Array.from(new Set(LF.map((D)=>D.toUpperCase()))),_F=Array.from(new Set(RF.map((D)=>D.toUpperCase()))),zF=FD?FD.toUpperCase():CD&&CD.toUpperCase()||"CPU",jF=QF.length>0?QF:["CPU"],qF=ED?ED.toUpperCase():BD&&BD.toUpperCase()||"CPU",TF=_F.length>0?_F:["CPU"];console.log(`Encoder: ${zF==="AUTO"?CD&&CD.toUpperCase()||"CPU":zF} (${jF.join(", ")})`);console.log(`Decoder: ${qF==="AUTO"?BD&&BD.toUpperCase()||"CPU":qF} (${TF.join(", ")})`);console.log("");if(!xF)console.error("❌ FFmpeg not found. Please install FFmpeg first."),process.exit(1);if(!MF)console.error("❌ MP4Box not found. Please install: sudo pacman -S gpac"),process.exit(1);var Eu=VD&&VD.length>0?VD:["h264"],xD=Eu.includes("h264"),MD=Eu.includes("av1");if(!xD)console.warn("⚠️ H.264 is mandatory for compatibility. Adding H.264."),xD=!0;if(MD&&!i8)console.error("⚠️ AV1 requested but no hardware AV1 encoder found."),console.error(" CPU-based AV1 encoding (libsvtav1) will be VERY slow."),console.error(` Consider using --codec h264 for faster encoding.
`);var u3=!0,F3=!0;console.log(`\uD83D\uDCCA Analyzing video...
`);var M=await DD(a),E3=s8(a),C3=(E3.size/1048576).toFixed(2);console.log("\uD83D\uDCF9 Video Information:");console.log(` File: ${a}`);console.log(` Size: ${C3} MB`);console.log(` Resolution: ${M.width}x${M.height}`);console.log(` FPS: ${M.fps.toFixed(2)}`);console.log(` Duration: ${M.duration.toFixed(2)}s`);console.log(` Codec: ${M.codec}`);if(M.videoBitrate)console.log(` Video Bitrate: ${(M.videoBitrate/1000).toFixed(2)} Mbps`);if(M.audioBitrate)console.log(` Audio Bitrate: ${M.audioBitrate} kbps`);var eD=[];if(XD&&XD.length>0){let D=_D(XD,M.width,M.height,M.fps,M.videoBitrate);if(D.errors.length>0)console.error(`
❌ Profile errors:`),D.errors.forEach((u)=>console.error(` - ${u}`)),process.exit(1);if(D.warnings.length>0)console.warn(`
⚠️ Profile warnings:`),D.warnings.forEach((u)=>console.warn(` - ${u}`));eD=D.profiles.map((u)=>u.fps?`${u.name}@${u.fps}`:u.name)}else eD=KD(M.width,M.height,M.fps,M.videoBitrate).map((u)=>u.fps?`${u.name}@${u.fps}`:u.name);var B3=[u3?"DASH (manifest.mpd)":null,F3?"HLS (master.m3u8)":null].filter(Boolean).join(", "),A3=!0,Z3=Du||"00:00:00",$3=[xD?"h264":null,MD?"av1":null].filter(Boolean).join(", "),J3=!MD&&Eu.includes("av1")?" (AV1 disabled: no HW)":"",wF=CD&&CD.toUpperCase()||"CPU",yF=BD&&BD.toUpperCase()||"CPU",IF=FD?FD.toUpperCase():wF,VF=ED?ED.toUpperCase():yF,K3=IF==="AUTO"?wF:IF,X3=VF==="AUTO"?yF:VF,Y3=jF.join(", "),G3=TF.join(", ");console.log(`
\uD83D\uDCE6 Parameters:`);console.log(` Input: ${a}`);console.log(` Output: ${HF}`);console.log(` Codec: ${$3}${J3}`);console.log(` Profiles: ${eD.join(", ")}`);console.log(` Manifests: ${B3}`);console.log(` Poster: ${Z3} (will be generated)`);console.log(` Thumbnails: ${A3?"yes (with VTT)":"no"}`);console.log(` Encoder: ${K3} (available: ${Y3})`);console.log(` Decoder: ${X3} (available: ${G3})`);console.log(` Audio: ${Fu?"disabled (muted)":"enabled"}`);var c;if(w!==void 0||y!==void 0||S!==void 0||b!==void 0){if(c={},w!==void 0||y!==void 0){if(c.h264={},w!==void 0)c.h264.cq=w;if(y!==void 0)c.h264.crf=y;console.log(`\uD83C\uDF9A H.264 Quality: ${w!==void 0?`CQ ${w}`:""}${y!==void 0?` CRF ${y}`:""}`)}if(S!==void 0||b!==void 0){if(c.av1={},S!==void 0)c.av1.cq=S;if(b!==void 0)c.av1.crf=b;console.log(`\uD83C\uDF9A AV1 Quality: ${S!==void 0?`CQ ${S}`:""}${b!==void 0?` CRF ${b}`:""}`)}}console.log(`
\uD83D\uDE80 Starting conversion...
`);var ID=new tD.default.MultiBar({format:"{stage} | {bar} | {percentage}% | {name}",barCompleteChar:"█",barIncompleteChar:"░",hideCursor:!0,clearOnComplete:!1,stopOnComplete:!0},tD.default.Presets.shades_classic),rD={},oD=null;try{let D=Date.now(),u=await mD({input:a,outputDir:HF,customProfiles:XD,posterTimecode:Du,codec:[...xD?["h264"]:[],...MD?["av1"]:[]],segmentDuration:2,hardwareAccelerator:FD,hardwareDecoder:ED,quality:c,generateThumbnails:!0,generatePoster:!0,muted:Fu,parallel:!0,onProgress:(E)=>{let A=E.stage==="encoding"?"Encoding":E.stage==="thumbnails"?"Thumbnails":E.stage==="manifest"?"Manifest":E.stage==="analyzing"?"Analyzing":"Complete";if(E.stage==="encoding"&&E.currentProfile){if(!rD[E.currentProfile])rD[E.currentProfile]=ID.create(100,0,{stage:"Encode",name:E.currentProfile});let B=E.profilePercent??E.percent;rD[E.currentProfile].update(B,{stage:"Encode",name:E.currentProfile})}if(!oD)oD=ID.create(100,0,{stage:A,name:"Overall"});oD.update(E.percent,{stage:A,name:E.message||"Overall"})}});ID.stop();let F=((Date.now()-D)/1000).toFixed(2);console.log(`
✅ Conversion completed successfully! (${F}s)
`)}catch(D){ID.stop(),console.error(`
❌ Error during conversion:`),console.error(D),process.exit(1)}