{"_id":"@belief997/video-converter","name":"@belief997/video-converter","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@belief997/video-converter","version":"1.0.0","description":"Video converter with MJPEG, AVI-MJPEG, and H264 output formats. Supports 8-byte frame alignment for AVI files.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"video-converter":"dist/cli.js"},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"tsc --noEmit","start":"node dist/cli.js","prepublishOnly":"npm run build && npm test"},"keywords":["video","converter","ffmpeg","mjpeg","h264","avi","video-processing","frame-alignment","typescript"],"author":{"name":"Belief997"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Belief997/w01-video_converter.git","directory":"video-converter-ts"},"bugs":{"url":"https://github.com/Belief997/w01-video_converter/issues"},"homepage":"https://github.com/Belief997/w01-video_converter#readme","devDependencies":{"@types/node":"^20.10.0","fast-check":"^3.15.0","typescript":"^5.3.0","vitest":"^1.1.0"},"dependencies":{"commander":"^12.0.0"},"engines":{"node":">=18.0.0"},"peerDependencies":{},"peerDependenciesMeta":{},"gitHead":"f3c463e0678a094c5b353ae8210b4e7fe985b3a3","_id":"@belief997/video-converter@1.0.0","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-GFN34oC1fW4mTTED3QD9yvReCCx0UvS3x9RtTRVwkWZBIVdxh2N+cYxLQ5tB9wbMoDvzGqG+xsuROmdr/YtBhA==","shasum":"fb3a4c383909293b5fb7b10517eec4dda1d1730b","tarball":"https://registry.npmjs.org/@belief997/video-converter/-/video-converter-1.0.0.tgz","fileCount":50,"unpackedSize":178544,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIECSgSDpRwr1cwNfWus9uX6c3mAeix5M/OFz5G0KTgRvAiAjjuXs9z7HRnKIRqf+yImCfRXWWG/XZehnaa79KCg6/g=="}]},"_npmUser":{"name":"belief997","email":"xieyr997@gmail.com"},"directories":{},"maintainers":[{"name":"belief997","email":"xieyr997@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/video-converter_1.0.0_1768887753399_0.3761176434964071"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-20T05:42:33.347Z","1.0.0":"2026-01-20T05:42:33.554Z","modified":"2026-01-20T05:42:33.784Z"},"maintainers":[{"name":"belief997","email":"xieyr997@gmail.com"}],"description":"Video converter with MJPEG, AVI-MJPEG, and H264 output formats. Supports 8-byte frame alignment for AVI files.","homepage":"https://github.com/Belief997/w01-video_converter#readme","keywords":["video","converter","ffmpeg","mjpeg","h264","avi","video-processing","frame-alignment","typescript"],"repository":{"type":"git","url":"git+https://github.com/Belief997/w01-video_converter.git","directory":"video-converter-ts"},"author":{"name":"Belief997"},"bugs":{"url":"https://github.com/Belief997/w01-video_converter/issues"},"license":"MIT","readme":"# Video Converter TypeScript\r\n\r\n视频转换工具 - TypeScript 实现版本，支持多种输出格式。\r\n\r\n## 功能特性\r\n\r\n- 支持三种输出格式：MJPEG、AVI-MJPEG、H264\r\n- 自动检测视频信息（分辨率、帧率、时长等）\r\n- 进度显示\r\n- AVI 文件 8 字节对齐处理\r\n- H264 自定义头部封装\r\n\r\n## 系统要求\r\n\r\n- Node.js 18+\r\n- FFmpeg（需要在系统 PATH 中可用）\r\n\r\n## 安装\r\n\r\n```bash\r\ncd video-converter-ts\r\nnpm install\r\nnpm run build\r\n```\r\n\r\n## 使用方法\r\n\r\n### 查看视频信息\r\n\r\n```bash\r\nnode dist/cli.js --info -i <输入视频路径>\r\n```\r\n\r\n示例：\r\n```bash\r\nnode dist/cli.js --info -i ../test_video/birds.mp4\r\n```\r\n\r\n### 视频转换\r\n\r\n基本语法：\r\n```bash\r\nnode dist/cli.js -i <输入文件> -o <输出文件> -f <格式> [选项]\r\n```\r\n\r\n#### 支持的格式\r\n\r\n| 格式 | 参数值 | 说明 |\r\n|------|--------|------|\r\n| MJPEG | `mjpeg` | Motion JPEG 格式，连续 JPEG 帧 |\r\n| AVI-MJPEG | `avi_mjpeg` | AVI 容器封装的 MJPEG，8 字节对齐 |\r\n| H264 | `h264` | H.264 裸流，带自定义头部 |\r\n\r\n#### 转换示例\r\n\r\n转换为 MJPEG：\r\n```bash\r\nnode dist/cli.js -i ../test_video/birds.mp4 -o output.mjpeg -f mjpeg -v\r\n```\r\n\r\n转换为 AVI-MJPEG：\r\n```bash\r\nnode dist/cli.js -i ../test_video/birds.mp4 -o output.avi -f avi_mjpeg -v\r\n```\r\n\r\n转换为 H264：\r\n```bash\r\nnode dist/cli.js -i ../test_video/birds.mp4 -o output.h264 -f h264 -v\r\n```\r\n\r\n#### 命令行参数\r\n\r\n| 参数 | 简写 | 说明 |\r\n|------|------|------|\r\n| `--input` | `-i` | 输入视频文件路径（必需） |\r\n| `--output` | `-o` | 输出文件路径（必需） |\r\n| `--format` | `-f` | 输出格式：mjpeg, avi_mjpeg, h264（必需） |\r\n| `--fps` | `-r` | 目标帧率（可选，默认保持原帧率） |\r\n| `--quality` | `-q` | 质量参数（可选，MJPEG: 1-31，H264 CRF: 0-51） |\r\n| `--verbose` | `-v` | 显示详细信息 |\r\n| `--debug` | `-d` | 调试模式：保留中间文件 |\r\n| `--info` | | 仅显示视频信息，不转换 |\r\n| `--help` | `-h` | 显示帮助信息 |\r\n\r\n### 调试模式\r\n\r\n使用 `-d` 或 `--debug` 参数启用调试模式，转换过程中的中间文件将被保留：\r\n\r\n```bash\r\nnode dist/cli.js -i ../test_video/birds.mp4 -o output.avi -f avi_mjpeg -v -d\r\n```\r\n\r\n对于 AVI-MJPEG 转换，调试模式会保留以下文件：\r\n- `output.ffmpeg.avi` - FFmpeg 直接输出（后处理前）\r\n- `output.pass1.avi` - 第一遍对齐后（JUNK 块调整，首帧对齐）\r\n- `output.avi` - 最终输出（所有帧 8 字节对齐）\r\n\r\n### 编程接口\r\n\r\n```typescript\r\nimport { VideoConverter, OutputFormat } from './dist/index.js';\r\n\r\nconst converter = new VideoConverter((current, total) => {\r\n  console.log(`进度: ${current}/${total}`);\r\n});\r\n\r\n// 获取视频信息\r\nconst info = await converter.getVideoInfo('input.mp4');\r\nconsole.log(info);\r\n\r\n// 转换视频\r\nconst result = await converter.convert(\r\n  'input.mp4',\r\n  'output.mjpeg',\r\n  OutputFormat.MJPEG,\r\n  { frameRate: 25, quality: 2 }\r\n);\r\n```\r\n\r\n## 测试\r\n\r\n### 运行所有测试\r\n\r\n```bash\r\nnpm test -- --run\r\n```\r\n\r\n### 运行特定测试文件\r\n\r\n```bash\r\nnpm test -- --run tests/avi-aligner.test.ts\r\nnpm test -- --run tests/mjpeg-packer.test.ts\r\nnpm test -- --run tests/parser.test.ts\r\nnpm test -- --run tests/ffmpeg-builder.test.ts\r\nnpm test -- --run tests/ffmpeg-executor.test.ts\r\n```\r\n\r\n### 测试覆盖率\r\n\r\n```bash\r\nnpm test -- --run --coverage\r\n```\r\n\r\n## 项目结构\r\n\r\n```\r\nvideo-converter-ts/\r\n├── src/\r\n│   ├── cli.ts              # 命令行入口\r\n│   ├── converter.ts        # 主转换器\r\n│   ├── parser.ts           # 视频信息解析\r\n│   ├── ffmpeg-builder.ts   # FFmpeg 命令构建\r\n│   ├── ffmpeg-executor.ts  # FFmpeg 执行器\r\n│   ├── models.ts           # 数据模型\r\n│   ├── errors.ts           # 错误定义\r\n│   ├── index.ts            # 模块导出\r\n│   └── postprocess/\r\n│       ├── avi-aligner.ts  # AVI 8字节对齐\r\n│       ├── mjpeg-packer.ts # MJPEG 打包\r\n│       ├── h264-packer.ts  # H264 封装\r\n│       └── index.ts\r\n├── tests/\r\n│   ├── avi-aligner.test.ts\r\n│   ├── mjpeg-packer.test.ts\r\n│   ├── parser.test.ts\r\n│   ├── ffmpeg-builder.test.ts\r\n│   ├── ffmpeg-executor.test.ts\r\n│   └── h264-packer.test.ts\r\n├── dist/                   # 编译输出\r\n├── package.json\r\n├── tsconfig.json\r\n└── vitest.config.ts\r\n```\r\n\r\n## 输出格式说明\r\n\r\n### MJPEG 格式\r\n- 连续的 JPEG 帧，每帧以 SOI (0xFFD8) 开始，EOI (0xFFD9) 结束\r\n- 仅包含 baseline JPEG 帧\r\n\r\n### AVI-MJPEG 格式\r\n- 标准 AVI 容器格式\r\n- 所有帧数据 8 字节对齐（通过 JUNK 块和 APP1 段填充）\r\n- 包含 idx1 索引块\r\n\r\n### H264 格式\r\n- 自定义 32 字节头部\r\n- 包含分辨率、帧数、帧时间等信息\r\n- 后跟 H.264 裸流数据\r\n\r\n## 常见问题\r\n\r\n### FFmpeg 未找到\r\n确保 FFmpeg 已安装并在系统 PATH 中：\r\n```bash\r\nffmpeg -version\r\n```\r\n\r\n### Windows PowerShell 执行策略问题\r\n如果遇到脚本执行问题，可以使用 cmd 包装：\r\n```bash\r\ncmd /c \"npm run build\"\r\ncmd /c \"npm test -- --run\"\r\n```\r\n\r\n## 许可证\r\n\r\nMIT\r\n","readmeFilename":"README.md","_rev":"1-0baa3244f54ac9ee9b38a5f643ee7cf4"}