{"_id":"@aim-packages/subtitle","_rev":"39-579b2380df714de676d00a5758873d4c","name":"@aim-packages/subtitle","dist-tags":{"latest":"0.8.0"},"versions":{"0.0.1":{"name":"@aim-packages/subtitle","version":"0.0.1","_id":"@aim-packages/subtitle@0.0.1","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"a64a0418a458f154dbe1d6f27ab12a7dc99565fe","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.1.tgz","fileCount":4,"integrity":"sha512-gCzeMmOHKfzNrbQKKlrzipsIFmvLil7JI015itOwjg9DACMOHvlFb4fnsjn40QtSxsNuo4BM9fEoTf2CHt7q2A==","signatures":[{"sig":"MEYCIQDsTAj1YxgQ3IUUvnWi0CtSXTel91MC1T7VDqYtetf6PwIhAPAO//OqNI+0FOzChIHVoxt1gt1kk6ITEwAKYA1Lj0BK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14736},"main":"dist/index.cjs.js","types":"dist/index.d.ts","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.1_1739274562371_0.267664398302631","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aim-packages/subtitle","version":"0.0.2","_id":"@aim-packages/subtitle@0.0.2","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"dfd3da1325e5858f041648e2c7f4a978d689adf7","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.2.tgz","fileCount":4,"integrity":"sha512-WA2ee/hP6uJUnSzR97UnTUM0gwnVw+zv1KUN8ZMU5SmO2gqqRKUXF9pmATz8QNGmcUItO6pFXGVLt7xy+zj2Bg==","signatures":[{"sig":"MEQCIBOgyVsHKm9cCLmIsgP/2B91jEzR4I+H2CQw7tJicji7AiBXIFUt1UA+xqMchMfrJyEAeMUBy4Y2QJmphHD4FjNJaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20398},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"4d953c3cfbb29787472ab270481da67586fb1dd1","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.2_1739330908575_0.30073837946707527","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aim-packages/subtitle","version":"0.0.3","_id":"@aim-packages/subtitle@0.0.3","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"8d69dd3e82fdbd410743304131c1b7747cfde5ae","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.3.tgz","fileCount":4,"integrity":"sha512-KxZTVkrpg93YPjWf4AhYdVT//j/4LGnaQOyC3eUvwq5+kgdAQ6NgrgPOvQ4N0dufMLrTZDOW6xITNTArXlrmOw==","signatures":[{"sig":"MEQCIAOWw0XHF4i+eBUc2vfCm906XPpFQox7i93mFwyDI6ORAiAIWIjLaKtasdFID5HsrKbRErBH/4iNYrpaLzJPK4537w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57045},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"909b9b97bf9f4f3f6f4dec04cb401f7f20f45da3","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.3_1739353316403_0.28762758688611756","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aim-packages/subtitle","version":"0.0.4","_id":"@aim-packages/subtitle@0.0.4","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"0ce3bba42d4b51b5a509bef5d1f1754ab30d64f1","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.4.tgz","fileCount":4,"integrity":"sha512-BVMluDjQ+Mxm8a2O+AYsBy8bKszgukdtD/gh3P+TZG6o5AXvEJKtAvNpTfod39I8ima1yl14FLJ6h0ek/D+LeQ==","signatures":[{"sig":"MEQCICmMeZR2JhNFVvuEfYH+7lBi2ZzWFC4ktUb4/6Mb9CQXAiA2AXzOUfh9LFe0vH6l3qYE2dtG2HO/4vFILs0RXQUClQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63920},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"909b9b97bf9f4f3f6f4dec04cb401f7f20f45da3","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.4_1739416139515_0.766116159331174","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@aim-packages/subtitle","version":"0.0.5","_id":"@aim-packages/subtitle@0.0.5","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"314ca87787eb04e0e00c686f32e6ffde6a668af8","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.5.tgz","fileCount":4,"integrity":"sha512-cmc5sQz8LJ+MvJApvXqRQwhDcFpiZl8wfw3vOcxz4fig/Cx8LWXJTy/s0aqbL9i2cm1AJ5JzUSysCk2CsbNIWA==","signatures":[{"sig":"MEUCIDClUiEuXyKykIeQ2KuSPg8blVsD7LBnMi9W6UuzMtD4AiEA937TqnFwDnjF+g2cnMnpaythJQnyYeJDBmARZE8hB9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67077},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"b121dd7e3693bb638a05e6273e31181e15ff7dda","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.5_1739428394841_0.13125442427642975","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@aim-packages/subtitle","version":"0.0.6","_id":"@aim-packages/subtitle@0.0.6","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"b4166c7571752d5ec7897ef8260d9b346270a576","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.6.tgz","fileCount":4,"integrity":"sha512-OEFxHcD9rG0n8MweyAqYtR+O4gekEcmyTndwqlICStSvXW52gTJ2DwOIUpkykQDfNTG1sYVga/Q29RMjahDDRA==","signatures":[{"sig":"MEUCIQC7wBqcx9bnSmwvNFQCAcKCfEqpaLia7ucFTg7g7oCfrAIgBQn/hHj9sb3pBynpsSCT3jFxsmeqXz10HhbgUeR/r6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69421},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"edf45a496f4a6a3a0a9e2e92e86c4c4740581298","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.6_1739523165408_0.7524451722594134","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@aim-packages/subtitle","version":"0.0.7","_id":"@aim-packages/subtitle@0.0.7","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d8e4b4354562941713e5b38fe297abc3fb34f445","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.7.tgz","fileCount":4,"integrity":"sha512-8tBQsvpJEc4QBlKQJgvQrRVyxKj3Bba4/kwCOm8XRphbmRS/NuTqlL//LcFEkmYqunnloFWDb23c+UTRFSWCjA==","signatures":[{"sig":"MEQCIGYmFjnBIIVYAZiD77zEdFira7TcMopeQNW6jH7ljOd1AiBCioGKOErxmVyntIJQNKG6YulY1Icl1azUWRaMph1eKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71502},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"7031ed4eba0453cdb67576fdbd80c8d6b5835fe6","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.7_1739529796992_0.4665155180286542","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@aim-packages/subtitle","version":"0.0.8","_id":"@aim-packages/subtitle@0.0.8","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d7e999b72ab2224e259dfa40e7a736764113b388","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.8.tgz","fileCount":4,"integrity":"sha512-9gOjCtuksith1IQF34zDMff4yPVbDEwybrinipCGDTqPs2p9btPG3OXDIuGRwIrB8/qYiErXFUlNMNXLYdepSQ==","signatures":[{"sig":"MEUCIQCnYYlmyygFmq+HZtNWj/e/gAwAEk9GtHWCde8otP/MTQIgDmlNQ1Qg8GMojNpGR/PIGlw2ep4ajw5lkt6L+gxew7g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72277},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"0cdf9c2cfd04f228e37075824f815226d1e5b264","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"lodash-es":"^4.17.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.8_1739790075505_0.8139736512590472","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@aim-packages/subtitle","version":"0.0.9","_id":"@aim-packages/subtitle@0.0.9","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"a4fba326ae2dc42b26f9a764d6b50d277bec0a58","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.9.tgz","fileCount":4,"integrity":"sha512-588yZB3VTJbfbZgbYHOknX1aTsZWmJ/kdGt98MKo8PV2qE+PRuyZSlMzosKvY5zEEP4ATjO2OlFKqTitx/R1xA==","signatures":[{"sig":"MEYCIQC3XdgOZe97va7VQuAB6TYiteNzJXOfectwHC/GGSC+ewIhAJj5vdjDg6aX2XtVXaC5fL80eVIK056SHExwz+W57fKW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1831190},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"16eeb04f655def3bc2fccd6b0863c94b72a8d0a9","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.9_1740387044801_0.9207744294326417","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@aim-packages/subtitle","version":"0.0.10","_id":"@aim-packages/subtitle@0.0.10","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"5ec1513f39cd2856387fdc4f4d8709afd12632da","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.10.tgz","fileCount":4,"integrity":"sha512-nkCqMAZ59jUC5mMZ1CdsVw28FB2MbRXBr4vK8GQFqQZV9RsUWYb7cU1tDGELUx3lRDSUSuY5r3/zl0bdM4wltA==","signatures":[{"sig":"MEUCICRbA9ckpiie2mSI4EjiazZEAqs4uDYCxmv7JD4IB9EsAiEAgncxHbHCPcuD9JDm0Rj2C1rbjGX+xtp/yEj8VlMwKKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833456},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"573bd8327d85cef82eb2a226b37a42269d819348","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.10_1740469126100_0.5643412835585118","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@aim-packages/subtitle","version":"0.0.11","_id":"@aim-packages/subtitle@0.0.11","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"188c10cff23ab401524388b53b9efee3fa6c23f7","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.11.tgz","fileCount":4,"integrity":"sha512-m4+GGBGtltELyG2hzzo7TNY+IDEuQ/RZTqV768TiPIi78jiIe64ml4alEL7uVZ9S/8g4FzngGUPwf93CsK6Lpw==","signatures":[{"sig":"MEQCIB2T0K0uLVHOXBVklDeUwZ1AKg9eBG6HGLWYCOcTy/meAiA2kcmOv+Ox+GTmSmRXkP/ufYaa5lgTB/FgDa6GWtXS5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1834285},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"3238fd1e7789bdac8d846f5db5f4b7e9f82c032e","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.11_1740667777676_0.9926909654991956","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@aim-packages/subtitle","version":"0.0.12","_id":"@aim-packages/subtitle@0.0.12","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"ed0be0f05642f3ebe1e2ec0c930e40f30ba60b34","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.12.tgz","fileCount":4,"integrity":"sha512-U8qcylSWTt5E1Qlf2om8VlkqAbYyo8vm2HRBb94kZnR4+qIecI7IC8wNODmEKo2saEGWsGVlPqXbQcjOCWxquQ==","signatures":[{"sig":"MEQCICmLAwEAWWuDbXYZ7MSVmd5dOWxRujwTGO76JHOEoQ1QAiBzWPfGGI+MnHDfxxUUJhdYga1T/r5fJ0JjRfGrhceYSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1834984},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"2a59c5c57abb8a9c5f28bd8b5d6002ee0c374059","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.12_1740670253569_0.35972418739361545","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@aim-packages/subtitle","version":"0.0.13","_id":"@aim-packages/subtitle@0.0.13","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"8e02d494b32d9a6da4cdeeff2b36a776817c386d","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.13.tgz","fileCount":4,"integrity":"sha512-NrpZi/AWJjbzTgnpaqLwPdgLQxi1wTndUGGFxz5kAAtwhXSUU9yF0TDrJjOmiyhBQZdNxCDREJMyR7FXfwebag==","signatures":[{"sig":"MEUCIA3ePkwbaNkdttGQcDpFU015+c8X47PKETUMjV0MmA7kAiEAwd6C982HA7Irltzd1cVAdAgjXAvwH8FOsjgny0vETy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1835113},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"f70bfa9b3bf73353a8ee5389d3f4e502f188cc1c","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.13_1740671309597_0.22257284202851668","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@aim-packages/subtitle","version":"0.0.14","_id":"@aim-packages/subtitle@0.0.14","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"38694386df61285125b3c6396dea87ddf65e71ac","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.14.tgz","fileCount":4,"integrity":"sha512-8BW607DPrrwMr7XhYe1/+SX+e3rj7ETTxAzjP6XAL1agbzxkxNRtGFH3ywtkMwxhOyXK1lMwgFlrlWrBOBOwgA==","signatures":[{"sig":"MEUCICdH4QUiCNnO3LVcuQcxzZsRZHChGg/0zvx9BxTKjwlaAiEA9Ml2CMv+3yQmMsAJ+uy9Oq1xS2riUTs2kF6XfJJ5o7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833013},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"9e2fd0c3f9214f2731a9dd51b3ae6fea62818c28","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.14_1742035029014_0.39153532020028714","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@aim-packages/subtitle","version":"0.0.15","_id":"@aim-packages/subtitle@0.0.15","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"9d4c6b357558088852d1b8392f78e8f4c405b9d1","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.15.tgz","fileCount":4,"integrity":"sha512-S2WTZUYyop0oLNFXgFirisjQeHsm2s2xP0sDSiTFwAj7DEITQzDPxbt56JxPhgCJX+ebxHJfdPAo+nbrlEkugw==","signatures":[{"sig":"MEQCICoRGA1UjW7DyAB/15YvwXty1cp9Gl2OaBwETOd9WwrRAiBytthL3ZWD/S5+o/e8TfMbaevzoGP2epjmttTlETykvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1835889},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"47992ecfdbeb471bfb866ce6a2413c7605f2a78c","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.15_1742280971864_0.8340962368050464","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@aim-packages/subtitle","version":"0.0.16","_id":"@aim-packages/subtitle@0.0.16","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d716c36ef2fdff906f4bdd4f4b5d9780b26bc24f","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.16.tgz","fileCount":4,"integrity":"sha512-+bFgrd0BB5NM4BvfCcT+HL0UewlFR2gheujN82mBQshgnLrkE2BxG+EZKl0Nzu7wcUZrUs0yQeH3Q6K9sz7oJw==","signatures":[{"sig":"MEQCIDsUo60TCysLgtCQM8EnPq4PaTTuhysua12DR4bpcCaCAiAUYezYKkntbp6GazJLncbnqlxjupO6r4WYpatPKbzJiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833132},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"b5ca9ba208e5ad31b55e269ca821bb9e90550fbf","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.16_1742711694438_0.5144119827638778","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@aim-packages/subtitle","version":"0.0.17","_id":"@aim-packages/subtitle@0.0.17","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"ab359f4de7e9e031ee4cfd8249d9411370e4d320","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.17.tgz","fileCount":4,"integrity":"sha512-tm63LyZfG7IWUa1NQ+B579hqEtmiBVCzKR5hSlqmZDnVuL+ANZQmthdmrxHZKbQK6cfaA504n23Qk+JuP15auQ==","signatures":[{"sig":"MEUCIQCmCgonn2Fy6XwRx6vTgAUSDXcvsZ7CZl1WracwP5YMaAIgTmT+WEE50aQ1Phq0VqG0P3KDqdAAtmS0BG7WGdJ1SAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833137},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"2dd393c310e5c4a0e12e032c98284e2950c37299","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.17_1743524100593_0.8544715523434951","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@aim-packages/subtitle","version":"0.0.18","_id":"@aim-packages/subtitle@0.0.18","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"5d11763a927898959252bbc59674373857975051","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.18.tgz","fileCount":4,"integrity":"sha512-unCknfsHaN9OTmf/R+IdStE0AU/QmP8NeDdwefolamaQWCsumuc/PNlkPeLrgZSprTDb+YoxmpVcBllrJd5PzQ==","signatures":[{"sig":"MEUCIQC0+SFZcwTO/7OXvk2K5WaS5QIh1x+/GPzzxkfQCKm0rAIgRijdd46HZCr93+ZbXeusdNrs93yyBhosSb5szMQfpqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1833988},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"cd01060523b0819c8fe72fb792492777fa13f470","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.18_1743696723473_0.36090640391449047","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@aim-packages/subtitle","version":"0.0.19","_id":"@aim-packages/subtitle@0.0.19","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d47cf2d362c79275e04d7b4cb1230fc2f4a518e6","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.0.19.tgz","fileCount":4,"integrity":"sha512-KLlXp8i4JL7HcPOjQwjvZV9g8GS9fJEMKWDTRtNNB4k0DyrsylIWNuQhOLqPf8yDo2lPZeUsw/Jt+ZrNSyBV4A==","signatures":[{"sig":"MEQCIDKRtQentt3qyjzkF2j3O5u4m3+Mhydbud13zDTPuVAxAiBqzdxlleVi4Zm8KPNBAguQB7TJ7+W2zKksTpUQJ2UOVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1838153},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"13c06505bc218cbe6723a73e6bd4225c3d91b273","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.0.19_1746517820976_0.18662190306561","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@aim-packages/subtitle","version":"0.1.0","_id":"@aim-packages/subtitle@0.1.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"ba0254d11b303bc5fb66ad25c9ed47554568d5b9","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.0.tgz","fileCount":5,"integrity":"sha512-Gqumx15mx+XUP037ktdrvGO9hE3/7N3S1yfmKR/Du+8VzyNmp6QzQLyk1rGFxeTVF14swTUqISJ07ywi+YoKGw==","signatures":[{"sig":"MEQCIFHQk5SfjB+v4ok1CozBB9OBU5fNQf2uE9HLGXLn42S3AiAwRforRrCU3lzmfpyEWSX2Q4fJytzuCqRA+6zQg9c6hA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1876508},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"468e1c92d8550e57ec64c736aa124cebe3a17ec4","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.0_1752733092944_0.936804285700187","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aim-packages/subtitle","version":"0.1.1","_id":"@aim-packages/subtitle@0.1.1","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"7612ff35159a0fd0f61908e7003a52b80b355ae9","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.1.tgz","fileCount":5,"integrity":"sha512-GzPDDECda1RGVEfA2EbV/YPQxScXpnwwqHiYR8uziZLm+CUrSCb/jP1BT34mY+UcoaPuuVM2TAXCYzo6Uy/McA==","signatures":[{"sig":"MEYCIQC3lIPA4X8+twTzlRo3PaDZNa1eo34FzOR2BeSvYCQ3zgIhANT3b+C2EYQzvQnwNnA9IN5ukRUAcxxdAp0SUt39YWiT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1901678},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"9589b7331e5fd6dc0e94f6d63d4a608f4ea0134e","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.1_1752738083850_0.2793668230658448","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aim-packages/subtitle","version":"0.1.2","_id":"@aim-packages/subtitle@0.1.2","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"3b68cb5f84145e71c018af5a7c203ac92c9d4a01","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.2.tgz","fileCount":5,"integrity":"sha512-bslel4KWLggjmIk5vr0a8Fq9YAtRa3ykfGsle6Ka9y9KAPBqIk/7OAooR55o3lKs07Nw88+F0T4S7J//NCjxBQ==","signatures":[{"sig":"MEQCIEnWpvG47nFYHwKvJvApZi0Ydg4yy3OLlxLOPC7cAdzMAiBtrgYnQkY/VuIZtwSx6gunNpx+gKeSXGlnGKwBCUyXwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1909780},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"c670d0b1266371986fc5171f1dad70c78eb37056","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.2_1752747350302_0.6441801887959162","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aim-packages/subtitle","version":"0.1.3","_id":"@aim-packages/subtitle@0.1.3","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d8fc371c952a4e2755be5d6a1203a825f683414e","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.3.tgz","fileCount":5,"integrity":"sha512-zAWeHuRAKGV/fa1xkDqolNPU4ZyRLW8hPDeQM74gSltE0L8bFmwt2YFLrNL57EUvvIH++9ynClzdo9sG+nBmeA==","signatures":[{"sig":"MEQCIEX5YDE1Qw8bwrDhgxX42LK5XjsogBqMiLK2elJbxFOMAiB3lon+xGG02ZNO4VNWqNj4iPi/eBM2ZtocKfynkP69bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1917312},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"03d56373fd413ae8b1661aba245bcfc3d9e4d92d","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.3_1752750184513_0.021507368250337944","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aim-packages/subtitle","version":"0.1.4","_id":"@aim-packages/subtitle@0.1.4","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"c65db9efe281bd7829c951a0321d7444adc9b45a","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.4.tgz","fileCount":5,"integrity":"sha512-l+LpVro/ts2CKmxTep3LDkSbjL4UBWWXYA7YXuTzYUyK5p+yApPzphsC2Q4JC7+1TBLDeBR9PaAxKw8HvzPsPA==","signatures":[{"sig":"MEYCIQC6VImOd7wonTOnC1rnGv2r/Gbp6uYIdX3+LvZOQIZ83gIhAI9NLtvX0E4o5AcjVVGI6K9AAUn+qyZfW0Gw2HZSZQV2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1920305},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"e9bb7ffd1902ff1657478d768cd954da8669124a","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.4_1753893451104_0.22574017351566078","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@aim-packages/subtitle","version":"0.1.5","_id":"@aim-packages/subtitle@0.1.5","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"7194517c7bc39064e5dd0b53531ae9e34599f74a","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.5.tgz","fileCount":5,"integrity":"sha512-C8mxYpBO7e6n6GVq3MSJpQWsGlZNdjLpoVRuUooMORY6i2AYz9IyxkW2LQ3pCHKZpdIh4Pir4J5WV0QICbuxpQ==","signatures":[{"sig":"MEQCIAMmGvBBugdmrHjZ0Zl38B3sTAd3MBEULJoYee0n4yHiAiAy9rmfmlPLCO8bRh7qgbtmLfnw85tGrg2GiW+y7bixVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1923142},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"1e7d5d1195833bd8b7cf0dc0707d191b3bf9e401","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.5_1754065024468_0.2923660834472688","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@aim-packages/subtitle","version":"0.1.6","_id":"@aim-packages/subtitle@0.1.6","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"3d35be1d87b7cf47c760f193d4f09eee62479d02","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.6.tgz","fileCount":5,"integrity":"sha512-3TP3r4g+d0wGTkCn5kUKRJoSOD5ox/t/f0cdic7/j1cgsBf+7t4bzdWuV5wOlisLcrEUgqcahlHtDpK96NGPUw==","signatures":[{"sig":"MEUCIFbFdfkc2kqT6BeSBjmeHMnVCWX2ejBEEh5cs72D+mZbAiEA9UmJiZLYeSctsmy724WV+QKVxvEfjJ/Q53d0k3PvkTE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1925286},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"be998b4914352d39d7e5e28b7d3b3b2565ac6d2d","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.6_1754072555540_0.3846089400986279","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@aim-packages/subtitle","version":"0.1.7","_id":"@aim-packages/subtitle@0.1.7","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"d544c940460ac411af6dbdb4e1475ccd6895a0ac","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.7.tgz","fileCount":5,"integrity":"sha512-aWCQcfnC/4+7nbMcXwn8Ua8X8bSlmppkOz+WigbRvcXgW/ysjqUa/dYO/aO45PKHY5sV8Wxgu0fvKPdY37ElHg==","signatures":[{"sig":"MEYCIQCSnzDovCwwGYDyEKWqtanAPqF+I/jHJgGr2rEv6Du6sAIhAMnMXC5emHg8a3E+3DrA1O8/RPraSOfmzyky7TgxjKLA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1925304},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"38f3c4bfe45e3a3bdc9d75127591e79e823527c5","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.7_1754806261238_0.26758052911404095","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@aim-packages/subtitle","version":"0.1.8","_id":"@aim-packages/subtitle@0.1.8","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"b34c366b1b2c46139983897431eba318eb646aac","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.1.8.tgz","fileCount":5,"integrity":"sha512-TT2triXScwAqn1vt7wplj0Cezcbz29GGzkvxfmQ55SsAYtP0juFD9i1RAJzDURl6bV15oNsbFj3I3SGxwQeusA==","signatures":[{"sig":"MEUCIQDFk6pR8Aur+l6YflKkRhWzoZv36ZEOcmNUNw8GvbUVrQIgEsiV0ZATA8VvklOYj7+XTXX2Q0q2jAO0hZD1V2dMkxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1925646},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"e33738fec2c848bc71998cb308adba3f4ed42d24","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.8.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.18.2","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.1.8_1756223022793_0.8850679843036322","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aim-packages/subtitle","version":"0.2.0","_id":"@aim-packages/subtitle@0.2.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"ab017cde2a51d935a2c908360f790525364707b9","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.2.0.tgz","fileCount":5,"integrity":"sha512-cXEUoOZ5gt+ag/LfePQNok//eJmgVN2pdz5IDQD3yXBz5tY8eyi+fOZmw9lh9475fxS3Bg1koAnRqrgu1RV+wA==","signatures":[{"sig":"MEUCIBxaUSKOEIIfeocQuByCwTN3JxjBQaL+GzHGhIVlnUB1AiEA4slhx4b7jbPFLznWvqQs3uz0TdxpMnB4JVuoKYs9qxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1928462},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"561d1a11d570639b99878d5e34c7053fe11ef248","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.2.0_1766933225001_0.010765667961249559","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aim-packages/subtitle","version":"0.3.0","_id":"@aim-packages/subtitle@0.3.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"b2387076d0f7f0c792c972b81fc4e77f2371e371","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.3.0.tgz","fileCount":5,"integrity":"sha512-R6+iZm7eOW1c89xBBVzYVVtoEiDU8I24zrXFN49jIvft6uWWXMQCpBg0r3X5djFGWhiUMmcfSFDdsC3BLqsMow==","signatures":[{"sig":"MEQCIBrRjxvypCUDwgvUGqRVD3R3RD2uRvuJM9lg2+V340nEAiAxub0+NaVuZIqAST8aXZEF+mAnpEvYq+YD08HC/VThlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1931330},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"561d1a11d570639b99878d5e34c7053fe11ef248","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.3.0_1767685649353_0.18912874277964176","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aim-packages/subtitle","version":"0.3.1","_id":"@aim-packages/subtitle@0.3.1","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"300d75abaccaba497f435de66f1cd0c494347ca4","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.3.1.tgz","fileCount":5,"integrity":"sha512-jEuMMURq0aOy2+TvLGH/1yBi+RAlBHDghKrkz7YbQWYAmRjXGkRY5rT58uB9RhodVRwgBh5qxFCCjNy0p3RESw==","signatures":[{"sig":"MEUCIHLI3bwVCQ7slsA6ieiqrMpj5UkVEtboYMdwax/nEedaAiEAiuBpxh6+eVv1pVP4kiN2bH2LBOmPKsFe9MVTwRf7ZPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1931330},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"561d1a11d570639b99878d5e34c7053fe11ef248","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.3.1_1767685974055_0.8457953624184549","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@aim-packages/subtitle","version":"0.3.2","_id":"@aim-packages/subtitle@0.3.2","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"3be3a3a048962d1edf6ca343c30bbcb663ec2a03","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.3.2.tgz","fileCount":5,"integrity":"sha512-nOKpAVjw8p60GazZlzWdnLSEWhahOXSf+ZCpS2qnACxfo0C9fB+FvveJ9YoyJVKmcBqWfmwxBWrn1LtgLDGUCw==","signatures":[{"sig":"MEUCIQCWwh5eDgggX3Ftx7nXRodUQRATHVoF6cd7fr9jB1bPIAIga1GnZ0REBSgaWiNk6CplkqBf518Vi6/dGIkKRqb+3QI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1933338},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"49d4deb005d4d8f2a8589b5f2e7199537562b436","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"10.8.2","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"20.18.3","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.3.2_1768492602819_0.3740761221154991","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aim-packages/subtitle","version":"0.4.0","_id":"@aim-packages/subtitle@0.4.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"f26a5a8be893009f7edb160fa5335ac0cb88e57c","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.4.0.tgz","fileCount":5,"integrity":"sha512-0TxynogkrivOySeaVNOubx3r4IHw6Y6X3l4e4h/oedx5+aiUbv0XWb+6InFnP6/qdcTWSfR4ax4cGhMRbEG8cA==","signatures":[{"sig":"MEYCIQDlMtYXKDsouGKkh/nRi3CiDeAsmp3hRyp3unDFXIvDvQIhALKQSdsnj3tX/jqdb1Pn9ET45hHKg6uzrB0cu4sx3AFT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1934739},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"7ea7e7a3b56b0a00e8f8bc0abe2f5528fd7aaf26","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.4.0_1768529543283_0.9576274585041527","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aim-packages/subtitle","version":"0.5.0","_id":"@aim-packages/subtitle@0.5.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"b946e9061a9a1eb44f764d6367a552b3ebbb30db","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.5.0.tgz","fileCount":5,"integrity":"sha512-6Q1XWkYrtnwQbD2/XwSYEbh66Wgfr+hDHhxczFX8fmGqCtSE9MCeZ7VdNqwZ41K4GyIsWAphlf9x8Q4x5fIp/Q==","signatures":[{"sig":"MEQCIFhIdAXnq8+XTsBy6rLLeLws08ktk5SMNMKtkPuwr5O6AiBmlT1VKc8K0Sd43xM3IfjxtjjIBta9l2XGpnBz8fDMSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1938687},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"225de76b0b3fbfa25c4efb1bd5bf201e8d18506a","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.5.0_1771331929359_0.3036035415058058","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@aim-packages/subtitle","version":"0.5.1","_id":"@aim-packages/subtitle@0.5.1","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"04ecbec845c38a575992b49dc773d6bf419bd668","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.5.1.tgz","fileCount":5,"integrity":"sha512-jfbFuFzsQ8P339IV918R4sGnwXd1wftMHWEucQzJNcUeuZ4aTVAdxM20JNXl6phdoYry0l6eQlKeBHOJDIl/CQ==","signatures":[{"sig":"MEQCIF5xNXLSEGMrSU60iv9ZyMMdScESZG+4mVWeY3f+WCFOAiABmbWBiDR+P/k488XiQc6K93IVGMkotUAu39M8bU9zHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1938619},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"d6dfaba08a372e1e2a51c6e69fea7eb7dd17f8da","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.6.7","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.17.1","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.5.1_1771339774224_0.18919646369551102","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@aim-packages/subtitle","version":"0.5.2","_id":"@aim-packages/subtitle@0.5.2","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"c2e9ed00427918e819aabf9f0512e6e25fef3e9d","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.5.2.tgz","fileCount":5,"integrity":"sha512-GxNoCfdYYDvjpPBnLIy32mTDopBfkgoCx+4diEDXEg27Z9iTX2sq9Js3dbAHW8uR9QrISX4KtQEGtiiPJ+tkEg==","signatures":[{"sig":"MEUCIBHHI9KOvMovBCbyctfwesr85NYn7TEE+6A/iIvsm4pNAiEArC9q0zcyd41UyU6N7uJlMpIkys8PWEuM0AoxSbWcrJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1942919},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"a2bb294c298ca0b0b2f12a5f6b8256c7d14cf786","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"10.8.2","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"20.18.3","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.5.2_1774967562325_0.8267965784133335","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aim-packages/subtitle","version":"0.6.0","_id":"@aim-packages/subtitle@0.6.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"0e86409294d6c4f533e0b5a0d0df9baa04c4badd","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.6.0.tgz","fileCount":5,"integrity":"sha512-JeuxZzxiPUbr8XgTxWyDcwc8/dmUeL40JziEcpa+iBDXKtp5s9gG1D+qJ4r0ZKZEUWK2i0OGg284ExQF9qXgsA==","signatures":[{"sig":"MEUCIQCifA1y0vWmvXrAmSJjWhcZO0mBmBhL79z7Aeyzmwc9SwIgDJiawlzFoDk41+eDZGPhCiiVqaB2neo4eSb862bVc94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1949357},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"e4ca73cf994d61e5d91a7fbfbf5ee0981bc76ee3","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.5.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.16.0","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.6.0_1777620768247_0.9425916268362553","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aim-packages/subtitle","version":"0.7.0","_id":"@aim-packages/subtitle@0.7.0","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"dist":{"shasum":"1f1cb34cbc0173408b2d0817dcc1e6783b653fcb","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.7.0.tgz","fileCount":5,"integrity":"sha512-Y4Njqu3Ws3siW9DyusUmnOHpu/ceOoGRMaCRp4xO8DoAC/PWDuk0H/dbHyxq8VIDF9AMYqYEaT6GjJ7f2q2axQ==","signatures":[{"sig":"MEQCIA66IWw/zEbSeiPHuCmsWdsyNLTHJeYow7aIOHfhMliYAiBjGNntU7Bz6uOJI1I9cfEdrYhvZx/RuAlZbTf4SXgXvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1947973},"main":"dist/index.cjs.js","types":"dist/index.d.ts","gitHead":"a4fa07e0bb94f14d5d5410285bae527aeb5a2623","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"_npmVersion":"9.5.1","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","directories":{},"_nodeVersion":"18.16.0","dependencies":{"sbd":"^1.0.19","tinyld":"^1.3.4","lodash-es":"^4.17.21","cldr-segmentation":"^2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.5","@types/sbd":"^1.0.5","typescript":"~5.6.2","@types/node":"^22.13.1","vite-plugin-dts":"^4.5.0","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/subtitle_0.7.0_1778170495782_0.46669187907418763","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@aim-packages/subtitle","version":"0.8.0","main":"dist/index.cjs.js","types":"dist/index.d.ts","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","release":"pnpm build && npm publish --registry=https://registry.npmjs.org/ --access public"},"devDependencies":{"@types/lodash-es":"^4.17.12","@types/node":"^22.13.1","@types/sbd":"^1.0.5","typescript":"~5.6.2","vite":"^6.0.5","vite-plugin-dts":"^4.5.0"},"dependencies":{"cldr-segmentation":"^2.2.1","lodash-es":"^4.17.21","sbd":"^1.0.19","tinyld":"^1.3.4"},"publishConfig":{"access":"public"},"_id":"@aim-packages/subtitle@0.8.0","gitHead":"0212aa9d69a1fde0374d5072a491a2d8d0ccc14e","description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-gohmc3jR0W+DvCcDtScVrFRamIuH6j7JTuE4mJDc420y3lYly+5GIEnAoP+CTYvzFlOzsO4KJrwIrZbWzCnVSw==","shasum":"1ecbbbf78386052ffe982aefe3ed2442e9e25295","tarball":"https://registry.npmjs.org/@aim-packages/subtitle/-/subtitle-0.8.0.tgz","fileCount":5,"unpackedSize":1950926,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDIiz0URLh3WJEndv/jwDKTgnCfdp1giLuVLpjga2jPgQIhAKj4BfSeBqwf7IxxiK12nzjSOtCr8AGIX314iL/qc5p8"}]},"_npmUser":{"name":"moyufed","email":"yuqian.124@gmail.com"},"directories":{},"maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/subtitle_0.8.0_1787326006704_0.3373930248884367"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-11T11:49:22.299Z","modified":"2026-08-21T15:26:47.347Z","0.0.1":"2025-02-11T11:49:22.618Z","0.0.2":"2025-02-12T03:28:28.767Z","0.0.3":"2025-02-12T09:41:56.604Z","0.0.4":"2025-02-13T03:08:59.719Z","0.0.5":"2025-02-13T06:33:15.056Z","0.0.6":"2025-02-14T08:52:45.606Z","0.0.7":"2025-02-14T10:43:17.246Z","0.0.8":"2025-02-17T11:01:15.705Z","0.0.9":"2025-02-24T08:50:45.045Z","0.0.10":"2025-02-25T07:38:46.414Z","0.0.11":"2025-02-27T14:49:37.895Z","0.0.12":"2025-02-27T15:30:53.832Z","0.0.13":"2025-02-27T15:48:29.906Z","0.0.14":"2025-03-15T10:37:09.272Z","0.0.15":"2025-03-18T06:56:12.063Z","0.0.16":"2025-03-23T06:34:54.732Z","0.0.17":"2025-04-01T16:15:00.966Z","0.0.18":"2025-04-03T16:12:03.822Z","0.0.19":"2025-05-06T07:50:21.204Z","0.1.0":"2025-07-17T06:18:13.197Z","0.1.1":"2025-07-17T07:41:24.084Z","0.1.2":"2025-07-17T10:15:50.545Z","0.1.3":"2025-07-17T11:03:04.723Z","0.1.4":"2025-07-30T16:37:31.358Z","0.1.5":"2025-08-01T16:17:04.739Z","0.1.6":"2025-08-01T18:22:35.846Z","0.1.7":"2025-08-10T06:11:01.447Z","0.1.8":"2025-08-26T15:43:43.080Z","0.2.0":"2025-12-28T14:47:05.181Z","0.3.0":"2026-01-06T07:47:29.567Z","0.3.1":"2026-01-06T07:52:54.242Z","0.3.2":"2026-01-15T15:56:43.008Z","0.4.0":"2026-01-16T02:12:23.454Z","0.5.0":"2026-02-17T12:38:49.598Z","0.5.1":"2026-02-17T14:49:34.424Z","0.5.2":"2026-03-31T14:32:42.567Z","0.6.0":"2026-05-01T07:32:48.445Z","0.7.0":"2026-05-07T16:14:55.983Z","0.8.0":"2026-08-21T15:26:46.948Z"},"description":"字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。","maintainers":[{"name":"moyufed","email":"yuqian.124@gmail.com"}],"readme":"# Aim Subtitle\r\n\r\n字幕处理工具库，支持多种字幕格式的解析、转换、优化和处理。\r\n\r\n## 📦 安装\r\n\r\n```bash\r\npnpm add @aim-packages/subtitle\r\n```\r\n\r\n## 🚀 快速开始\r\n\r\n```typescript\r\nimport { utils, parser, filter, tools } from '@aim-packages/subtitle';\r\n\r\n// 时间格式化\r\nconst formattedTime = utils.formatTime(3661.5); // \"01:01:01.500\"\r\n\r\n// 字幕格式转换\r\nconst segments = await parser.srtToAimSegments(srtContent);\r\n\r\n// 语言检测\r\nconst language = tools.detection.detectLanguage(\"Hello world\");\r\n\r\n// 文本分割\r\nconst sentences = tools.segmentation.splitToSentences(\"Hello world. How are you?\");\r\n\r\n// 字幕优化\r\nconst optimizedSegments = tools.optimization.subtitleOptimization(segments, {\r\n  repeat: true,\r\n  emt: true,\r\n  zf: true,\r\n  space: true,\r\n  ep: true\r\n});\r\n\r\n// 文本过滤\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.add(\"敏感词\", \"***\");\r\nconst filteredText = streamFilter.feedAll(\"这是一个敏感词测试。\");\r\n\r\n// 字幕输出\r\nconst segments = [[\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"]];\r\nconst srtContent = tools.output.outputSrt({ segments1: segments });\r\n\r\n## 📚 API 文档\r\n\r\n### 类型定义\r\n\r\n#### `AimSegments` 接口\r\n\r\n这是字幕处理库的核心数据结构，用于表示单个字幕片段。\r\n\r\n```typescript\r\ninterface AimSegments {\r\n  // 通用字段\r\n  st: string; // 开始时间戳 (Start timestamp)\r\n  et: string; // 结束时间戳 (End timestamp)\r\n  text: string; // 文本内容 (Text content)\r\n  index?: number; // 字幕索引 (Subtitle index)\r\n  children?: Array<AimSegments>; // 子片段 (Child segments)\r\n  f?: number; // 批量文件转写时所属的文件索引 (File index)\r\n\r\n  // 视频剪辑字段\r\n  delete?: boolean; // 是否被删除 (Whether it is deleted)\r\n  cut?: boolean; // 是否被裁剪 (Whether it is cut)\r\n\r\n  // TTS字段\r\n  md5?: string; // TTS使用的MD5 (MD5 used by TTS)\r\n\r\n  // 翻译字段\r\n  tr?: 0 | 1 | 2; // 翻译状态: 0-未翻译原文, 1-翻译中, 2-翻译完成\r\n\r\n  // 说话人字段\r\n  spk?: string; // 说话人 (Speaker)\r\n\r\n  // 烧录字段\r\n  duration?: number; // 时长 (Duration)\r\n  range?: number; // 本句开始到下一个片段的可用时长\r\n\r\n  // 重复检测字段\r\n  hit?: number; // 重复次数，表示转写重复的片段\r\n  rs?: Array<AimSegments>; // 重复片段 (Repeated segments)\r\n\r\n  // 分句字段\r\n  em?: 0 | 1; // 是否结束句 (End mark)\r\n  punc?: 0 | 1; // 是否存在标点分割符号\r\n  lng?: string; // 语言 (Language)\r\n\r\n  // 优化字段\r\n  zf?: 0 | 1; // 零帧字幕 (Zero frame subtitle)\r\n  emt?: 0 | 1; // 空白字幕 (Empty text subtitle)\r\n  ep?: 0 | 1; // 结尾标点 (End punctuation)\r\n  space?: 0 | 1; // 存在多余空格\r\n}\r\n```\r\n\r\n#### `Segment` 类型\r\n\r\n用于表示简单的时间段。\r\n\r\n```typescript\r\ntype Segment = {\r\n  start: number; // 开始时间（秒）\r\n  end: number;   // 结束时间（秒）\r\n};\r\n```\r\n\r\n#### `OptimizationOptions` 接口\r\n\r\n字幕优化选项配置。\r\n\r\n```typescript\r\ninterface OptimizationOptions {\n  emt: boolean;    // 是否移除空白字幕\n  ep: boolean;     // 是否移除结尾标点\n  epKeep?: EndPunctuationKeepOptions; // 删除结尾标点时需要保留的符号\n  zf: boolean;     // 是否移除零帧字幕\n  punc: boolean;   // 是否移除标点分割符号\n  em: boolean;     // 是否移除结束标记\n  space: boolean;  // 是否移除多余空格\n  repeat: boolean; // 是否移除重复内容\n}\n\ninterface EndPunctuationKeepOptions {\n  question?: boolean;    // 保留中英文问号 ?、？\n  exclamation?: boolean; // 保留中英文感叹号 !、！\n  symbols?: string;      // 从现有结尾标点集合中额外保留的符号，例如 \"，…\"\n}\n```\r\n\r\n#### `LanguageCode` 类型\r\n\r\n支持的语言代码类型。\r\n\r\n```typescript\r\ntype LanguageCode = \r\n  | \"auto\" | \"none\" | \"zh\" | \"zh_cn\" | \"zh_tw\" | \"yue\" \r\n  | \"en\" | \"ja\" | \"ko\" | \"fr\" | \"es\" | \"ru\" | \"de\" | \"it\" \r\n  | \"tr\" | \"pt\" | \"vi\" | \"id\" | \"th\" | \"ms\" | \"ar\" | \"hi\" \r\n  | \"ro\" | \"ug\" | \"uz\" | \"kk\" | \"az\" | \"ky\" | \"fa\" | \"tg\";\r\n```\r\n\r\n#### 工具类型\r\n\r\n```typescript\r\n// 使指定键变为可选\r\ntype PartialByKey<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\r\n\r\n// 使指定键变为必需\r\ntype RequiredByKey<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\r\n```\r\n\r\n### Utils 工具函数\r\n\r\n#### 时间处理\r\n\r\n##### `padNumber(num: number, length?: number): string`\r\n为数字前方自动补0到特定的位数，默认两位。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.padNumber(5);     // \"05\"\r\nutils.padNumber(5, 3);  // \"005\"\r\nutils.padNumber(123, 2); // \"123\"\r\n```\r\n\r\n##### `formatTime(seconds: number): string`\r\n将秒数转换为 `HH:MM:SS.mmm` 格式。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.formatTime(3661.5);  // \"01:01:01.500\"\r\nutils.formatTime(125.75);  // \"00:02:05.750\"\r\nutils.formatTime(0.123);   // \"00:00:00.123\"\r\n```\r\n\r\n##### `convertToSeconds(time?: string): number`\r\n将 `HH:MM:SS,mmm` 或 `HH:MM:SS.mmm` 格式的时间转换为秒数。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.convertToSeconds(\"01:01:01,500\"); // 3661.5\r\nutils.convertToSeconds(\"00:02:05.750\"); // 125.75\r\nutils.convertToSeconds(\"00:00:00,123\"); // 0.123\r\nutils.convertToSeconds();               // 0\r\n```\r\n\r\n#### 语言处理\r\n\r\n##### `containsCJKCharacters(str: string): boolean`\r\n检测字符串是否包含中文、日文、韩文字符。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.containsCJKCharacters(\"Hello 世界\");     // true\r\nutils.containsCJKCharacters(\"こんにちは\");      // true\r\nutils.containsCJKCharacters(\"안녕하세요\");      // true\r\nutils.containsCJKCharacters(\"Hello World\");   // false\r\n```\r\n\r\n##### `languageCodeToName(languageCode: LanguageCode): string`\r\n将语言代码转换为可读的语言名称。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.languageCodeToName(\"zh\");    // \"Chinese\"\r\nutils.languageCodeToName(\"en\");    // \"English\"\r\nutils.languageCodeToName(\"ja\");    // \"Japanese\"\r\nutils.languageCodeToName(\"ko\");    // \"Korean\"\r\nutils.languageCodeToName(\"auto\");  // \"Unknown\"\r\n```\r\n\r\n#### 文本分块处理\r\n\r\n##### `chunkArrayStrings(strings: string[], characterLimit: number): string[]`\r\n将字符串数组按字符限制分块，避免单次处理内容过多。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nconst strings = [\"第一句话\", \"第二句话\", \"第三句话\", \"第四句话\"];\r\nconst chunks = utils.chunkArrayStrings(strings, 20);\r\n// 结果: [\"第一句话\\n第二句话\", \"第三句话\\n第四句话\"]\r\n```\r\n\r\n**参数说明：**\r\n- `strings`: 输入的字符串数组\r\n- `characterLimit`: 每个分块的最大字符数限制\r\n\r\n**作用：**\r\n1. 将字符串数组按照字符限制进行分块，避免单次处理内容过多\r\n2. 使用换行符连接同一分块内的字符串\r\n3. 在分块时会预留一定的字符空间（10个字符）用于换行符和格式调整\r\n\r\n##### `chunkSegmentStringsWithIndex(segments: AimSegments[], characterLimit: number)`\r\n将字幕片段按字符限制分块，并生成多种格式的结果。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nconst segments = [\r\n  { st: \"00:00:01\", et: \"00:00:03\", text: \"第一句话\" },\r\n  { st: \"00:00:03\", et: \"00:00:05\", text: \"第二句话\" },\r\n  { st: \"00:00:05\", et: \"00:00:07\", text: \"第三句话\" }\r\n];\r\n\r\nconst result = utils.chunkSegmentStringsWithIndex(segments, 50);\r\n// 返回包含以下属性的对象：\r\n// - segmentsResult: 分块后的字幕片段数组\r\n// - stringResult: 纯文本分块结果\r\n// - indexStringResult: 带索引的文本分块结果\r\n// - indexResult: 每个分块的起始索引数组\r\n```\r\n\r\n**参数说明：**\r\n- `segments`: 输入的字幕片段数组\r\n- `characterLimit`: 每个分块的最大字符数限制\r\n\r\n**返回值：**\r\n```typescript\r\n{\r\n  segmentsResult: AimSegments[][],  // 分块后的字幕片段数组\r\n  stringResult: string[],           // 纯文本分块结果\r\n  indexStringResult: string[],      // 带索引的文本分块结果，格式为 [索引]文本\r\n  indexResult: number[]             // 每个分块的起始索引数组\r\n}\r\n```\r\n\r\n**作用：**\r\n1. 将字幕片段数组按照字符限制分块，避免单次处理内容过多\r\n2. 为每个片段添加索引信息，便于后续处理和追踪\r\n3. 生成多种格式的分块结果，满足不同场景的需求\r\n\r\n#### 字幕片段合并\r\n\r\n##### `consolidateSegments(items: Segment[], option: { maxDistance: number, padding: number }): Segment[]`\r\n合并字幕片段，优化字幕的时间轴。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nconst segments = [\r\n  { start: 0, end: 2 },\r\n  { start: 2.5, end: 4 },\r\n  { start: 8, end: 10 }\r\n];\r\n\r\nconst merged = utils.consolidateSegments(segments, {\r\n  maxDistance: 1,  // 时间间隔小于1秒的片段会被合并\r\n  padding: 0.5     // 为每个片段扩展0.5秒的开始和结束时间\r\n});\r\n// 结果: [{ start: 0, end: 4.5 }, { start: 7.5, end: 10.5 }]\r\n```\r\n\r\n**参数说明：**\r\n- `items`: 输入的字幕片段数组，每个片段包含 `start` 和 `end` 时间\r\n- `option.maxDistance`: 最大时间间隔，小于此值的相邻片段会被合并\r\n- `option.padding`: 可选的时间填充，为每个片段扩展开始和结束时间\r\n\r\n**作用：**\r\n1. 将时间间隔小于 `maxDistance` 的相邻字幕片段合并为一个片段\r\n2. 可选择性地为每个片段添加 `padding` 时间，扩展片段的开始和结束时间\r\n3. 如果添加了 `padding`，会自动处理重叠的片段，将它们合并\r\n\r\n#### 颜色格式转换\r\n\r\n##### `convertHexColorToAssFormat(hexColor?: string): string`\r\n将十六进制颜色转换为 ASS 格式，用于字幕样式设置。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.convertHexColorToAssFormat(\"#FF0000\");     // \"&H0000FF00\"\r\nutils.convertHexColorToAssFormat(\"#00FF00\");     // \"&H0000FF00\"\r\nutils.convertHexColorToAssFormat(\"#0000FF\");     // \"&H00FF0000\"\r\nutils.convertHexColorToAssFormat(\"#FF0000FF\");   // \"&HFF00FF00\"\r\nutils.convertHexColorToAssFormat();              // \"\"\r\n```\r\n\r\n**参数说明：**\r\n- `hexColor?: string` - 十六进制颜色值，支持 7 位（#RRGGBB）和 9 位（#RRGGBBAA）格式\r\n\r\n**作用：**\r\n1. 将十六进制颜色转换为 ASS 格式，用于字幕样式设置\r\n2. 支持 7 位和 9 位十六进制颜色格式\r\n3. 自动处理颜色通道的顺序转换（RGB 转 BGR）\r\n\r\n##### `convertHexColorToFFmpegFormat(hexColor: string): string`\r\n将十六进制颜色转换为 FFmpeg 格式，用于字幕样式设置。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.convertHexColorToFFmpegFormat(\"#FF0000\");     // \"&H0000FF00&\"\r\nutils.convertHexColorToFFmpegFormat(\"#00FF00\");     // \"&H0000FF00&\"\r\nutils.convertHexColorToFFmpegFormat(\"#0000FF\");     // \"&H00FF0000&\"\r\nutils.convertHexColorToFFmpegFormat(\"#FF0000FF\");   // \"&HFF00FF00&\"\r\n```\r\n\r\n**参数说明：**\r\n- `hexColor: string` - 十六进制颜色值，支持 7 位（#RRGGBB）和 9 位（#RRGGBBAA）格式\r\n\r\n**作用：**\r\n1. 将十六进制颜色转换为 FFmpeg 格式，用于字幕样式设置\r\n2. 支持 7 位和 9 位十六进制颜色格式\r\n3. 自动处理颜色通道的顺序转换（RGB 转 BGR）\r\n\r\n#### 时间格式转换\r\n\r\n##### `convertTimeToAssFormat(str: string): string`\r\n将时间字符串转换为 ASS 字幕格式。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.convertTimeToAssFormat(\"01:30:45.123\");  // \"1:30:45.12\"\r\nutils.convertTimeToAssFormat(\"00:05:30.050\");  // \"0:05:30.05\"\r\nutils.convertTimeToAssFormat(\"00:00:00.999\");  // \"0:00:01.00\"\n```\r\n\r\n**参数说明：**\r\n- `str: string` - 输入的时间字符串，格式为 HH:MM:SS.MMM\r\n\r\n**作用：**\r\n1. 将标准时间格式字符串转换为 ASS 字幕文件所需的时间格式\r\n2. 支持 HH:MM:SS.MMM 格式的输入\r\n3. 确保时间轴的准确性和兼容性\r\n4. 自动处理毫秒的精度转换（3位转2位）\r\n\r\n##### `cleanTimeDisplay(timeString: string): string`\r\n清理时间显示格式，移除毫秒部分和多余的小时前缀。\r\n\r\n```typescript\r\nimport { utils } from '@aim-packages/subtitle';\r\n\r\nutils.cleanTimeDisplay(\"00:01:30.500\");  // \"01:30\"\r\nutils.cleanTimeDisplay(\"01:45:20,123\");  // \"01:45:20\"\r\nutils.cleanTimeDisplay(\"00:00:05.00\");   // \"00:05\"\r\nutils.cleanTimeDisplay(\"01:30:45,50\");   // \"01:30:45\"\r\n```\r\n\r\n**参数说明：**\r\n- `timeString: string` - 输入的时间字符串\r\n\r\n**作用：**\r\n1. 移除时间字符串末尾的毫秒部分（支持 .xxx、,xxx 等分隔符）\r\n2. 移除时间字符串开头多余的 \"00:\" 小时前缀\r\n3. 保持时间格式的简洁性和可读性\r\n4. 自动处理不同格式的时间字符串，统一输出格式\r\n\r\n### Parser 字幕格式解析器\r\n\r\nParser 模块提供了多种字幕格式的解析和转换功能，支持 SRT、VTT、ASS 等常见字幕格式，以及流式解析器用于实时处理。\r\n\r\n#### 基础格式转换\r\n\r\n##### `srtToAimSegments(text: string): Promise<AimSegments[]>`\r\n\r\n将 SRT 格式的字幕文本转换为 `AimSegments` 数组。\r\n\r\n**参数:**\r\n- `text: string` - SRT 格式的字幕文本内容\r\n\r\n**返回值:**\r\n- `Promise<AimSegments[]>` - 转换后的字幕片段数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst srtContent = `1\r\n00:00:01,000 --> 00:00:03,000\r\nHello world.\r\n\r\n2\r\n00:00:03,000 --> 00:00:05,000\r\nHow are you?`;\r\n\r\nconst segments = await parser.srtToAimSegments(srtContent);\r\n// 返回: [\r\n//   { st: \"00:00:01.000\", et: \"00:00:03.000\", text: \"Hello world.\" },\r\n//   { st: \"00:00:03.000\", et: \"00:00:05.000\", text: \"How are you?\" }\r\n// ]\r\n```\r\n\r\n##### `vttToAimSegments(text: string): Promise<AimSegments[]>`\r\n\r\n将 VTT 格式的字幕文本转换为 `AimSegments` 数组。\r\n\r\n**参数:**\r\n- `text: string` - VTT 格式的字幕文本内容\r\n\r\n**返回值:**\r\n- `Promise<AimSegments[]>` - 转换后的字幕片段数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst vttContent = `WEBVTT\r\n\r\n00:00:01.000 --> 00:00:03.000\r\nHello world.\r\n\r\n00:00:03.000 --> 00:00:05.000\r\nHow are you?`;\r\n\r\nconst segments = await parser.vttToAimSegments(vttContent);\r\n// 返回: [\r\n//   { st: \"00:00:01.000\", et: \"00:00:03.000\", text: \"Hello world.\" },\r\n//   { st: \"00:00:03.000\", et: \"00:00:05.000\", text: \"How are you?\" }\r\n// ]\r\n```\r\n\r\n##### `assToAimSegments(text: string): Promise<AimSegments[]>`\r\n\r\n将 ASS 格式的字幕文本转换为 `AimSegments` 数组（通过先转换为 VTT 格式）。\r\n\r\n**参数:**\r\n- `text: string` - ASS 格式的字幕文本内容\r\n\r\n**返回值:**\r\n- `Promise<AimSegments[]>` - 转换后的字幕片段数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst assContent = `[Script Info]\r\nTitle: Example\r\nScriptType: v4.00+\r\n\r\n[V4+ Styles]\r\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\r\nStyle: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1\r\n\r\n[Events]\r\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\nDialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Hello world.\r\nDialogue: 0,0:00:03.00,0:00:05.00,Default,,0,0,0,,How are you?`;\r\n\r\nconst segments = await parser.assToAimSegments(assContent);\r\n```\r\n\r\n#### 第三方服务结果转换\r\n\r\n##### `tingwuToAimSegments(json: TingwuResult): Promise<AimSegments[]>`\r\n\r\n将腾讯云听悟服务的识别结果转换为 `AimSegments` 数组。\r\n\r\n**参数:**\r\n- `json: TingwuResult` - 腾讯云听悟服务的识别结果\r\n\r\n**返回值:**\r\n- `Promise<AimSegments[]>` - 转换后的字幕片段数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst tingwuResult = {\r\n  // 腾讯云听悟服务的识别结果\r\n};\r\n\r\nconst segments = await parser.tingwuToAimSegments(tingwuResult);\r\n```\r\n\r\n##### `openaiToAimSegments(json: OpenAIResult): Promise<AimSegments[]>`\r\n\r\n将 OpenAI Whisper 服务的识别结果转换为 `AimSegments` 数组。\r\n\r\n**参数:**\r\n- `json: OpenAIResult` - OpenAI Whisper 服务的识别结果\r\n\r\n**返回值:**\r\n- `Promise<AimSegments[]>` - 转换后的字幕片段数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst openaiResult = {\r\n  // OpenAI Whisper 服务的识别结果\r\n};\r\n\r\nconst segments = await parser.openaiToAimSegments(openaiResult);\r\n```\r\n\r\n#### 流式解析器\r\n\r\n##### `createWhisperStreamParser(options?: ParserOptions)`\r\n\r\n创建用于处理 Whisper 流式输出的解析器。\r\n\r\n**参数:**\r\n- `options?: ParserOptions` - 解析器配置选项\r\n\r\n**返回值:**\r\n- `Parser<string>` - 流式解析器实例\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst whisperParser = parser.createWhisperStreamParser({\r\n  onStart: (event) => {\r\n    console.log('开始解析 Whisper 流');\r\n  },\r\n  onParse: (event) => {\r\n    console.log('解析到字幕片段:', event.data);\r\n  },\r\n  onEnd: (event) => {\r\n    console.log('解析完成');\r\n  }\r\n});\r\n\r\n// 使用解析器\r\nwhisperParser.feed(chunk);\r\nwhisperParser.end();\r\n```\r\n\r\n##### `createTranslateStreamParser(options?: ParserOptions)`\r\n\r\n创建用于处理翻译流式输出的解析器。\r\n\r\n**参数:**\r\n- `options?: ParserOptions` - 解析器配置选项\r\n\r\n**返回值:**\r\n- `Parser<string>` - 流式解析器实例\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst translateParser = parser.createTranslateStreamParser({\r\n  onParse: (event) => {\r\n    console.log('解析到翻译片段:', event.data);\r\n  }\r\n});\r\n\r\n// 使用解析器\r\ntranslateParser.feed(chunk);\r\ntranslateParser.end();\r\n```\r\n\r\n##### `createSegmentStreamParser(options?: ParserOptions)`\r\n\r\n创建用于处理通用字幕片段流式输出的解析器。\r\n\r\n**参数:**\r\n- `options?: ParserOptions` - 解析器配置选项\r\n\r\n**返回值:**\r\n- `Parser<string>` - 流式解析器实例\r\n\r\n**示例:**\r\n```typescript\r\nimport { parser } from '@aim-packages/subtitle';\r\n\r\nconst segmentParser = parser.createSegmentStreamParser({\r\n  onParse: (event) => {\r\n    console.log('解析到字幕片段:', event.data);\r\n  }\r\n});\r\n\r\n// 使用解析器\r\nsegmentParser.feed(chunk);\r\nsegmentParser.end();\r\n```\r\n\r\n#### Parser 模块相关接口\r\n\r\n##### `Parser<T>` 接口\r\n```typescript\r\ninterface Parser<T = string> {\r\n  /** 向解析器输入数据块 */\r\n  feed(chunk: T): void\r\n  /** 重置解析器状态 */\r\n  reset(): void\r\n  /** 结束解析 */\r\n  end(): void\r\n}\r\n```\r\n\r\n##### `ParserOptions<S, P, E>` 类型\r\n```typescript\r\ntype ParserOptions<S, P, E> = {\r\n  /** 解析开始时的回调函数 */\r\n  onStart?: ParseCallback<S>\r\n  /** 解析过程中调用的回调函数 */\r\n  onParse?: ParseCallback<P>\r\n  /** 解析进度更新时的回调函数 */\r\n  onProgress?: ParseCallback<P>\r\n  /** 解析结束时的回调函数 */\r\n  onEnd?: ParseCallback<E>\r\n}\r\n```\r\n\r\n##### `ParsedEvent<T>` 接口\r\n```typescript\r\ninterface ParsedEvent<T> {\r\n  type: \"event\"\r\n  event: \"start\" | \"message\" | \"end\"\r\n  data?: T\r\n}\r\n```\r\n\r\n##### `ParseCallback<T>` 类型\r\n```typescript\r\ntype ParseCallback<T> = (event: ParsedEvent<T>) => void\r\n```\r\n\r\n### Filter 流式文本过滤器\r\n\r\nFilter 模块提供了基于 DFA（确定有限自动机）算法的流式文本过滤功能，支持实时敏感词检测和替换。\r\n\r\n#### `StreamFilter` 类\r\n\r\n流式文本过滤器，支持逐字符输入和实时过滤。\r\n\r\n**构造函数:**\r\n```typescript\r\nconstructor(onFilter?: (text: string) => any)\r\n```\r\n\r\n**参数:**\r\n- `onFilter?: (text: string) => any` - 可选的回调函数，在每次过滤时调用\r\n\r\n**方法:**\r\n\r\n##### `add(keyword: string, replaceText?: string)`\r\n\r\n添加关键词和对应的替换文本。\r\n\r\n**参数:**\r\n- `keyword: string` - 需要过滤的关键词\r\n- `replaceText?: string` - 替换文本，默认为空字符串\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.add(\"敏感词\", \"***\");\r\nstreamFilter.add(\"另一个词\", \"替换文本\");\r\n```\r\n\r\n##### `parse(data: [string, string][])`\r\n\r\n批量添加关键词和替换文本。\r\n\r\n**参数:**\r\n- `data: [string, string][]` - 关键词和替换文本的数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.parse([\r\n  [\"敏感词1\", \"***\"],\r\n  [\"敏感词2\", \"替换文本\"],\r\n  [\"敏感词3\", \"\"] // 空字符串表示删除\r\n]);\r\n```\r\n\r\n##### `reParse(data: string[][])`\r\n\r\n重新解析关键词列表，会清空之前的所有关键词。\r\n\r\n**参数:**\r\n- `data: string[][]` - 关键词和替换文本的二维数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.reParse([\r\n  [\"敏感词1\", \"***\"],\r\n  [\"敏感词2\", \"替换文本\"]\r\n]);\r\n```\r\n\r\n##### `feed(c: string)`\r\n\r\n逐字符输入文本进行过滤。\r\n\r\n**参数:**\r\n- `c: string` - 单个字符\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter((text) => {\r\n  console.log('过滤后的字符:', text);\r\n});\r\n\r\nstreamFilter.add(\"敏感词\", \"***\");\r\n\r\n// 逐字符输入\r\nstreamFilter.feed(\"这\");\r\nstreamFilter.feed(\"是\");\r\nstreamFilter.feed(\"敏\");\r\nstreamFilter.feed(\"感\");\r\nstreamFilter.feed(\"词\");\r\nstreamFilter.feed(\"。\");\r\n\r\nconst result = streamFilter.end();\r\nconsole.log('最终结果:', result); // \"这是***。\"\r\n```\r\n\r\n##### `feedAll(text: string): string`\r\n\r\n一次性输入完整文本进行过滤。\r\n\r\n**参数:**\r\n- `text: string` - 完整的文本内容\r\n\r\n**返回值:**\r\n- `string` - 过滤后的文本\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.add(\"敏感词\", \"***\");\r\n\r\nconst result = streamFilter.feedAll(\"这是一个敏感词测试。\");\r\nconsole.log(result); // \"这是一个***测试。\"\r\n```\r\n\r\n##### `end(): string`\r\n\r\n结束过滤并返回结果。\r\n\r\n**返回值:**\r\n- `string` - 过滤后的完整文本\r\n\r\n**示例:**\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.add(\"敏感词\", \"***\");\r\n\r\n// 逐字符输入\r\nstreamFilter.feed(\"这\");\r\nstreamFilter.feed(\"是\");\r\nstreamFilter.feed(\"敏\");\r\nstreamFilter.feed(\"感\");\r\nstreamFilter.feed(\"词\");\r\n\r\nconst result = streamFilter.end();\r\nconsole.log(result); // \"这是***\"\r\n```\r\n\r\n#### 完整使用示例\r\n\r\n```typescript\r\nimport { filter } from '@aim-packages/subtitle';\r\n\r\n// 创建流式过滤器\r\nconst streamFilter = new filter.StreamFilter((char) => {\r\n  console.log('实时输出字符:', char);\r\n});\r\n\r\n// 添加过滤规则\r\nstreamFilter.parse([\r\n  [\"敏感词1\", \"***\"],\r\n  [\"敏感词2\", \"替换文本\"],\r\n  [\"要删除的词\", \"\"]\r\n]);\r\n\r\n// 方式1: 逐字符输入\r\nstreamFilter.feed(\"这\");\r\nstreamFilter.feed(\"是\");\r\nstreamFilter.feed(\"敏\");\r\nstreamFilter.feed(\"感\");\r\nstreamFilter.feed(\"词\");\r\nstreamFilter.feed(\"1\");\r\nstreamFilter.feed(\"。\");\r\n\r\nconst result1 = streamFilter.end();\r\nconsole.log('逐字符结果:', result1);\r\n\r\n// 方式2: 一次性输入\r\nconst result2 = streamFilter.feedAll(\"这是敏感词2测试。\");\r\nconsole.log('一次性结果:', result2);\r\n```\r\n\r\n### Tools 字幕处理工具\r\n\r\nTools 模块提供了字幕处理相关的各种工具方法，包括语言检测、文本分割和字幕优化等功能。\r\n\r\n#### 语言检测\r\n\r\n##### `detectLanguage(text: string): LanguageDetectionResultsEntry`\r\n\r\n检测文本的主要语言。\r\n\r\n**参数:**\r\n- `text: string` - 需要检测语言的文本内容\r\n\r\n**返回值:**\r\n- `LanguageDetectionResultsEntry` - 包含语言代码、语言名称和概率的对象\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst result = tools.detection.detectLanguage(\"Hello world\");\r\n// 返回: { language: 'en', languageName: 'English', probability: 1 }\r\n```\r\n\r\n##### `detectAllLanguage(text: string): LanguageDetectionResultsEntry[]`\r\n\r\n检测文本中的所有可能语言，返回按概率排序的语言列表。\r\n\r\n**参数:**\r\n- `text: string` - 需要检测语言的文本内容\r\n\r\n**返回值:**\r\n- `LanguageDetectionResultsEntry[]` - 检测到的所有语言及其概率，按概率从高到低排序\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst results = tools.detection.detectAllLanguage(\"Hello world 你好世界\");\r\n// 返回: [\r\n//   { language: 'en', languageName: 'English', probability: 0.8 },\r\n//   { language: 'zh', languageName: '中文', probability: 0.2 }\r\n// ]\r\n```\r\n\r\n#### 文本分割\r\n\r\n##### `splitToSentences(text: string, languageCode?: LanguageCode): string[]`\r\n\r\n将文本按句子进行分割。\r\n\r\n**参数:**\r\n- `text: string` - 需要分割的文本内容\r\n- `languageCode?: LanguageCode` - 可选的语言代码，用于更准确的分割\r\n\r\n**返回值:**\r\n- `string[]` - 分割后的句子数组\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\n// 使用默认分割器\r\nconst sentences1 = tools.segmentation.splitToSentences(\"Hello world. How are you?\");\r\n// 返回: [\"Hello world.\", \"How are you?\"]\r\n\r\n// 使用指定语言的分割器\r\nconst sentences2 = tools.segmentation.splitToSentences(\"你好世界。今天天气怎么样？\", 'zh');\r\n// 返回: [\"你好世界。\", \"今天天气怎么样？\"]\r\n```\r\n\r\n#### 字幕优化\r\n\r\n##### `subtitleOptimization(segments: AimSegments[], options?: OptimizationOptions)`\r\n\r\n对字幕片段进行全面的质量检查和优化。\r\n\r\n**功能包括:**\r\n- 重复内容检测和移除\r\n- 空白字幕处理\r\n- 0帧字幕处理（开始时间大于等于结束时间）\r\n- 标点符号检查\r\n- 句子结束标记检查\r\n- 多余空格处理\r\n- 结尾标点处理\r\n\r\n**参数:**\n- `segments: AimSegments[]` - 需要优化的字幕片段数组\n- `options?: OptimizationOptions` - 优化选项配置\n\n`ep: true` 默认会删除支持的行尾标点。可以通过 `epKeep` 保留中英文问号、感叹号，或传入其他需要保留的符号：\n\n```typescript\nconst result = tools.optimization.subtitleOptimization(segments, {\n  ep: true,\n  epKeep: {\n    question: true,\n    exclamation: true,\n    symbols: \"，…\"\n  }\n});\n```\n\n`question: true` 会同时保留 `?` 和 `？`，`exclamation: true` 会同时保留 `!` 和 `！`。`symbols` 中的字符会追加到保留集合中；它主要用于现有结尾标点集合中的 `.`、`,`、`?`、`!`、`，`、`。`、`？`、`！`、`…`。未传 `epKeep` 时保持原有行为。\n\n**返回值:**\n```typescript\r\n{\r\n  result: {\r\n    emt: number[],    // 空白字幕索引\r\n    ep: number[],     // 结尾标点索引\r\n    zf: number[],     // 0帧字幕索引\r\n    punc: number[],   // 标点符号索引\r\n    em: number[],     // 句子结束标记索引\r\n    space: number[],  // 多余空格索引\r\n    repeat: number[], // 重复内容索引\r\n  },\r\n  repeat: AimSegments[], // 重复的片段列表\r\n  segments: AimSegments[] // 优化后的字幕片段数组\r\n}\r\n```\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments = [\r\n  { st: \"00:00:01\", et: \"00:00:03\", text: \"Hello world.\" },\r\n  { st: \"00:00:03\", et: \"00:00:05\", text: \"Hello world.\" }, // 重复内容\r\n  { st: \"00:00:05\", et: \"00:00:06\", text: \"   \" }, // 空白字幕\r\n  { st: \"00:00:06\", et: \"00:00:06\", text: \"Zero frame\" }, // 0帧字幕\r\n];\r\n\r\nconst result = tools.optimization.subtitleOptimization(segments, {\r\n  repeat: true,  // 移除重复内容\r\n  emt: true,     // 移除空白字幕\r\n  zf: true,      // 移除0帧字幕\r\n  space: true,   // 处理多余空格\r\n  ep: true       // 移除结尾标点\r\n});\r\n```\r\n\r\n##### `RepeatCheck` 类\r\n\r\n重复内容检测器，用于检测字幕中连续重复的内容片段。\r\n\r\n**构造函数:**\r\n```typescript\r\nconstructor(options?: RepeatCheckOption)\r\n```\r\n\r\n**方法:**\r\n\r\n- `push(segment: AimSegments)` - 添加字幕片段进行重复检测\r\n- `end()` - 结束检测，处理最后的重复片段\r\n- `reset()` - 重置检测器状态\r\n\r\n**属性:**\r\n- `threshold: number` - 重复检测阈值，默认为2次\r\n- `hit: number` - 当前重复次数\r\n- `prevSegment?: AimSegments` - 前一个字幕片段\r\n- `hitSegment?: AimSegments` - 当前重复的字幕片段\r\n- `hitSegmentList: AimSegments[]` - 重复片段列表\r\n- `options: RepeatCheckOption` - 配置选项\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst repeatCheck = new tools.optimization.RepeatCheck({\r\n  onHit: (segments) => {\r\n    console.log('检测到重复内容:', segments);\r\n  }\r\n});\r\n\r\nrepeatCheck.push({ st: \"00:00:01\", et: \"00:00:03\", text: \"Hello\" });\r\nrepeatCheck.push({ st: \"00:00:03\", et: \"00:00:05\", text: \"Hello\" }); // 重复\r\nrepeatCheck.push({ st: \"00:00:05\", et: \"00:00:07\", text: \"Hello\" }); // 重复，触发回调\r\nrepeatCheck.end();\r\n```\r\n\r\n#### 字幕输出\r\n\r\n字幕输出模块提供了多种格式的字幕文件生成功能，支持SRT、VTT、LRC、ASS等主流字幕格式。\r\n\r\n##### `outputSrt(params: OutputTextParams): string`\r\n\r\n生成SRT格式的字幕文件。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n\r\n**返回值:**\r\n- `string` - SRT格式的字幕内容\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker2\"]\r\n];\r\n\r\nconst segments2 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"你好世界\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"你好吗？\", \"speaker2\"]\r\n];\r\n\r\nconst speakerData = {\r\n  settings: {\r\n    speaker1: { spk: \"speaker1\", name: \"张三\", color: \"#FF0000\" },\r\n    speaker2: { spk: \"speaker2\", name: \"李四\", color: \"#00FF00\" }\r\n  },\r\n  speakers: { speaker1: 1, speaker2: 1 },\r\n  data: []\r\n};\r\n\r\nconst srtContent = tools.output.outputSrt({\r\n  segments1,\r\n  segments2,\r\n  speakerData\r\n});\r\n\r\nconsole.log(srtContent);\r\n// 输出:\r\n// 1\r\n// 00:00:01,000 --> 00:00:03,000\r\n// 张三: Hello world\r\n// 你好世界\r\n// \r\n// 2\r\n// 00:00:03,000 --> 00:00:05,000\r\n// 李四: How are you?\r\n// 你好吗？\r\n```\r\n\r\n##### `outputVtt(params: OutputTextParams): string`\r\n\r\n生成VTT格式的字幕文件。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n\r\n**返回值:**\r\n- `string` - VTT格式的字幕内容\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker2\"]\r\n];\r\n\r\nconst vttContent = tools.output.outputVtt({\r\n  segments1,\r\n  speakerData\r\n});\r\n\r\nconsole.log(vttContent);\r\n// 输出:\r\n// WEBVTT\r\n// \r\n// 00:00:01.000 --> 00:00:03.000\r\n// 张三: Hello world\r\n// \r\n// 00:00:03.000 --> 00:00:05.000\r\n// 李四: How are you?\r\n```\r\n\r\n##### `outputLrc(params: OutputTextParams): string`\r\n\r\n生成LRC格式的字幕文件。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n\r\n**返回值:**\r\n- `string` - LRC格式的字幕内容\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker2\"]\r\n];\r\n\r\nconst lrcContent = tools.output.outputLrc({\r\n  segments1,\r\n  segments2,\r\n  speakerData\r\n});\r\n\r\nconsole.log(lrcContent);\r\n// 输出:\r\n// [01.000]张三: Hello world\r\n// [01.000]你好世界\r\n// [03.000]李四: How are you?\r\n// [03.000]你好吗？\r\n```\r\n\r\n##### `outputAss(params: OutputTextParams): string`\r\n\r\n生成ASS格式的字幕文件，支持复杂的样式配置。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n\r\n**返回值:**\r\n- `string` - ASS格式的字幕内容\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker2\"]\r\n];\r\n\r\nconst segments2 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"你好世界\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"你好吗？\", \"speaker2\"]\r\n];\r\n\r\nconst subtitleSettings = {\r\n  disabled: false,\r\n  stroke: true,\r\n  shadow: true,\r\n  background: true,\r\n  backgroundColor: \"#000000\",\r\n  main: {\r\n    color: \"#FFFFFF\",\r\n    borderColor: \"#000000\",\r\n    size: 18,\r\n    fontFamily: \"Microsoft YaHei\"\r\n  },\r\n  sub: {\r\n    color: \"#FFFF00\",\r\n    borderColor: \"#000000\",\r\n    size: 14,\r\n    fontFamily: \"Microsoft YaHei\"\r\n  },\r\n  position: {\r\n    bottom: 20,\r\n    left: 10\r\n  },\r\n  mode: \"multiLang\"\r\n};\r\n\r\nconst assContent = tools.output.outputAss({\r\n  segments1,\r\n  segments2,\r\n  subtitleSettings,\r\n  speakerData,\r\n  isMac: false,\r\n  reverse: false\r\n});\r\n\r\nconsole.log(assContent);\r\n// 输出完整的ASS格式字幕文件，包含样式定义和字幕内容\r\n```\r\n\r\n##### `outputTxt(params: OutputTextParams): string`\r\n\r\n生成TXT格式的纯文本文件，支持多种输出模式。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n  - `useIndex?: boolean` - 是否显示索引编号\r\n  - `useTimestamp?: boolean` - 是否显示时间戳\r\n  - `useParagraph?: boolean` - 是否使用段落模式（按发言人分组或按chunkSize分组）\r\n\r\n**返回值:**\r\n- `string` - TXT格式的文本内容\r\n\r\n**功能特性:**\r\n- **段落模式**: 支持按说话人分组或按固定大小分块\r\n- **行模式**: 每个字幕片段单独一行\r\n- **多语言支持**: 自动检测中日韩语言，调整文本连接方式\r\n- **说话人支持**: 支持显示说话人名称和时间戳\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker1\"],\r\n  [\"00:00:05,000\", \"00:00:07,000\", \"I'm fine, thank you.\", \"speaker2\"]\r\n];\r\n\r\nconst segments2 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"你好世界\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"你好吗？\", \"speaker1\"],\r\n  [\"00:00:05,000\", \"00:00:07,000\", \"我很好，谢谢。\", \"speaker2\"]\r\n];\r\n\r\nconst speakerData = {\r\n  settings: {\r\n    speaker1: { spk: \"speaker1\", name: \"张三\", color: \"#FF0000\" },\r\n    speaker2: { spk: \"speaker2\", name: \"李四\", color: \"#00FF00\" }\r\n  },\r\n  speakers: { speaker1: 1, speaker2: 1 },\r\n  data: []\r\n};\r\n\r\n// 行模式 - 每个字幕片段单独一行\r\nconst txtContent1 = tools.output.outputTxt({\r\n  segments1,\r\n  segments2,\r\n  speakerData,\r\n  useIndex: true,\r\n  useTimestamp: true,\r\n  useParagraph: false\r\n});\r\n\r\nconsole.log(txtContent1);\r\n// 输出:\r\n// 0\r\n// 00:00:01,000 --> 00:00:03,000\r\n// 张三: Hello world\r\n// 你好世界\r\n// \r\n// 1\r\n// 00:00:03,000 --> 00:00:05,000\r\n// 张三: How are you?\r\n// 你好吗？\r\n// \r\n// 2\r\n// 00:00:05,000 --> 00:00:07,000\r\n// 李四: I'm fine, thank you.\r\n// 我很好，谢谢。\r\n\r\n// 段落模式 - 按说话人分组\r\nconst txtContent2 = tools.output.outputTxt({\r\n  segments1,\r\n  segments2,\r\n  speakerData,\r\n  useIndex: true,\r\n  useTimestamp: true,\r\n  useParagraph: true\r\n});\r\n\r\nconsole.log(txtContent2);\r\n// 输出:\r\n// 1\r\n// 张三 - 00:00:01,000 --> 00:00:05,000\r\n// Hello world How are you?\r\n// 你好世界 你好吗？\r\n// \r\n// 2\r\n// 李四 - 00:00:05,000 --> 00:00:07,000\r\n// I'm fine, thank you.\r\n// 我很好，谢谢。\r\n\r\n##### `outputMarkdown(params: OutputTextParams): string`\r\n\r\n生成 Markdown 格式的字幕文件，支持多种输出模式和说话人分组。\r\n\r\n**参数:**\r\n- `params: OutputTextParams` - 输出参数配置\r\n  - `header?: string` - 文档标题\r\n  - `isMd?: boolean` - 是否为 Markdown 格式（影响换行符）\r\n  - `chunkSize?: number` - 分块大小，默认为 10\r\n\r\n**返回值:**\r\n- `string` - Markdown 格式的字幕内容\r\n\r\n**功能特性:**\r\n- **说话人分组**: 支持按说话人分组显示内容\r\n- **多语言支持**: 自动检测中日韩语言，调整文本连接方式\r\n- **分块处理**: 支持按固定大小分块处理长文本\r\n- **时间显示**: 自动清理时间格式，移除毫秒和多余前缀\r\n- **灵活格式**: 支持 Markdown 和纯文本两种输出格式\r\n\r\n**示例:**\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\nconst segments1 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"Hello world\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"How are you?\", \"speaker1\"],\r\n  [\"00:00:05,000\", \"00:00:07,000\", \"I'm fine, thank you.\", \"speaker2\"]\r\n];\r\n\r\nconst segments2 = [\r\n  [\"00:00:01,000\", \"00:00:03,000\", \"你好世界\", \"speaker1\"],\r\n  [\"00:00:03,000\", \"00:00:05,000\", \"你好吗？\", \"speaker1\"],\r\n  [\"00:00:05,000\", \"00:00:07,000\", \"我很好，谢谢。\", \"speaker2\"]\r\n];\r\n\r\nconst speakerData = {\r\n  settings: {\r\n    speaker1: { spk: \"speaker1\", name: \"张三\", color: \"#FF0000\" },\r\n    speaker2: { spk: \"speaker2\", name: \"李四\", color: \"#00FF00\" }\r\n  },\r\n  speakers: { speaker1: 1, speaker2: 1 },\r\n  data: []\r\n};\r\n\r\n// 带说话人的 Markdown 输出\r\nconst mdContent = tools.output.outputMarkdown({\r\n  segments1,\r\n  segments2,\r\n  header: \"# 会议记录\",\r\n  speakerData,\r\n  chunkSize: 5\r\n});\r\n\r\nconsole.log(mdContent);\r\n// 输出:\r\n// # 会议记录\r\n// \r\n// 张三 01:30 - 01:45\r\n// Hello world How are you?\r\n// 你好世界 你好吗？\r\n// \r\n// 李四 01:45 - 01:47\r\n// I'm fine, thank you.\r\n// 我很好，谢谢。\r\n\r\n// 纯文本输出（无说话人）\r\nconst textContent = tools.output.outputMarkdown({\r\n  segments1,\r\n  segments2,\r\n  header: \"会议记录\",\r\n  isMd: false,\r\n  chunkSize: 3\r\n});\r\n\r\nconsole.log(textContent);\r\n// 输出:\r\n// 会议记录\r\n// 1. Hello world\r\n// 你好世界\r\n// 2. How are you?\r\n// 你好吗？\r\n// 3. I'm fine, thank you.\r\n// 我很好，谢谢。\r\n```\r\n\r\n#### 完整的字幕处理流程示例\r\n\r\n```typescript\r\nimport { tools } from '@aim-packages/subtitle';\r\n\r\n// 1. 检测语言\r\nconst language = tools.detection.detectLanguage(\"Hello world. How are you?\");\r\n\r\n// 2. 按句子分割\r\nconst sentences = tools.segmentation.splitToSentences(\"Hello world. How are you?\", language.language);\r\n\r\n// 3. 转换为字幕片段\r\nconst segments = sentences.map((text, index) => ({\r\n  st: `00:00:${index * 2}`,\r\n  et: `00:00:${(index + 1) * 2}`,\r\n  text\r\n}));\r\n\r\n// 4. 优化字幕\r\nconst optimized = tools.optimization.subtitleOptimization(segments, {\r\n  repeat: true,\r\n  emt: true,\r\n  zf: true,\r\n  space: true,\r\n  ep: true\r\n});\r\n\r\nconsole.log('优化结果:', optimized);\r\n```\r\n\r\n#### 完整的字幕处理流程示例\r\n\r\n```typescript\r\nimport { utils, parser, filter, tools } from '@aim-packages/subtitle';\r\n\r\n// 1. 解析字幕文件\r\nconst srtContent = `1\r\n00:00:01,000 --> 00:00:03,000\r\nHello world.\r\n\r\n2\r\n00:00:03,000 --> 00:00:05,000\r\nHow are you?`;\r\n\r\nconst segments = await parser.srtToAimSegments(srtContent);\r\n\r\n// 2. 检测语言\r\nconst language = tools.detection.detectLanguage(segments[0].text);\r\n\r\n// 3. 按句子分割并重新生成字幕片段\r\nconst sentences = tools.segmentation.splitToSentences(segments[0].text, language.language);\r\nconst newSegments = sentences.map((text, index) => ({\r\n  st: utils.formatTime(index * 2),\r\n  et: utils.formatTime((index + 1) * 2),\r\n  text\r\n}));\r\n\r\n// 4. 优化字幕质量\r\nconst optimized = tools.optimization.subtitleOptimization(newSegments, {\r\n  repeat: true,\r\n  emt: true,\r\n  zf: true,\r\n  space: true,\r\n  ep: true\r\n});\r\n\r\n// 5. 文本过滤\r\nconst streamFilter = new filter.StreamFilter();\r\nstreamFilter.parse([\r\n  [\"敏感词\", \"***\"],\r\n  [\"不当词汇\", \"替换文本\"]\r\n]);\r\n\r\nconst filteredSegments = optimized.segments.map(segment => ({\r\n  ...segment,\r\n  text: streamFilter.feedAll(segment.text)\r\n}));\r\n\r\nconsole.log('最终处理结果:', filteredSegments);\r\n```\r\n\r\n#### Tools 模块相关接口\r\n\r\n##### `LanguageDetectionResultsEntry`\r\n```typescript\r\ninterface LanguageDetectionResultsEntry {\r\n  /** 语言代码 (如 'zh', 'en', 'ja' 等) */\r\n  language: LanguageCode\r\n  /** 语言名称 (如 '中文', 'English', '日本語' 等) */\r\n  languageName: string\r\n  /** 检测准确度概率 (0-1 之间的数值) */\r\n  probability: number\r\n}\r\n```\r\n\r\n##### `RepeatCheckOption`\r\n```typescript\r\ninterface RepeatCheckOption {\r\n  /** 当检测到重复内容时的回调函数 */\r\n  onHit?: (segment: AimSegments[]) => void\r\n}\r\n```\r\n\r\n##### `OutputTextParams`\r\n```typescript\r\ninterface OutputTextParams {\r\n  /** 主要字幕片段数组 */\r\n  segments1: Array<ISegment>;\r\n  /** 次要字幕片段数组（如翻译字幕） */\r\n  segments2?: Array<ISegment>;\r\n  /** 字幕样式设置 */\r\n  subtitleSettings?: SubtitleSettings;\r\n  /** 说话人数据 */\r\n  speakerData?: SpeakerData | null;\r\n  /** 本地化配置 */\r\n  locale?: Record<string, any>;\r\n  \r\n  // TXT格式相关\r\n  /** 是否使用索引 */\r\n  useIndex?: boolean;\r\n  /** 是否使用时间戳 */\r\n  useTimestamp?: boolean;\r\n  /** 是否使用段落格式 */\r\n  useParagraph?: boolean;\r\n  \r\n  // Markdown格式相关\r\n  /** 文档标题 */\r\n  header?: string;\r\n  /** 是否为Markdown格式 */\r\n  isMd?: boolean;\r\n  /** 分块大小 */\r\n  chunkSize?: number;\r\n  \r\n  // ASS格式相关\r\n  /** 是否为Mac系统 */\r\n  isMac?: boolean;\r\n  /** 是否反转字幕顺序 */\r\n  reverse?: boolean;\r\n}\r\n```\r\n\r\n##### `ISegment`\r\n```typescript\r\ntype ISegment = [string, string, string, string | undefined]\r\n// [开始时间, 结束时间, 文本内容, 说话人标识]\r\n```\r\n\r\n##### `SpeakerData`\r\n```typescript\r\ninterface SpeakerData {\r\n  /** 说话人设置配置 */\r\n  settings: Record<string, { spk: string; name?: string; color: string }>;\r\n  /** 说话人统计 */\r\n  speakers: Record<string, number>;\r\n  /** 说话人时间数据 */\r\n  data: { start: number; end: number; speaker: string }[];\r\n  /** 其他选项 */\r\n  options?: { speakerCount?: number; }\r\n}\r\n```\r\n\r\n##### `SubtitleSettings`\r\n```typescript\r\ninterface SubtitleSettings {\r\n  /** 是否禁用字幕 */\r\n  disabled: boolean;\r\n  /** 是否启用描边 */\r\n  stroke: boolean;\r\n  /** 是否启用阴影 */\r\n  shadow: boolean;\r\n  /** 是否启用背景 */\r\n  background: boolean;\r\n  /** 背景颜色 */\r\n  backgroundColor: string;\r\n  /** 主要字幕样式 */\r\n  main: SubtitleTextStyle;\r\n  /** 次要字幕样式 */\r\n  sub: SubtitleTextStyle;\r\n  /** 字幕位置 */\r\n  position: SubtitlePosition;\r\n  /** 字幕语言模式 */\r\n  mode: SubtitleLanguage;\r\n  /** 字幕顺序 */\r\n  order?: number[];\r\n  /** 水印样式 */\r\n  watermark?: WatermarkStyle;\r\n}\r\n```\r\n\r\n## 🏗️ 项目结构\r\n\r\n```\r\nsrc/\r\n├── utils/          # 工具函数 - 时间格式化、语言处理、文本分块等\r\n├── parser/         # 字幕格式解析器 - SRT、VTT、ASS 格式转换和流式解析\r\n├── tools/          # 字幕处理工具 - 语言检测、文本分割、字幕优化等\r\n├── filter/         # 字幕过滤器 - 基于 DFA 算法的流式文本过滤\r\n├── types/          # TypeScript 类型定义\r\n└── main.ts         # 主入口文件\r\n```\r\n\r\n## 📋 模块功能概览\r\n\r\n### Utils 模块\r\n- **时间处理**: 时间格式化、秒数转换、数字补零、ASS 时间格式转换等\r\n- **语言处理**: 中日韩字符检测、语言代码转换等\r\n- **文本分块**: 按字符限制分块、字幕片段分块等\r\n- **字幕合并**: 合并相邻字幕片段、时间轴优化等\r\n- **颜色转换**: 十六进制颜色转 ASS 格式、FFmpeg 格式等\r\n\r\n### Parser 模块\r\n- **格式转换**: SRT、VTT、ASS 格式之间的相互转换\r\n- **第三方服务**: 腾讯云听悟、OpenAI Whisper 结果转换\r\n- **流式解析**: 支持实时流式字幕数据的解析和处理\r\n\r\n### Tools 模块\r\n- **语言检测**: 多语言文本的语言识别和概率分析\r\n- **文本分割**: 按句子、段落等规则分割文本\r\n- **字幕优化**: 重复检测、空白处理、质量优化等\r\n- **字幕输出**: 支持SRT、VTT、LRC、ASS等多种格式的字幕文件生成\r\n\r\n### Filter 模块\r\n- **流式过滤**: 基于 DFA 算法的实时文本过滤\r\n- **敏感词处理**: 支持关键词替换、删除等操作\r\n- **逐字符处理**: 支持逐字符输入和实时过滤\r\n\r\n## 🔧 开发\r\n\r\n```bash\r\n# 安装依赖\r\npnpm install\r\n\r\n# 开发模式\r\npnpm dev\r\n\r\n# 构建\r\npnpm build\r\n\r\n# 预览构建结果\r\npnpm preview\r\n\r\n# 发布\r\npnpm release\r\n```\r\n\r\n## 📄 许可证\r\n\r\nMIT License\r\n\r\n## 🤝 贡献\r\n\r\n欢迎提交 Issue 和 Pull Request！ \n","readmeFilename":"README.md"}