添加边转换边输出frame_urls
This commit is contained in:
110
README.md
110
README.md
@@ -54,23 +54,98 @@ GMapiServer 是一个轻量级、模块化的 API 服务框架,旨在为开发
|
||||
|
||||
3. 视频帧提取接口
|
||||
|
||||
• 功能: 从视频中提取指定分辨率、帧率的图片帧,支持强制分辨率调整和填充。
|
||||
• 功能: 从视频中提取指定分辨率、帧率的图片帧,支持强制分辨率调整和填充,支持B站BV号。
|
||||
|
||||
• 异步接口: POST /api/video_frame/async
|
||||
|
||||
• 参数:
|
||||
|
||||
• video_url: 视频文件 URL
|
||||
• video_url: 视频文件 URL (或使用 video_bv 参数替代)
|
||||
|
||||
• video_bv: B站视频BV号 (自动转换为URL)
|
||||
|
||||
• w: 输出宽度
|
||||
|
||||
• h: 输出高度
|
||||
|
||||
• fps: 输出帧率
|
||||
• fps: 输出帧率 (默认: 30)
|
||||
|
||||
• force_resolution: 是否强制调整分辨率
|
||||
• force_resolution: 是否强制调整分辨率 (默认: false)
|
||||
|
||||
• pad_to_target: 是否填充到目标分辨率
|
||||
• pad_to_target: 是否填充到目标分辨率 (默认: false)
|
||||
|
||||
• 返回示例:
|
||||
```json
|
||||
{
|
||||
"task_id": "abc12345",
|
||||
"status_url": "http://localhost:5000/api/task/abc12345",
|
||||
"message": "任务已创建,请使用状态URL查询进度"
|
||||
}
|
||||
```
|
||||
|
||||
• 实时任务状态响应(处理中):
|
||||
```json
|
||||
{
|
||||
"task_id": "abc12345",
|
||||
"status": "running",
|
||||
"progress": 50,
|
||||
"create_time": 1770393314.1262555,
|
||||
"start_time": 1770393314.1262555,
|
||||
"end_time": null,
|
||||
"type": "video_frame",
|
||||
"result": {
|
||||
"audio_urls": {
|
||||
"audio_dfpwm_url": "/frames/abc12345/audio.dfpwm",
|
||||
"audio_dfpwm_left_url": "/frames/abc12345/audio_left.dfpwm",
|
||||
"audio_dfpwm_right_url": "/frames/abc12345/audio_right.dfpwm"
|
||||
},
|
||||
"current_frames": 180,
|
||||
"total_frames": 6059,
|
||||
"output_resolution": {"w": 640, "h": 360},
|
||||
"frame_urls": [
|
||||
"/frames/abc12345/frame_000001.png",
|
||||
"/frames/abc12345/frame_000002.png",
|
||||
// ... 当前已生成的帧
|
||||
]
|
||||
},
|
||||
"total_logs": 15,
|
||||
"last_index": 15,
|
||||
"new_logs": ["日志1", "日志2"]
|
||||
}
|
||||
```
|
||||
|
||||
• 任务完成时结果:
|
||||
```json
|
||||
{
|
||||
"task_id": "abc12345",
|
||||
"status": "completed",
|
||||
"progress": 100,
|
||||
"create_time": 1770393314.1262555,
|
||||
"start_time": 1770393314.1262555,
|
||||
"end_time": 1770393391.1024792,
|
||||
"type": "video_frame",
|
||||
"result": {
|
||||
"audio_urls": {
|
||||
"audio_dfpwm_url": "/frames/abc12345/audio.dfpwm",
|
||||
"audio_dfpwm_left_url": "/frames/abc12345/audio_left.dfpwm",
|
||||
"audio_dfpwm_right_url": "/frames/abc12345/audio_right.dfpwm"
|
||||
},
|
||||
"duration_seconds": 303.019,
|
||||
"current_frames": 6059,
|
||||
"total_frames": 6059,
|
||||
"fps": 20,
|
||||
"output_resolution": {"w": 640, "h": 360},
|
||||
"frame_urls": [
|
||||
"/frames/abc12345/frame_000001.png",
|
||||
"/frames/abc12345/frame_000002.png",
|
||||
// ... 所有生成帧
|
||||
]
|
||||
},
|
||||
"total_logs": 164,
|
||||
"last_index": 164,
|
||||
"new_logs": ["最后日志"]
|
||||
}
|
||||
```
|
||||
|
||||
4. 异步任务状态查询
|
||||
|
||||
@@ -178,7 +253,30 @@ return {
|
||||
# 在logging_config.py文件中修改缓存清理时间
|
||||
CLEANUP_INTERVAL = 3600 # 清理临时文件的间隔(秒)
|
||||
FILE_EXPIRY = 7200 # 文件过期时间(秒)
|
||||
|
||||
|
||||
|
||||
🔥 视频帧实时进度功能
|
||||
|
||||
GMapiServer 的视频帧提取功能支持实时进度跟踪,让客户端可以在任务处理过程中实时获取已生成的帧并进行下载。
|
||||
|
||||
• 实时帧进度跟踪: 自动解析FFmpeg输出的进度信息,实时更新当前帧数
|
||||
• 智能进度计算: 基于帧数自动计算转换进度(20-80%)
|
||||
• 音频预处理: 音频在视频处理前提取,客户端可提前下载音频文件
|
||||
• 实时URL返回: 在处理过程中不断返回已生成的帧URL列表
|
||||
|
||||
## 优势特性
|
||||
|
||||
1. **减少等待时间**: 客户端无需等待整个视频处理完成
|
||||
2. **并行下载**: 可以在转换过程中并行下载已生成的帧
|
||||
3. **实时反馈**: 用户可以看到实时处理进度和日志
|
||||
4. **资源优化**: 避免了"堵车"效应,提高系统并发能力
|
||||
|
||||
## 使用建议
|
||||
|
||||
• 客户端可以轮询 `/api/task/<task_id>` 接口获取最新状态
|
||||
• 通过检查 `result.frame_urls` 列表长度变化确定新生成的帧
|
||||
• 音频文件可以立即下载(音频处理优先级更高)
|
||||
|
||||
|
||||
🔧 异步任务处理流程
|
||||
|
||||
|
||||
Reference in New Issue
Block a user