安全扫描
OpenClaw
安全
high confidence该技能的文件、依赖和说明均与其声明目的相符(提供适用于 Node 的 FFmpeg 二进制及使用模式);所请求的内容与 FFmpeg 使用无关或过度的部分不存在。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.22026/4/19
- 将 scripts/ffmpeg_runner.js 替换为 templates/node_patterns.txt,把 Node.js 使用模式与示例移至模板文件。
● Pending
安装命令
点击复制官方npx clawhub@latest install ffmpeg-static
🇨🇳 镜像加速npx clawhub@latest install ffmpeg-static --registry https://cn.longxiaskill.com
技能文档
本技能将 ffmpeg-static(一个以 npm 包形式分发的独立 FFmpeg 二进制)注入每次助手交互。若系统已安装原生 FFmpeg,则优先使用系统版本(通常更新且支持 GPU);否则回退到捆绑版本。两条路径均支持 FFmpeg 全部功能。
无需修改 PATH。require('ffmpeg-static')返回二进制绝对路径;脚本直接传给child_process.spawn。
---
安全提示
ffmpeg-static会在npm install时从 GitHub Releases 下载预编译二进制。请在 npmjs.com/package/ffmpeg-static 验证包。- 切勿在未校验的情况下将不可信文件名或 URL 直接传入 FFmpeg 命令——FFmpeg 支持读取 URL 与任意协议。
- 捆绑二进制不含 GPU 加速编码器(nvenc、vaapi、videotoolbox)。如需硬件加速,请使用系统 FFmpeg。
---
安装
最小安装(仅捆绑 FFmpeg 二进制)
``bash
npm install ffmpeg-static
`
项目安装含 ffprobe(推荐)
`bash
npm install ffmpeg-static ffprobe-static
`
验证二进制路径
`bash
node -e "console.log(require('ffmpeg-static'))"
# 例 /path/to/node_modules/ffmpeg-static/ffmpeg
`
查看最终选用(捆绑 vs 系统)
`bash
node scripts/resolve_ffmpeg.js
` ---
二进制解析逻辑
优先级如下:
FFMPEG_PATH 环境变量——显式指定,最高优先级
系统 FFmpeg——遍历 PATH 并用 fs.accessSync 检测;若存在则优先(更新、支持硬件加速)
捆绑二进制—— require('ffmpeg-static') 返回的绝对路径;npm install 后必定存在 `js
// 统一解析——所有脚本均用此模式
const { resolveFfmpeg } = require('./scripts/resolve_ffmpeg');
const ffmpegPath = resolveFfmpeg(); // 找不到则抛错
` ---
常用操作
转码为 H.264/AAC MP4
`bash
$(node -e "process.stdout.write(require('ffmpeg-static'))") \
-i input.mkv -c:v libx264 -crf 23 -preset fast \
-c:a aac -b:a 128k output.mp4
`
提取指定时间缩略图
`bash
ffmpeg -ss 00:01:30 -i input.mp4 -frames:v 1 -q:v 2 thumb.jpg
`
音频转 MP3
`bash
ffmpeg -i input.flac -q:a 2 output.mp3
`
仅提取音频流
`bash
ffmpeg -i input.mp4 -vn -c:a copy audio.aac
`
无损裁剪
`bash
ffmpeg -ss 00:00:10 -to 00:01:00 -i input.mp4 -c copy trimmed.mp4
`
拼接文件
`bash
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
`
filelist.txt 格式:
`
file '/abs/path/clip1.mp4'
file '/abs/path/clip2.mp4'
`
缩放视频(保持比例)
`bash
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:a copy scaled.mp4
`
生成动图 GIF
`bash
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
`
HLS 打包
`bash
ffmpeg -i input.mp4 -codec: copy -start_number 0 \
-hls_time 10 -hls_list_size 0 -f hls output.m3u8
` ---
在 Node.js 中使用
模板见 templates/node_patterns.txt。关键步骤:
- 用
scripts/resolve_ffmpeg.js 解析二进制(纯 fs,无 shell)
用 Node 的 child_process.spawn 启动 FFmpeg
或 使用 fluent-ffmpeg——通过 ffmpeg.setFfmpegPath() 传入已解析路径 `js
// 在你的项目里(非 skill 内部)
const { resolveFfmpeg } = require('ffmpeg-static-skill/scripts/resolve_ffmpeg');
const ffmpegBin = resolveFfmpeg(); // 绝对路径,可直接给 spawn 或 fluent-ffmpeg
`
详见 templates/node_patterns.txt 中的 spawn、进度、ffprobe、fluent-ffmpeg 片段。 ---
环境变量
| 变量 | 作用 |
|------|------|
| FFMPEG_PATH | 覆盖 FFmpeg 二进制路径,优先级最高 |
| FFPROBE_PATH | 覆盖 ffprobe 二进制路径 |
| FFMPEG_STATIC_SKIP_BINARY_DOWNLOAD | 设为 1 可在 npm install` 时跳过下载(配合系统 FFmpeg 使用) | ---
最佳实践
数据来源:ClawHub ↗ · 中文优化:龙虾技能库