fix(P0): 素材库视频上传时生成缩略图
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 17s
AI Code Review / AI Code Review (pull_request) Failing after 33s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 26s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 46s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m29s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 6m11s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1416h47m37s
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Failing after 1416h47m50s
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Failing after 1416h47m51s
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Failing after 1416h47m52s
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Failing after 1416h47m53s
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Failing after 1416h47m53s
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Failing after 1416h47m55s
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Failing after 1416h47m55s
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Failing after 1416h47m55s
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Failing after 1417h19m58s
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Failing after 1417h20m0s
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1417h20m0s

- ingest流程中添加视频缩略图生成(使用15%处抽帧)
- 缩略图生成失败不影响主流程,仅打warning日志
- 修复素材库视频全部显示渐变占位图的问题

Issue: #577
This commit is contained in:
CI Bot
2026-07-19 14:40:50 +08:00
parent 2f64fea7f0
commit e003a43894
+25
View File
@@ -280,6 +280,7 @@ def ingest_asset(job_id: str) -> dict:
# 先从 OSS 下载文件到本地临时目录,再提取元数据
# (storage_key 是 OSS 内部路径,不能直接传给 ffprobe/Pillow)
local_file = None
thumbnail_url = None
try:
suffix = Path(job.storage_key).suffix or ".bin"
with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as tmp:
@@ -291,6 +292,29 @@ def ingest_asset(job_id: str) -> dict:
metadata, extract_success = {}, False
else:
metadata, extract_success = extract_media_metadata(str(local_file), media_type)
# 视频类型:生成缩略图(文件还在的时候生成)
thumbnail_url = None
if media_type == "video" and extract_success:
try:
from video_processing.thumbnail_generator import generate_and_upload_thumbnail
thumb_storage_key = f"assets/{job.project_id}/thumbnails/{job_id}.jpg"
thumbnail_url = generate_and_upload_thumbnail(
str(local_file), thumb_storage_key
)
if thumbnail_url:
logger.info(
"素材缩略图生成成功: job_id=%s url=%s",
job_id,
thumbnail_url[:80],
)
except Exception as thumb_err:
logger.warning(
"素材缩略图生成失败(不影响主流程): job_id=%s error=%s",
job_id,
thumb_err,
)
finally:
if local_file and local_file.exists():
try:
@@ -359,6 +383,7 @@ def ingest_asset(job_id: str) -> dict:
codec=metadata.get("codec") or None,
status=AssetStatus.READY,
file_hash=job.file_hash,
thumbnail_url=thumbnail_url,
)
asset_repo.create(asset)