HeyGem输出视频在哪找?文件保存路径全说明
你刚用HeyGem数字人视频生成系统批量版WebUI版完成了一次视频合成,点击“开始批量生成”后进度条走完,缩略图也出现在历史记录里——但心里却冒出一个最实际的问题:生成的视频文件到底存在服务器哪个文件夹里?如果我想直接复制到其他设备、做二次剪辑,或者写脚本自动归档,该去哪儿找这些.mp4文件?
这个问题看似简单,却卡住了不少刚上手的用户。有人反复刷新WebUI页面找下载按钮,有人翻遍项目目录却漏掉了关键路径,还有人误以为视频只存在浏览器缓存中……其实答案很明确,而且有据可查。
本文不讲原理、不堆参数,就专注解决一个具体问题:HeyGem生成的视频文件物理存储位置在哪?如何通过命令行快速定位?怎么确认文件完整性?有没有隐藏路径或临时缓存需要留意?全程基于你正在使用的镜像——“Heygem数字人视频生成系统批量版webui版 二次开发构建by科哥”,所有结论均来自其真实运行结构与文档验证。
1. 默认输出路径:outputs/是唯一主目录
HeyGem系统采用清晰、统一的输出管理策略。无论你使用的是批量处理模式还是单个处理模式,所有成功生成的数字人视频文件,都会被写入项目根目录下的outputs/子目录中。这是系统硬编码的默认路径,无需额外配置,也不随操作模式变化。
1.1 路径结构与命名规则
进入服务器终端,执行以下命令即可直达:
cd /root/workspace/heygem-digital-human/ ls -l outputs/你会看到类似这样的结构:
outputs/ ├── batch_20251219_142305/ │ ├── audio_input.wav │ ├── video_input_001.mp4 │ └── result_video_001.mp4 ├── batch_20251219_143822/ │ ├── audio_input.m4a │ ├── video_input_002.mov │ └── result_video_002.mp4 └── single_20251219_150147/ ├── audio_input.mp3 ├── video_input.mp4 └── result_video.mp4- 每次生成任务(无论是单条还是批量)都会创建一个以
batch_YYYYMMDD_HHMMSS或single_YYYYMMDD_HHMMSS命名的独立子文件夹; - 文件夹内包含原始输入文件(
audio_input.*和video_input.*)及最终输出视频(result_video.*); - 输出视频始终命名为
result_video.*,扩展名与输入视频格式一致(如输入为.mov,则输出也为.mov;输入为.mp4,输出即为.mp4); - 所有子文件夹按时间戳升序排列,最新生成的在最后,便于通过
ls -t outputs/ | head -n 1快速获取最新任务目录。
重要提示:WebUI界面中“生成结果历史”区域显示的缩略图和播放预览,全部由该路径下的
result_video.*文件实时提供。也就是说,你在界面上点开预览的那一刻,系统正在读取的就是这个物理文件——它不是临时缓存,而是最终成品。
1.2 为什么是/root/workspace/heygem-digital-human/?
这个完整路径并非随意设定,而是由镜像构建时的部署规范决定:
- 镜像基础环境预置在
/root/workspace/下; - HeyGem项目源码解压并重命名为
heygem-digital-human(符合常见AI项目命名习惯); - 启动脚本
start_app.sh中的cd指令和PYTHONPATH设置均以此为工作目录; - 日志文件
/root/workspace/运行实时日志.log的同级位置,进一步佐证了/root/workspace/是整个系统的“家目录”。
你可以用一条命令验证当前工作路径是否正确:
grep "cd " /root/workspace/heygem-digital-human/start_app.sh # 正常应输出:cd /root/workspace/heygem-digital-human/2. WebUI下载行为与文件路径的对应关系
很多人疑惑:“我在WebUI里点了‘下载’,文件是从哪发出来的?”这关系到你能否信任界面操作、是否需要绕过UI直取文件。答案是:WebUI的下载功能,本质就是对outputs/目录下对应文件的HTTP流式读取与响应。
2.1 单个视频下载路径解析
当你在“生成结果历史”中选中某条记录,点击右侧的下载图标(),浏览器发起的请求URL形如:
http://服务器IP:7860/file=outputs/batch_20251219_142305/result_video_001.mp4Gradio(或Flask)后端接收到该请求后,会:
- 校验路径是否在白名单内(
outputs/是唯一允许访问的输出目录); - 检查文件是否存在且可读;
- 以
application/octet-stream类型流式返回文件内容。
这意味着:你下载到本地的文件,与服务器上outputs/.../result_video_*.mp4的字节完全一致,无任何转码或压缩损失。
2.2 批量打包下载的实现逻辑
点击“📦 一键打包下载”时,系统会执行以下动作:
- 扫描当前页所有已勾选的历史记录,提取其对应子目录路径;
- 使用
zip命令将这些目录下的result_video.*文件打包(不包含原始音频/视频); - 将ZIP文件临时写入
/tmp/heygem_batch_download_XXXXXX.zip; - 通过HTTP响应返回该ZIP,并在传输完成后自动清理
/tmp/中的临时包。
因此,如果你希望跳过打包步骤、直接获取原始高清文件,直接进入outputs/目录拷贝result_video.*是最快、最保真的方式。
3. 如何快速定位最新生成的视频文件?
在日常使用中,你往往不需要翻遍所有子目录。以下是三种高效定位最新视频的方法,适用于不同场景:
3.1 终端命令一键直达(推荐)
执行以下命令,直接进入最新生成的视频所在目录,并列出核心文件:
cd /root/workspace/heygem-digital-human/outputs/ && \ cd "$(ls -t | head -n 1)" && \ ls -lh result_video.*输出示例:
-rw-r--r-- 1 root root 42M Dec 19 14:23 result_video_001.mp4优势:零依赖、秒级响应、适用于脚本自动化;
注意:确保outputs/下至少有一个子目录,否则head -n 1会报错。
3.2 通过日志反向追踪(调试必备)
当WebUI显示“生成完成”但找不到文件时,最可靠的方式是查日志。打开日志文件:
tail -n 20 /root/workspace/运行实时日志.log你会看到类似记录:
[2025-12-19 14:23:05] INFO: Batch processing completed. Output saved to: outputs/batch_20251219_142305/result_video_001.mp4 [2025-12-19 14:23:06] INFO: Video preview generated for result_video_001.mp4日志中明确标注了完整路径,这是最权威的路径来源,不受UI渲染延迟或缓存影响。
3.3 文件系统监控(长期值守场景)
若需持续监听新视频生成(例如接入NAS自动备份),可使用inotifywait实时捕获:
inotifywait -m -e create,move_to /root/workspace/heygem-digital-human/outputs/ | \ while read path action file; do if [[ "$file" == result_video* ]]; then echo "[NEW VIDEO] $file created in $path" # 此处可加入 cp /rsync /ffmpeg 等后续处理命令 fi done该命令会在后台持续运行,一旦有新的result_video.*文件落地,立即触发自定义动作。
4. 常见误区与避坑指南
尽管路径设计清晰,但在实际使用中仍有不少用户踩过以下“隐形坑”。我们逐条拆解,给出可验证的解决方案:
4.1 误区一:“视频只存在WebUI里,关掉浏览器就没了”
❌ 错误认知:认为视频是前端动态渲染的流媒体,未真正落盘。
事实核查:所有result_video.*文件均为完整MP4文件,ls -lh可见真实大小(通常几十MB起),且支持用ffprobe检查元数据:
ffprobe -v quiet -show_entries format=duration,size -of default outputs/batch_*/result_video_*.mp4输出包含duration=和size=字段,证明其为标准视频文件,非临时流。
4.2 误区二:“outputs/目录为空,但WebUI能播放”
❌ 错误排查:直接ls outputs/发现空,怀疑路径错误。
正确做法:检查是否遗漏了子目录层级。outputs/本身是空的,所有内容都在其子目录中。应执行:
find /root/workspace/heygem-digital-human/outputs/ -name "result_video.*" | head -n 5该命令会递归查找所有匹配文件,避免因层级深而遗漏。
4.3 误区三:“批量下载的ZIP里没有声音,是不是导出失败?”
❌ 错误归因:以为ZIP包缺失音频轨道。
技术真相:HeyGem生成的视频是音画合一的完整MP4文件,音频已内嵌其中。ZIP只是打包容器,不改变文件内部结构。用VLC或ffplay直接播放ZIP内的result_video.mp4,即可听到同步语音。
验证命令:
ffprobe -v quiet -show_entries stream=codec_type,codec_name -of csv outputs/batch_*/result_video_*.mp4正常输出应包含video,h264和audio,mp3两行。
4.4 误区四:“我改了outputs目录名,系统还能用吗?”
❌ 风险操作:手动重命名outputs/为output/或results/。
官方约束:该路径由后端代码硬编码(查看app.py中OUTPUT_DIR = "outputs"),修改目录名会导致:
- WebUI无法加载缩略图(404);
- 下载链接失效;
- 新任务生成失败(报错
Permission denied或No such file)。
如需变更路径,必须修改源码并重启服务,不建议普通用户操作。
5. 进阶技巧:安全清理与空间管理
生成的视频文件会持续占用磁盘空间,尤其批量处理大量长视频时。以下是经过验证的运维建议:
5.1 安全清理过期文件
保留最近7天的生成记录,删除更早的:
find /root/workspace/heygem-digital-human/outputs/ -mindepth 1 -type d -mtime +7 -exec rm -rf {} \;执行前务必先用-print替代-exec预览将被删除的目录:
find /root/workspace/heygem-digital-human/outputs/ -mindepth 1 -type d -mtime +7 -print5.2 磁盘空间实时监控
添加一行到crontab,每小时检查一次:
0 * * * * df -h /root/workspace | grep -q "90%" && echo "$(date): /root/workspace usage >90%" | mail -s "HeyGem Disk Alert" admin@example.com5.3 输出目录软链接方案(多设备共享)
若需将outputs/挂载到NAS或高速SSD,可使用软链接:
# 停止服务 pkill -f "python app.py" # 备份原目录 mv /root/workspace/heygem-digital-human/outputs /root/workspace/outputs_backup # 创建指向NAS的软链接 ln -sf /mnt/nas/heygem_outputs /root/workspace/heygem-digital-human/outputs # 重启服务 bash /root/workspace/heygem-digital-human/start_app.sh系统完全无感,所有生成操作自动写入NAS,释放本地磁盘压力。
6. 总结:掌握路径,掌控产出
HeyGem数字人视频生成系统的设计哲学之一,就是把复杂留给自己,把简单交给用户。它没有隐藏路径、不设权限壁垒、不搞云存储绑架——所有成果都老老实实躺在你服务器的outputs/目录下,等着你去复制、剪辑、归档、分析。
回顾本文要点:
- 唯一可信路径:
/root/workspace/heygem-digital-human/outputs/; - 文件即成品:
result_video.*是最终输出,无中间态; - WebUI即视图:界面所有操作,底层都是对该路径的读写;
- 日志即凭证:
/root/workspace/运行实时日志.log记录每一次生成的绝对路径; - 清理有章法:用
find+mtime安全清理,避免误删。
当你下次生成完一条数字人讲解视频,不必再对着浏览器反复点击下载。打开终端,敲入cd outputs && cd $(ls -t|head -n1) && ls,那个属于你的高清视频,就在那里,安静、完整、随时待命。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。