UNPKG

get-tracks-data

Version:

Get video / audio / subtitles tracks from MKV and MP4 files.

1 lines 16.4 kB
"use strict";function e(e,n){if(n==null||n>e.length)n=e.length;for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function n(e){if(Array.isArray(e))return e}function t(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function r(e,n,t,r,a,u,i){try{var o=e[u](i);var f=o.value}catch(e){t(e);return}if(o.done){n(f)}else{Promise.resolve(f).then(r,a)}}function a(e){return function(){var n=this,t=arguments;return new Promise(function(a,u){var i=e.apply(n,t);function o(e){r(i,a,u,o,f,"next",e)}function f(e){r(i,a,u,o,f,"throw",e)}o(undefined)})}}function u(e,n){if(!(e instanceof n)){throw new TypeError("Cannot call a class as a function")}}function i(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}function o(e,n,t){if(n)i(e.prototype,n);if(t)i(e,t);return e}function f(e){f=Object.setPrototypeOf?Object.getPrototypeOf:function e(e){return e.__proto__||Object.getPrototypeOf(e)};return f(e)}function c(e,n){if(typeof n!=="function"&&n!==null){throw new TypeError("Super expression must either be null or a function")}e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,writable:true,configurable:true}});if(n)v(e,n)}function l(e,n){var t=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(t==null)return;var r=[];var a=true;var u=false;var i,o;try{for(t=t.call(e);!(a=(i=t.next()).done);a=true){r.push(i.value);if(n&&r.length===n)break}}catch(e){u=true;o=e}finally{try{if(!a&&t["return"]!=null)t["return"]()}finally{if(u)throw o}}return r}function s(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function d(e,n){if(n&&(y(n)==="object"||typeof n==="function")){return n}return t(e)}function v(e,n){v=Object.setPrototypeOf||function e(e,n){e.__proto__=n;return e};return v(e,n)}function h(e,t){return n(e)||l(e,t)||p(e,t)||s()}function y(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function p(n,t){if(!n)return;if(typeof n==="string")return e(n,t);var r=Object.prototype.toString.call(n).slice(8,-1);if(r==="Object"&&n.constructor)r=n.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(n,t)}function m(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function b(e){var n=m();return function t(){var t=f(e),r;if(n){var a=f(this).constructor;r=Reflect.construct(t,arguments,a)}else{r=t.apply(this,arguments)}return d(this,r)}}function g(e,n){var t,r,a,u,i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]};return u={next:o(0),"throw":o(1),"return":o(2)},typeof Symbol==="function"&&(u[Symbol.iterator]=function(){return this}),u;function o(e){return function(n){return f([e,n])}}function f(u){if(t)throw new TypeError("Generator is already executing.");while(i)try{if(t=1,r&&(a=u[0]&2?r["return"]:u[0]?r["throw"]||((a=r["return"])&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;if(r=0,a)u=[u[0]&2,a.value];switch(u[0]){case 0:case 1:a=u;break;case 4:i.label++;return{value:u[1],done:false};case 5:i.label++;r=u[1];u=[0];continue;case 7:u=i.ops.pop();i.trys.pop();continue;default:if(!(a=i.trys,a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){i=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]<a[3])){i.label=u[1];break}if(u[0]===6&&i.label<a[1]){i.label=a[1];a=u;break}if(a&&i.label<a[2]){i.label=a[2];i.ops.push(u);break}if(a[2])i.ops.pop();i.trys.pop();continue}u=n.call(e,i)}catch(e){u=[6,e];r=0}finally{t=a=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:true}}}var w=Object.create;var S=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var B=function(e,n,t){return n in e?S(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t};var R=function(e,n){for(var t in n)S(e,t,{get:n[t],enumerable:!0})},x=function(e,n,t,r){var a=true,u=false,i=undefined;if(n&&(typeof n==="undefined"?"undefined":y(n))=="object"||typeof n=="function")try{var o=function(){var a=c.value;!_.call(e,a)&&a!==t&&S(e,a,{get:function(){return n[a]},enumerable:!(r=k(n,a))||r.enumerable})};for(var f=O(n)[Symbol.iterator](),c;!(a=(c=f.next()).done);a=true)o()}catch(e){u=true;i=e}finally{try{if(!a&&f.return!=null){f.return()}}finally{if(u){throw i}}}return e};var z=function(e,n,t){return t=e!=null?w(P(e)):{},x(n||!e||!e.__esModule?S(t,"default",{value:e,enumerable:!0}):t,e)},T=function(e){return x(S({},"__esModule",{value:!0}),e)};var j=function(e,n,t){return B(e,(typeof n==="undefined"?"undefined":y(n))!="symbol"?n+"":n,t)};var E={};R(E,{default:function(){return ex}});module.exports=T(E);var I=z(require("fs"),1),C=require("stream"),L=z(require("follow-redirects"),1);var A=L.default.http,U=L.default.https,q=/bytes (\d+)-(\d+)\/(\d+)/,D=function(e){return e.startsWith("http://")||e.startsWith("https://")},M=function(e){c(r,e);var n=b(r);function r(e){u(this,r);var i;i=n.call(this);j(t(i),"url");j(t(i),"contentLength");j(t(i),"bytesRead");j(t(i),"bytesOffset");j(t(i),"chunkSize");j(t(i),"_request",function(e){return new Promise(function(n,t){var r=h(i.url.split("//"),1),a=r[0],u={range:"bytes=".concat(e[0],"-").concat(e[1])};(a==="http:"?A:U).get(i.url,{headers:u},n).on("error",t)})});var o=t(i);j(t(i),"_requestRange",function(){var e=a(function(e){var n,t,r,a,u,i,f;return g(this,function(c){switch(c.label){case 0:return[4,o._request(e)];case 1:t=c.sent();o.url=t.responseUrl;r=function(e){return t.destroy(),Promise.reject(e)},a=(n=t.headers)===null||n===void 0?void 0:n["content-range"];if(!a)return[2,r("Failed to retrieve Content-Range from headers")];u=q.exec(a);if(!u)return[2,r("Failed to parse range from Content-Range header")];i=h(u,4),f=i[3];return[2,f?new Promise(function(e,n){var r=[];t.on("data",function(e){r.push(e)}),t.on("end",function(){e([Buffer.concat(r),parseInt(f)])}),t.on("error",n)}):r("Failed to parse length from Content-Range header")]}})});return function(n){return e.apply(this,arguments)}}());i.url=e,i.contentLength=i.readableHighWaterMark,i.bytesRead=0,i.bytesOffset=0,i.chunkSize=i.readableHighWaterMark;return i}o(r,[{key:"_read",value:function e(){var e=this;return a(function(){var n,t,r,a,u,i,o;return g(this,function(f){switch(f.label){case 0:f.trys.push([0,2,,3]);n=e.bytesOffset,t=Math.min(e.contentLength,e.bytesOffset+e.chunkSize)-1,r=[n,t];return[4,e._requestRange(r)];case 1:a=h.apply(void 0,[f.sent(),2]),u=a[0],i=a[1];e.contentLength=i,e.bytesRead+=u.length,e.bytesOffset=u.length,e.push(u);return[3,3];case 2:o=f.sent();e.emit("error",o),e.push(null);return[3,3];case 3:return[2]}})})()}}]);return r}(C.Readable),N=function(e){c(r,e);var n=b(r);function r(e){u(this,r);var i;i=n.call(this);j(t(i),"path");j(t(i),"fileSize");j(t(i),"bytesRead");j(t(i),"bytesOffset");j(t(i),"chunkSize");var o=t(i);j(t(i),"_requestRange",function(){var e=a(function(e){return g(this,function(n){return[2,new Promise(function(n,t){var r=[],a=I.default.createReadStream(o.path,{start:e[0],end:e[1]});a.on("data",function(e){r.push(e)}),a.on("end",function(){n(Buffer.concat(r))}),a.on("error",t)})]})});return function(n){return e.apply(this,arguments)}}());var f=I.default.statSync(e);i.path=e,i.fileSize=f.size,i.bytesRead=0,i.bytesOffset=0,i.chunkSize=i.readableHighWaterMark;return i}o(r,[{key:"_read",value:function e(){var e=this;return a(function(){var n,t,r,a,u;return g(this,function(i){switch(i.label){case 0:i.trys.push([0,2,,3]);n=e.bytesOffset,t=Math.min(e.fileSize,e.bytesOffset+e.chunkSize)-1,r=[n,t];return[4,e._requestRange(r)];case 1:a=i.sent();e.bytesRead+=a.length,e.bytesOffset=a.length,e.push(a);return[3,3];case 2:u=i.sent();e.emit("error",u),e.push(null);return[3,3];case 3:return[2]}})})()}}]);return r}(C.Readable),F=function(){var e=a(function(e){return g(this,function(n){return[2,D(e)?new M(e):new N(e)]})});return function n(n){return e.apply(this,arguments)}}();var H=function(){function e(n,t){u(this,e);j(this,"signature");j(this,"signatureOffset");this.signature=n,this.signatureOffset=t}o(e,[{key:"compare",value:function e(e){var n=Buffer.from(this.signature,"hex"),t=e.subarray(this.signatureOffset,n.length+this.signatureOffset);return Buffer.compare(n,t)===0}},{key:"decode",value:function e(e,n){var t=this;return a(function(){var r,a;return g(this,function(u){switch(u.label){case 0:u.trys.push([0,2,,3]);return[4,t._decode(e,n)];case 1:r=u.sent();return[2,Promise.resolve(r)];case 2:a=u.sent();return[2,(console.error(a),Promise.reject("Failed to decode buffer"))];case 3:return[2]}})})()}},{key:"format",value:function e(e){var n=this;return a(function(){var t,r;return g(this,function(a){switch(a.label){case 0:a.trys.push([0,2,,3]);return[4,n._format(e)];case 1:t=a.sent();return[2,Promise.resolve(t)];case 2:r=a.sent();return[2,(console.error(r),Promise.reject("Failed to decode buffer"))];case 3:return[2]}})})()}}]);return e}();var W=function(e){return e.toString(2).padStart(8,"0")},V=function(e){return parseInt(e,2)},G=function(e){return parseInt(e.toString("hex"),16)},$=function(e,n,t){return e.subarray(n,n+t).toString("hex").toUpperCase()};var J={18538067:"Segment","1654AE6B":"Tracks",AE:"TrackEntry",D7:"TrackNumber",83:"TrackType","22B59C":"Language","22B59D":"LanguageBCP47","536E":"Name",86:"CodecID"},K=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e[n],r=W(t),a=r.indexOf("1")+1,u=e.subarray(n,n+a),i=r.substring(a,r.length);for(var o=1;o<u.length;o++)i+=W(u[o]);return{value:V(i),length:a}},Q=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t;var r=K(e,n),a=K(e,n+r.length),u=n+r.length+a.length,i=e.subarray(u,u+a.value),o=$(e,n,r.length),f=(t=J[o])!==null&&t!==void 0?t:o,c=r.length+a.length+a.value;return{name:f,size:c,data:i,dataSize:a.value,offset:n}},X=function(e){var n=[];for(var t=0;t<e.length;){var r=Q(e,t);n.push(r),t+=r.size}return n};var Y=function(e){if(!e)return null;var n=e.data;return G(n)},Z=function(e){if(!e)return null;var n=e.data;return er[G(n)]},ee=function(e){if(!e)return null;var n=e.data.toString();return n==="und"?null:n},en=function(e){return e?e.data.toString():null},et=function(e){return e?e.data.toString().replace("V_","").replace("A_","").replace("S_",""):null},er={1:"video",2:"audio",17:"text"},ea="1A45DFA3",eu=0,ei=function(e){c(t,e);var n=b(t);function t(){u(this,t);return n.call(this,ea,eu)}o(t,[{key:"_decode",value:function e(e){return new Promise(function(n,t){var r=X(e).find(function(e){var n=e.name;return n==="Segment"});if(!r)return t();var a=X(r.data).find(function(e){var n=e.name;return n==="Tracks"});if(!a)return t();n(a)})}},{key:"_format",value:function e(e){return new Promise(function(n,t){var r=X(e.data).filter(function(e){var n=e.name;return n==="TrackEntry"});if(!r)return t();var a=r.map(function(e){return X(e.data)}).map(function(e){var n=e.find(function(e){var n=e.name;return n==="TrackNumber"}),t=e.find(function(e){var n=e.name;return n==="TrackType"}),r=e.find(function(e){var n=e.name;return n==="Language"}),a=e.find(function(e){var n=e.name;return n==="LanguageBCP47"}),u=e.find(function(e){var n=e.name;return n==="Name"}),i=e.find(function(e){var n=e.name;return n==="CodecID"});return{trackNumber:n,trackType:t,language:r,languageBCP47:a,name:u,codecID:i}}).map(function(e){var n=e.trackNumber,t=e.trackType,r=e.language,a=e.languageBCP47,u=e.name,i=e.codecID;var o;var f=Y(n),c=Z(t),l=(o=ee(r))!==null&&o!==void 0?o:ee(a),s=en(u),d=et(i);return{id:f,type:c,lang:l,label:s,codec:d}});n(a)})}}]);return t}(H),eo=ei;var ef=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e[n],r=e.readUInt32BE(n+4),a=e.readUInt32BE(n+8),u=e.readUInt32BE(n+12);return{version:t,creationTime:r,modificationTime:a,id:u,offset:n}},ec=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e[n],r=n+(t===1?32:20),a=e.readUInt16BE(r),u=[];u[0]=a>>10&31,u[1]=a>>5&31,u[2]=a&31;var i=String.fromCharCode(u[0]+96,u[1]+96,u[2]+96);return{version:t,language:i,offset:n}},el=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e[n],r=n+4+4,a=e.subarray(r,r+4).toString(),u=r+4+12,i=e.subarray(u,e.length-1).toString();return{version:t,handlerType:a,name:i,offset:n}},es=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e[n],r=e.readUInt32BE(n+4),a=[];for(var u=1;u<r+1;u++){var i=e.readUInt32BE(n+8*u),o=e.subarray(n+12*u,n+16*u).toString(),f=e.subarray(n+16*u,n+16*u+i);a.push({size:i,name:o,data:f})}return{version:t,samples:r,entries:a,offset:n}},ed=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var t=e.readUInt32BE(n),r=e.subarray(n+4,n+8).toString(),a=n+8,u=t===1?G(e.subarray(a,a+8)):null,i=n+8+(u?8:0),o=u!==null&&u!==void 0?u:t,f=e.subarray(i,t===1?e.length:n+t),c=o-8;return{name:r,size:o,data:f,dataSize:c,offset:n}},ev=function(e){var n=[];for(var t=0;t<e.length;){var r=ed(e,t);n.push(r),t+=r.size}return n};var eh="66747970",ey=4,ep={vide:"video",soun:"audio",text:"text",sbtl:"text"},em=["VideoHandler","SoundHandler","SubtitleHandler"],eb=["und","```"],eg=function(e){var n;return(n=ep[e.handlerType])!==null&&n!==void 0?n:null},ew=function(e){return eb.includes(e.language)?null:e.language},eS=function(e){return em.includes(e.name)?null:e.name.length?e.name:null},ek=function(e){var n,t;var r;return((r=e===null||e===void 0?void 0:(t=e.entries)===null||t===void 0?void 0:(n=t[0])===null||n===void 0?void 0:n.name)!==null&&r!==void 0?r:null).replace("-","").toUpperCase()},eO=function(e){c(r,e);var n=b(r);function r(){u(this,r);var e;e=n.call(this,eh,ey);j(t(e),"offset",0);return e}o(r,[{key:"_decode",value:function e(e,n){var t=this;return new Promise(function(r){var a=ev(e),u=a.find(function(e){var n=e.name;return n==="moov"}),i=a.slice().reverse().find(function(e){var n=e.name;return n!=="moov"});if(console.log(a),!u&&i)return t.offset+=i.offset+i.size,n(t.offset);if(u&&u.data.length!==u.dataSize)return t.offset+=u.offset,n(t.offset,u.size);if(u&&u.data.length===u.dataSize)return r(u)})}},{key:"_format",value:function e(e){return new Promise(function(n){var t=ev(e.data).filter(function(e){var n=e.name;return n==="trak"}).map(function(e){var n=ev(e.data),t=n.find(function(e){var n=e.name;return n==="tkhd"}),r=n.find(function(e){var n=e.name;return n==="mdia"});if(!t||!r)return null;var a=ef(t.data),u=ev(r.data),i=u.find(function(e){var n=e.name;return n==="mdhd"}),o=u.find(function(e){var n=e.name;return n==="hdlr"}),f=u.find(function(e){var n=e.name;return n==="minf"});if(!i||!o||!f)return null;var c=ec(i.data),l=el(o.data),s=ev(f.data).find(function(e){var n=e.name;return n==="stbl"});if(!s)return null;var d=ev(s.data).find(function(e){var n=e.name;return n==="stsd"});if(!d)return null;var v;var h=es(d.data),y=(v=a.id)!==null&&v!==void 0?v:null,p=eg(l),m=ew(c),b=eS(l),g=ek(h);return{id:y,type:p,lang:m,label:b,codec:g}}).filter(function(e){return e!==null});n(t)})}}]);return r}(H),eP=eO;var e_=15*1024*1024,eB=function(e,n){return e.find(function(e){return e.compare(n)})},eR=function(){var e=a(function(e,n){var t,r,u;return g(this,function(i){switch(i.label){case 0:return[4,F(e)];case 1:t=i.sent(),r=[new eo,new eP];return[2,new Promise(function(e,i){var o=function(e,n){t.pause(),t.bytesOffset=e,t.chunkSize=n!==null&&n!==void 0?n:e_,t.resume()},f=function(n){t.destroy(),u&&u.format(n).then(e).catch(c)},c=function(e){t.destroy(),i(e)},l=function(){var e=a(function(e){return g(this,function(a){if((n===null||n===void 0?void 0:n.maxBytesLimit)&&t.bytesRead>=n.maxBytesLimit)return[2,c("Reached maxBytesLimit of ".concat(n.maxBytesLimit))];if(u=u!==null&&u!==void 0?u:eB(r,e),!u)return[2,c("This file type is not supported")];u.decode(e,o).then(f).catch(c);return[2]})});return function n(n){return e.apply(this,arguments)}}();t.on("error",c).on("data",l)})]}})});return function n(n,t){return e.apply(this,arguments)}}(),ex=eR;