@soga/encoder 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,6 @@
1
1
  import { EncoderParams } from '../types/runtime';
2
+ import { WorkerError, WorkerPercent } from '../types/main';
3
+ import { WorkerEncodePrepare } from '@soga/types';
2
4
  export declare class Common {
3
5
  protected get file_size_limit(): number;
4
6
  params: EncoderParams;
@@ -14,5 +16,5 @@ export declare class Common {
14
16
  message: string;
15
17
  stack?: string;
16
18
  }): Promise<void>;
17
- private postMessage;
19
+ protected postMessage(data: WorkerPercent | WorkerError | WorkerEncodePrepare): Promise<void>;
18
20
  }
@@ -1 +1 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImgEncoder=void 0;const path_1=require("path"),common_1=require("../common/common"),sharp_1=__importDefault(require("sharp")),utils_1=require("@soga/utils"),types_1=require("@soga/types");class ImgEncoder extends common_1.Common{getCompressFileName(){return"img_compress.png"}getCompressFilePath(){return(0,path_1.resolve)(this.params.outputRoot,this.getCompressFileName())}getGzFileName(){return"preview_0"}getGzFilePath(){return(0,path_1.resolve)(this.params.outputRoot,this.getGzFileName())}async start(){try{return await this.compress(),await this.gzip(),await this.getData()}catch(t){await this.throwError({code:10400,message:t.message,stack:t.stack})}}async getData(){const t="img_encoder_get_data",e=await this.params.db.get(t);if(e)return e;const a=this.params.filePath,i=await(0,utils_1.getFileSize)(a),{width:s,height:r}=await(0,sharp_1.default)(a).metadata(),h=this.getCompressFilePath(),{width:o,height:p}=await(0,sharp_1.default)(h).metadata(),l=await(0,utils_1.getFileSize)(h),m=this.getGzFilePath(),n=await(0,utils_1.getFileSize)(m),u=await(0,utils_1.calculateMd5)({file:m,start:0,end:i-1}),c={start:0,end:n-1,size:i,file:this.getGzFileName(),path:m,index:0,md5:u};if(this.params.hosts.includes(types_1.HostType.BAIDU)){const t=await(0,utils_1.calculateMd4)({file:m,start:0,end:i-1});c.md4=t}if(this.params.hosts.includes(types_1.HostType.ALI)){const t=await(0,utils_1.calculateSha1)({file:m,start:0,end:i-1});c.sha1=t}const d={meta:{width:s,height:r,size:i,t_width:o,t_height:p,t_size:l},parts:[c]};return await this.params.db.put(t,d),d}async compress(){const t="img_encoder_compress";if(await this.params.db.get(t))return;const e=this.getCompressFilePath(),a=await(0,sharp_1.default)(this.params.filePath).metadata();if(a.width/a.height>1){const t=Math.min(640,a.height);await(0,sharp_1.default)(this.params.filePath).resize({height:t}).png({quality:75}).toFile(e)}else{const t=Math.min(640,a.width);await(0,sharp_1.default)(this.params.filePath).resize({width:t}).png({quality:75}).toFile(e)}await this.params.db.put(t,!0)}async gzip(){const t="img_encoder_gzip";if(await this.params.db.get(t))return;const e=this.getCompressFilePath(),a=this.getGzFilePath();await(0,utils_1.gzip)(e,a),await this.params.db.put(t,!0)}}exports.ImgEncoder=ImgEncoder;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImgEncoder=void 0;const path_1=require("path"),common_1=require("../common/common"),sharp_1=__importDefault(require("sharp")),utils_1=require("@soga/utils"),main_1=require("../types/main"),types_1=require("@soga/types");class ImgEncoder extends common_1.Common{getCompressFileName(){return"img_compress.png"}getCompressFilePath(){return(0,path_1.resolve)(this.params.outputRoot,this.getCompressFileName())}getGzFileName(){return"preview_0"}getGzFilePath(){return(0,path_1.resolve)(this.params.outputRoot,this.getGzFileName())}async start(){try{return await this.compress(),await this.gzip(),await this.getData()}catch(t){await this.throwError({code:10400,message:t.message,stack:t.stack})}}async getData(){const t="img_encoder_get_data",e=await this.params.db.get(t);if(e)return e;const a=this.params.filePath,i=await(0,utils_1.getFileSize)(a),{width:s,height:r}=await(0,sharp_1.default)(a).metadata(),h=this.getCompressFilePath(),{width:o,height:p}=await(0,sharp_1.default)(h).metadata(),m=await(0,utils_1.getFileSize)(h),l=this.getGzFilePath(),n=await(0,utils_1.getFileSize)(l),u=await(0,utils_1.calculateMd5)({file:l,start:0,end:i-1}),c={start:0,end:n-1,size:i,file:this.getGzFileName(),path:l,index:0,md5:u};if(this.params.hosts.includes(types_1.HostType.BAIDU)){const t=await(0,utils_1.calculateMd4)({file:l,start:0,end:i-1});c.md4=t}if(this.params.hosts.includes(types_1.HostType.ALI)){const t=await(0,utils_1.calculateSha1)({file:l,start:0,end:i-1});c.sha1=t}const g={meta:{width:s,height:r,size:i,t_width:o,t_height:p,t_size:m},parts:[c]};return await this.params.db.put(t,g),g}async compress(){const t="img_encoder_compress";if(await this.params.db.get(t))return;const e=this.getCompressFilePath(),a=await(0,sharp_1.default)(this.params.filePath).metadata();if(a.width/a.height>1){const t=Math.min(640,a.height);await(0,sharp_1.default)(this.params.filePath).resize({height:t}).png({quality:75}).toFile(e)}else{const t=Math.min(640,a.width);await(0,sharp_1.default)(this.params.filePath).resize({width:t}).png({quality:75}).toFile(e)}await this.params.db.put(t,!0)}async gzip(){const t="img_encoder_gzip";if(await this.params.db.get(t))return;const e=this.getCompressFilePath(),a=this.getGzFilePath();await(0,utils_1.gzip)(e,a),await this.params.db.put(t,!0),await this.postProgress({type:main_1.ProcessStep.transcode_img,percent:1})}}exports.ImgEncoder=ImgEncoder;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Prepare=void 0;const types_1=require("@soga/types"),main_1=require("../types/main"),mediainfo_1=require("@soga/mediainfo"),utils_1=require("@soga/utils"),common_1=require("../common/common"),constants_1=require("../constants");class Prepare extends common_1.Common{get isVideo(){return this.params.type==types_1.RecordType.VIDEO}get isAudio(){return this.params.type==types_1.RecordType.AUDIO}get isMedia(){return this.isAudio||this.isVideo}get isTxt(){return this.params.type==types_1.RecordType.TEXT&&this.params.ftype==types_1.RecordFtype.TEXT_TXT}get isImg(){return this.params.type==types_1.RecordType.IMAGE}async start(){try{return await this.initProcess()}catch(e){await this.throwError({code:10100,message:e.message,stack:e.stack})}}async getResult(){return await this.initProcess()}async initProcess(){const e=constants_1.PREPARE_RESULT,t=await this.params.db.get(e);if(t)return t;const i={[main_1.ProcessStep.prepare]:{weight:0,percent:1},[main_1.ProcessStep.separate_video]:{weight:0,percent:0},[main_1.ProcessStep.separate_audio]:{weight:0,percent:0},[main_1.ProcessStep.separate_text]:{weight:0,percent:0},[main_1.ProcessStep.transcode_video]:{weight:0,percent:0},[main_1.ProcessStep.transcode_audio]:{weight:0,percent:0},[main_1.ProcessStep.transcode_thumbnail]:{weight:0,percent:0},[main_1.ProcessStep.transcode_source]:{weight:0,percent:0},[main_1.ProcessStep.transcode_txt]:{weight:0,percent:0},[main_1.ProcessStep.transcode_img]:{weight:0,percent:0},[main_1.ProcessStep.group_media]:{weight:0,percent:0},[main_1.ProcessStep.upload_baidu]:{weight:0,percent:0},[main_1.ProcessStep.upload_ali]:{weight:0,percent:0},[main_1.ProcessStep.end]:{weight:0,percent:0}},s={keep_preview:this.params.keepPreview,keep_source:this.params.keepSource},a=await(0,utils_1.getFileSize)(this.params.filePath);i[main_1.ProcessStep.prepare].weight=i[main_1.ProcessStep.end].weight=Math.ceil(a/1024/1024/100);let r=0;if(this.isMedia)if(this.params.keepPreview){const e=await this.getMediainfo(),t=e?.general?.duration??0;if(e.video?.length){const t=e.video[0],{width:s,height:a,codec:r}=t,o=(0,mediainfo_1.isVideoSupport)(r),{duration:n}=e.general,p=o?n/400:n*(s*a)/1920/1080;i[main_1.ProcessStep.separate_video].weight=Math.ceil(p),i[main_1.ProcessStep.transcode_video].weight=Math.ceil(.01*n)}if(e.audio?.length){const{duration:t}=e.general;let s=0;e.audio.forEach((e=>{const{codec:i,lossless:a,channels:r}=e,o={high_need:!1,high_transcode:!1,adapt_need:!1,adapt_transcode:!1};(0,mediainfo_1.isAudioAdapt)(i)?r>2?(o.high_need=!0,o.high_transcode=!1,o.adapt_need=!0,o.adapt_transcode=!0):(o.high_need=!1,o.adapt_need=!0,o.adapt_transcode=!1):(0,mediainfo_1.isAudioHigh)(i)?(o.high_need=!0,o.high_transcode=!1,o.adapt_need=!0,o.adapt_transcode=!0):(o.high_need=!1,o.adapt_need=!0,o.adapt_transcode=!1,a&&(o.high_need=!0,o.high_transcode=!0)),o.adapt_need&&(s+=o.adapt_transcode?t/40:5),o.high_need&&(s+=o.high_transcode?t/20:10)})),i[main_1.ProcessStep.separate_audio].weight=Math.ceil(s),i[main_1.ProcessStep.transcode_audio].weight=Math.ceil(.003*t)}const o=e.video?.length??0,n=e.audio?.length??0;if(o||n){s.keep_preview=!0;const o=(e.text?.length||0)+(this.params.texts?.length||0);i[main_1.ProcessStep.separate_text].weight=Math.ceil(o),i[main_1.ProcessStep.transcode_thumbnail].weight=Math.ceil(.08*t),r+=a,i[main_1.ProcessStep.group_media].weight=Math.ceil(a/1024/1024/50)}else s.keep_preview=!1,s.keep_source=!0,r+=a}else s.keep_source=!0,r+=a;else this.isTxt?s.keep_preview?(i[main_1.ProcessStep.transcode_txt].weight=Math.ceil(a/1024/1024/1),r+=a):(s.keep_source=!0,r+=a):this.isImg?s.keep_preview&&(i[main_1.ProcessStep.transcode_img].weight=Math.ceil(a/1024/1024/1),r+=a):(s.keep_source=!0,r+=a);s.keep_source&&(i[main_1.ProcessStep.transcode_source].weight=Math.ceil(a/1024/1024/50)),this.params.hosts.includes(types_1.HostType.BAIDU)&&(i[main_1.ProcessStep.upload_baidu].weight=Math.ceil(r/1024/1024/1)),this.params.hosts.includes(types_1.HostType.ALI)&&(i[main_1.ProcessStep.upload_ali].weight=Math.ceil(r/1024/1024/2));const o={options:s,data:i};return await this.params.db.put(e,o),o}async getMediainfo(){const e="adapt_mediainfo",t=await this.params.db.get(e);if(t)return t;const i=await(0,mediainfo_1.parseMediaInfo)(this.params.filePath);return await this.params.db.put(e,i),i}}exports.Prepare=Prepare;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Prepare=void 0;const types_1=require("@soga/types"),main_1=require("../types/main"),mediainfo_1=require("@soga/mediainfo"),utils_1=require("@soga/utils"),common_1=require("../common/common"),constants_1=require("../constants");class Prepare extends common_1.Common{get isVideo(){return this.params.type==types_1.RecordType.VIDEO}get isAudio(){return this.params.type==types_1.RecordType.AUDIO}get isMedia(){return this.isAudio||this.isVideo}get isTxt(){return this.params.type==types_1.RecordType.TEXT&&this.params.ftype==types_1.RecordFtype.TEXT_TXT}get isImg(){return this.params.type==types_1.RecordType.IMAGE}async start(){try{return await this.initProcess()}catch(e){await this.throwError({code:10100,message:e.message,stack:e.stack})}}async getResult(){return await this.initProcess()}async initProcess(){const e=constants_1.PREPARE_RESULT,t=await this.params.db.get(e);if(t)return t;const a={[main_1.ProcessStep.prepare]:{weight:0,percent:1},[main_1.ProcessStep.separate_video]:{weight:0,percent:0},[main_1.ProcessStep.separate_audio]:{weight:0,percent:0},[main_1.ProcessStep.separate_text]:{weight:0,percent:0},[main_1.ProcessStep.transcode_video]:{weight:0,percent:0},[main_1.ProcessStep.transcode_audio]:{weight:0,percent:0},[main_1.ProcessStep.transcode_thumbnail]:{weight:0,percent:0},[main_1.ProcessStep.transcode_source]:{weight:0,percent:0},[main_1.ProcessStep.transcode_txt]:{weight:0,percent:0},[main_1.ProcessStep.transcode_img]:{weight:0,percent:0},[main_1.ProcessStep.group_media]:{weight:0,percent:0},[main_1.ProcessStep.upload_baidu]:{weight:0,percent:0},[main_1.ProcessStep.upload_ali]:{weight:0,percent:0},[main_1.ProcessStep.end]:{weight:0,percent:0}},s={keep_preview:this.params.keepPreview,keep_source:this.params.keepSource},i=await(0,utils_1.getFileSize)(this.params.filePath);a[main_1.ProcessStep.prepare].weight=a[main_1.ProcessStep.end].weight=Math.ceil(i/1024/1024/100);let r=0;if(this.isMedia)if(this.params.keepPreview){const e=await this.getMediainfo(),t=e?.general?.duration??0;if(e.video?.length){const t=e.video[0],{width:s,height:i,codec:r}=t,o=(0,mediainfo_1.isVideoSupport)(r),{duration:n}=e.general,p=o?n/400:n*(s*i)/1920/1080;a[main_1.ProcessStep.separate_video].weight=Math.ceil(p),a[main_1.ProcessStep.transcode_video].weight=Math.ceil(.01*n)}if(e.audio?.length){const{duration:t}=e.general;let s=0;e.audio.forEach((e=>{const{codec:a,lossless:i,channels:r}=e,o={high_need:!1,high_transcode:!1,adapt_need:!1,adapt_transcode:!1};(0,mediainfo_1.isAudioAdapt)(a)?r>2?(o.high_need=!0,o.high_transcode=!1,o.adapt_need=!0,o.adapt_transcode=!0):(o.high_need=!1,o.adapt_need=!0,o.adapt_transcode=!1):(0,mediainfo_1.isAudioHigh)(a)?(o.high_need=!0,o.high_transcode=!1,o.adapt_need=!0,o.adapt_transcode=!0):(o.high_need=!1,o.adapt_need=!0,o.adapt_transcode=!1,i&&(o.high_need=!0,o.high_transcode=!0)),o.adapt_need&&(s+=o.adapt_transcode?t/40:5),o.high_need&&(s+=o.high_transcode?t/20:10)})),a[main_1.ProcessStep.separate_audio].weight=Math.ceil(s),a[main_1.ProcessStep.transcode_audio].weight=Math.ceil(.003*t)}const o=e.video?.length??0,n=e.audio?.length??0;if(o||n){s.keep_preview=!0;const o=(e.text?.length||0)+(this.params.texts?.length||0);a[main_1.ProcessStep.separate_text].weight=Math.ceil(o),a[main_1.ProcessStep.transcode_thumbnail].weight=Math.ceil(.08*t),r+=i,a[main_1.ProcessStep.group_media].weight=Math.ceil(i/1024/1024/50)}else s.keep_preview=!1,s.keep_source=!0,r+=i}else s.keep_source=!0,r+=i;else this.isTxt?s.keep_preview?(a[main_1.ProcessStep.transcode_txt].weight=Math.ceil(i/1024/1024/1),r+=i):(s.keep_source=!0,r+=i):this.isImg?s.keep_preview&&(a[main_1.ProcessStep.transcode_img].weight=Math.ceil(i/1024/1024/1),r+=i):(s.keep_source=!0,r+=i);s.keep_source&&(a[main_1.ProcessStep.transcode_source].weight=Math.ceil(i/1024/1024/50)),this.params.hosts.includes(types_1.HostType.BAIDU)&&(a[main_1.ProcessStep.upload_baidu].weight=Math.ceil(r/1024/1024/1)),this.params.hosts.includes(types_1.HostType.ALI)&&(a[main_1.ProcessStep.upload_ali].weight=Math.ceil(r/1024/1024/2));const o={options:s,data:a};return await this.params.db.put(e,o),await this.postMessage({id:this.params.id,type:"prepare",data:o}),o}async getMediainfo(){const e="adapt_mediainfo",t=await this.params.db.get(e);if(t)return t;const a=await(0,mediainfo_1.parseMediaInfo)(this.params.filePath);return await this.params.db.put(e,a),a}}exports.Prepare=Prepare;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soga/encoder",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "@soga/common": "^0.1.6",
50
50
  "@soga/mediainfo": "^0.0.7",
51
- "@soga/types": "^0.0.60",
51
+ "@soga/types": "^0.0.61",
52
52
  "@soga/utils": "^0.0.10",
53
53
  "chardet": "^2.0.0",
54
54
  "fluent-ffmpeg": "^2.1.3",