零门槛生成「真人口播」视频:飞影数字人完全指南
飞影数字人是一款基于AI的SaaS工具,可快速生成"真人出镜+语音朗读"的视频。用户只需输入文字,系统即自动合成视频,无需拍摄剪辑。支持自定义数字人模板和300+音色选择,会员还可克隆自己声音。免费版限30秒/有水印,会员版支持商用/长视频/批量生成。操作流程简单:准备文案→选择模板→配置声音→生成视频,并支持多语言、批量生产等进阶玩法。
·
一、什么是「飞影数字人」?
飞影数字人(HiFly Avatar)是一款基于 AI 的 SaaS 工具。你只要输入一段文字,系统就能自动合成一段「真人出镜 + 语音朗读」的视频。 • 无需拍摄、无需剪辑、无需真人出镜 • 支持上传自己的数字人模板,或用平台提供的公版模特 • 声音市场 300+ 免费音色可选,也支持克隆自己的声音。
二、核心概念速览
| 参数 | 是否必填 | 说明 |
|---|---|---|
| text | ❌ | 口播文案。不填则视频里人物保持静默,适合后期自行加字幕/旁白。 |
| video_url | ✅ | 数字人视频模板。可用平台公版,也可上传自己录制的 15–60 秒人物说话片段。 |
| hifly_id | ❌ | 飞影会员 ID。在个人中心 → API 密钥 里查看。不填=免费模式(有水印、限 30 秒)。 |
| hifly_agent_token | ❌ | 与 hifly_id 配套的安全令牌。会员必填,免费模式忽略。 |
| speaker_id | ❌/✅ | 声音 ID。当 text 有内容时必填,否则合成失败。免费声音在 https://hifly.cc 声音市场可试听并复制 ID。 |
三、免费 vs 会员差异
| 功能 | 免费账户 | 会员 |
|---|---|---|
| 水印 | 有 | 无 |
| 单次时长上限 | 30 秒 | 300 秒 |
| 并发任务 | 1 条 | 5 条 |
| 可商用 | 否 | 是 |
| 克隆自己声音 | 否 | 是(需额外开通) |
四、3 步生成你的第一条数字人口播
Step 1 准备素材
- 写一段 50–100 字的口播文案(text)。
- 选一条数字人模板: • 公版模特:登录 https://hifly.cc → 模板库 → 复制 video_url • 自定义模板:上传 1080p、15–60 秒、正面说话视频,系统 5 分钟完成训练并给出 video_url
Step 2 选声音
进入「声音市场」,试听并复制喜欢的 speaker_id(免费商用声音会在名称旁标注「Free」)。
Step 3 插入url地址
把video_url和speaker_id输入到工作流中
Step 4 运行工作流
点击运行工作流,等待口播视频的生成
在飞影数字人作品管理处可以看到生成的口播视频

五、进阶玩法
- 多语言口播 把 text 换成英文/日文,再选对应 speaker_id(如
en_male_adam_001)。 - 批量生产 用 Python 循环调用接口,一次性生成 100 条短视频。
- 口播 + 字幕 导出视频后,用剪映/CapCut 自动识别字幕,10 分钟完成二次包装。
- 克隆自己的声音 会员可上传 30 分钟干净干声,训练后获得专属 speaker_id,口播即本人声音。
六、代码解析
1.查询生成状态
循环执行查询,获取hifly_id下生成的视频列表,查看当前生成视频的job_id

2.循环代码执行
// 在这里,您可以通过 ‘params’ 获取节点中的输入变量,并通过 'ret' 输出结果
// 'params' 和 'ret' 已经被正确地注入到环境中
// 下面是一个示例,获取节点输入中参数名为‘input’的值:
// const input = params.input;
// 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:
// const ret = { "name": ‘小明’, "hobbies": [“看书”, “旅游”] };
async function main({ params }: Args): Promise<Output> {
await new Promise<void>(resolve => setTimeout(resolve, 1000 * 3));
return {
output: 0
};
}
3.节点执行环境中的数据处理代码,主要作用是从输入数组中提取第一个非空字符串。
async function main({ params }: Args): Promise<Output> {
return {
output: filterFirstNonEmpty(params.input)
};
}
- 异步函数,接收参数对象 { params }
- 返回包含 output 字段的对象
- 调用核心过滤函数处理输入数据
function filterFirstNonEmpty(data) {
// 输入验证 - 确保是数组
if (!Array.isArray(data)) {
throw new Error("Input data.output must be an array.");
}
// 查找第一个非空元素
const firstNonEmpty = data.find(item => item.trim() !== "");
// 返回结果或默认值
return firstNonEmpty || "";
}
主要功能
从字符串数组中提取第一个非空的有效内容
处理逻辑:
- ✅ 遍历数组,按顺序检查每个元素
- ✅ 跳过空字符串和纯空格字符串
- ✅ 返回遇到的第一个有效字符串
- ✅ 如果全部为空,返回空字符串作为降级方案
七、工作流预览图

更多推荐

所有评论(0)