{"id":20151991,"url":"https://github.com/wanwu/cheetah-capture","last_synced_at":"2025-08-22T05:32:00.627Z","repository":{"id":63515966,"uuid":"567554677","full_name":"wanwu/cheetah-capture","owner":"wanwu","description":"cheetah-capture是基于ffmpeg的wasm截取视频帧工具","archived":false,"fork":false,"pushed_at":"2024-05-22T10:31:21.000Z","size":10440,"stargazers_count":90,"open_issues_count":2,"forks_count":7,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-05-22T11:31:29.734Z","etag":null,"topics":["capture","ffmpeg","frame","webassembly"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wanwu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-18T03:06:20.000Z","updated_at":"2024-06-15T09:20:10.640Z","dependencies_parsed_at":"2024-05-22T11:31:12.990Z","dependency_job_id":"cf77d137-0e32-4d26-ac39-79de528b1804","html_url":"https://github.com/wanwu/cheetah-capture","commit_stats":{"total_commits":75,"total_committers":3,"mean_commits":25.0,"dds":"0.053333333333333344","last_synced_commit":"e0dc3af9ab9bfa450ee897ce38c47193fd60224e"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanwu%2Fcheetah-capture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanwu%2Fcheetah-capture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanwu%2Fcheetah-capture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanwu%2Fcheetah-capture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wanwu","download_url":"https://codeload.github.com/wanwu/cheetah-capture/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230561013,"owners_count":18245324,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["capture","ffmpeg","frame","webassembly"],"created_at":"2024-11-13T23:08:14.533Z","updated_at":"2024-12-20T09:07:11.910Z","avatar_url":"https://github.com/wanwu.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cheetah-capture\n\n\u003cdiv\u003e\n\u003cimg src=\"http://bj.bcebos.com/baidu-rmb-video-cover-1/goods/2022-11/1668701480293/dd3a15fcc40b.png\" height=\"60\" alt=\"cheetah\" /\u003e\n\u003c/div\u003e\n基于自定义编译ffmpeg的截帧工具，支持Mp4、Mov、Avi、Webm、Mkv等主流格式。\n\n## API\n\u003e 整体调用流程，调用`initCapture`方法，传入worker和wasm路径，返回cheetahCapture对象，调用cheetahCapture上的方法进行mount文件、抽帧、获取元数据等操作，结束后调用free进行释放。\n\n`initCapture`：`({workerPath, wasmPath}) =\u003e Promise\u003ccapture\u003e` 初始化worker环境，拉取wasm，返回capture方法\n接受参数如下\n|  参数   | 类型  | 含义  | 是否必须  |\n|  ----  | ----  |----  |----  |\n| workerPath  | URL / string | woker路径，eg:node_modules/dist/capture.worker.js，因为有woker有同源限制，你可以传递BlobUrl来解决  | y  |\n| wasmPath  | URL / string | wasm路径，eg:node_modules/dist/capture.worker.wasm | y |\n\n`mountFile`: `(file: File) =\u003e string` 挂载文件，返回mountFile的`fileName`，接受参数如下\n接受参数如下\n|  参数   | 类型  |含义  | 是否必须  |\n|  ----  | ----  |----  |----  |\n| path  | string | workerfs建立文件目录 | n，默认`/working` |\n| file  | File / blob |  文件  | y |\n\n为了兼容V0.1.x版本，`capture`方法兼容不调用mountFile可以直接使用，传入mountFile需要的参数，会在capture内部进行mountFile，如果您选择这种方式我们将会主动接管你的生命周期，为你进行内存释放操作。\n`capture`: `(args) =\u003e void` 在worker里执行截帧方法\n接受参数如下\n|  参数   | 类型  |含义  | 是否必须  |\n|  ----  | ----  |----  |----  |\n| info  | number[] / number |  传递number是按照数目抽帧，传递数组是指定抽帧的时间 | y |\n| path  | string | workerfs建立文件目录 | n |\n| file  | File / blob |  文件  | n，v0.1必须 |\n| onChange  | (prev: PrevType, now: nowType, info: {width: number, height: number, duration: number}) =\u003e void | 当抽帧结果变化的回调  | n |\n| onSuccess  | (prev: PrevType) =\u003e void  | 当抽帧结束并成功的回调  | n |\n| onError  | (errmeg: string) =\u003e void | 当抽帧过程出现错误的回调  | n |\n\n`getMetadata: (args: {info: string; })=\u003e void` 获取视频元数据，具体args参数如下\n|  参数   | 类型  |含义  | 是否必须  |\n|  ----  | ----  |----  |----  |\n| info  | string |  要获取的元数据的key | y |\n| onSuccess  | (args: {meta: string}) =\u003e void  | 读取成功的回调，无论是否有该key都会执行，没有返回的空字符串  | n |\n\n`free: (args)=\u003e void` 释放文件占用的存储空间，接受参数如下，释放的是文件，目录文件夹不会被释放\n|  参数   | 类型  |含义  | 是否必须  |\n|  ----  | ----  |----  |----  |\n| onSuccess  | () =\u003e void  | 成功的回调  | n |\n\n* 使用例子可以参考 `demo/index.html`。\n\n## 依赖库\u0026编译工具\n\n* ffmpeg-3.4.8\n* emscripten\n\n\n## 准备工作\n\n* 编译前需要下载 [ffmpeg-3.4.8.tar.xz](http://ffmpeg.org/releases/ffmpeg-3.4.8.tar.xz) 并解压至 `script` 目录下方。\n\n* emcc下载:git clone https://github.com/emscripten-core/emsdk.git\n* 安装emsdk，在emsdk目录下执行\n\n```shell\n  git pull\n  # Download and install the latest SDK tools.\n  ./emsdk install latest\n  # Make the \"latest\" SDK \"active\" for the current user. (writes .emscripten file)\n  ./emsdk activate latest\n   # Activate PATH and other environment variables in the current terminal\n   source ./emsdk_env.sh\n```\n\n* `emsdk` 需要安装于代码库根目录\n\n## 编译脚本\n* 安装依赖 `npm i`，执行script目录下的脚本\n`script`下面是编译脚本\n`build_ffmpeg-3.4.8.sh` 编译本地c编译环境的ffmpeg的lib库\n`build-emcc.sh` 编译emcc环境需要的ffmpeg的lib库，编译结果lib/ffmpeg-emcc\n`build_wasm.sh` 使用ems编译wasm 和 glue code \u0026 worker code\n`build.sh` 同上以及生成dts类型\n\n如果只修改了c的代码和ts代码，直接执行`sh build_wasm.sh`即可。\n## demo运行\n\ndemo文件夹下`index.html` 使用`live server`启动即可，`live-server --port=5501`\n\n## 调试环境准备\n\n在已经完成准备工作的前提\n\n- 若进行c环境调试 scripts目录下执行`sh build_ffmpeg-3.4.8.sh`编译你的对应环境的lib，`sh reload.sh`执行capture.c 文件。\n- 进行js环境调试，先执行`build-emcc.sh`生产emcc环境需要的ffmpeg的lib库，如若已有库直接执行 `sh build-wasm.sh`，包含`npm run webpack-capture`以及`emcc`编译命令，前者生成`index.js`以及`capture.worker.js`，后者生成`capture.worker.js`(包含emcc的胶水代码) 和`capture.worker.wasm`。\n- html环境引入，直接引入`index.js`即可，umd变量`cheetahCapture`。\n\n## 关于版本控制\n\n版本的hash不会在类库层面去做 倾向于业务方使用打包工具来做。\n\n## 提交及发包\n\n本地提交`npm run commit`\n更新并写入changelog`npm run release`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwanwu%2Fcheetah-capture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwanwu%2Fcheetah-capture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwanwu%2Fcheetah-capture/lists"}