From efe92c4c2c201491a488447f3d263eb5df161f85 Mon Sep 17 00:00:00 2001 From: 18610128193 <10574456+chenweiqiang-123@user.noreply.gitee.com> Date: Wed, 1 Jul 2026 14:43:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=B4=A0=E6=9D=90=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/api/v1/resources_material.py | 2 + video-gen-api/app/api/v1/upload_material.py | 110 ++---------------- .../services/resources_material_service.py | 5 +- 3 files changed, 15 insertions(+), 102 deletions(-) diff --git a/video-gen-api/app/api/v1/resources_material.py b/video-gen-api/app/api/v1/resources_material.py index 22d4edb8..acc4f7b4 100644 --- a/video-gen-api/app/api/v1/resources_material.py +++ b/video-gen-api/app/api/v1/resources_material.py @@ -30,6 +30,7 @@ async def get_resources_material_list_api( page: int = Query(1, description="页码"), page_size: int = Query(20, description="每页数量"), db: AsyncSession = Depends(get_db), + current_user: dict = Depends(get_current_user), ) -> Any | dict: items, total = await get_resources_material_list( db=db, @@ -40,6 +41,7 @@ async def get_resources_material_list_api( resource_type=resource_type, page=page, page_size=page_size, + user_id=current_user.id, ) return { diff --git a/video-gen-api/app/api/v1/upload_material.py b/video-gen-api/app/api/v1/upload_material.py index e4911dbd..db094eb2 100644 --- a/video-gen-api/app/api/v1/upload_material.py +++ b/video-gen-api/app/api/v1/upload_material.py @@ -357,51 +357,25 @@ async def batch_update_filename( .where(GeneratedResource.file_name.is_not(None)) ) result = await db.execute(query) - db_existing_names = set(row[0] for row in result.all()) - - name_counters = {} + existing_names = set(row[0] for row in result.all()) for item in valid_items: file_name = item["file_name"] resource = item["resource"] base_name, ext = os.path.splitext(file_name) - existing_names = db_existing_names.copy() - if resource.file_name and resource.file_name in existing_names: existing_names.remove(resource.file_name) - if file_name not in name_counters: - counter = 1 - new_file_name = file_name - - while new_file_name in existing_names: - new_file_name = f"{base_name}{counter}{ext}" - counter += 1 - - name_counters[file_name] = { - "base_name": base_name, - "ext": ext, - "counter": counter, - } - existing_names.add(new_file_name) - db_existing_names.add(new_file_name) - else: - counter = name_counters[file_name]["counter"] - base_name = name_counters[file_name]["base_name"] - ext = name_counters[file_name]["ext"] - new_file_name = f"{base_name}{counter}{ext}" - - while new_file_name in existing_names: - counter += 1 - new_file_name = f"{base_name}{counter}{ext}" - - name_counters[file_name]["counter"] = counter + 1 - existing_names.add(new_file_name) - db_existing_names.add(new_file_name) + counter = 1 + new_file_name = file_name + + while new_file_name in existing_names: + new_file_name = f"{base_name}_{counter}{ext}" + counter += 1 item["resource"].file_name = new_file_name - db.add(item["resource"]) + existing_names.add(new_file_name) results.append({ "source_id": item["source_id"], @@ -423,7 +397,7 @@ async def batch_update_filename( } except Exception as e: return { - "code": 0, + "code": 1, "message": f"批量修改文件名失败:{str(e)}", "success_count": 0, "fail_count": 0, @@ -463,69 +437,3 @@ async def get_upload_history( "code": 0, "message": f"查询上传任务历史失败:{str(e)}", } - -#读取指定资源id的素材信息,包括size大小,尺寸,帧率,编码格式,码率,高宽比例 -@router.get( - "/upload-material/{resource_id}", - summary="查询上传素材信息", - description="查询指定上传素材的详细信息", -) -async def get_upload_material_info( - resource_id: str, - db: AsyncSession = Depends(get_db), -) -> Any | dict: - try: - upload_material = await db.execute( - select(GeneratedResource) - .where( - GeneratedResource.id == resource_id, - ) - ) - upload_material = upload_material.scalar_one_or_none() - if not upload_material: - return {"code": 1, "message": f"素材{resource_id}不存在"} - storage_path = upload_material.storage_path - - import ffmpeg - # 使用 ffmpeg.probe 获取视频的元数据[reference:20] - probe = ffmpeg.probe(storage_path) - - # 从 'format' 中获取文件信息和码率[reference:21] - format_info = probe['format'] - bit_rate = int(format_info.get('bit_rate', 0)) # 码率,单位 bps[reference:22] - file_size = int(format_info.get('size', 0)) # 文件大小,单位 bytes[reference:23] - duration = float(format_info.get('duration', 0)) # 时长,单位秒[reference:24] - - # 从 'streams' 中查找视频流(通常是第一个视频流) - video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) - if video_stream is None: - return None - - width = int(video_stream['width']) - height = int(video_stream['height']) - # 帧率可能以分数形式表示,如 "30000/1001"[reference:25] - r_frame_rate = video_stream.get('r_frame_rate', '0/0') - if '/' in r_frame_rate: - num, den = map(int, r_frame_rate.split('/')) - fps = num / den if den != 0 else 0 - else: - fps = float(r_frame_rate) - - codec_name = video_stream.get('codec_name', 'unknown') # 编码格式名称,如 h264[reference:26] - - return { - "width": width, - "height": height, - "fps": fps, - "codec": codec_name, - "bit_rate": bit_rate, # 单位 bps - "file_size": file_size, # 单位 bytes - "duration": duration, - "aspect_ratio": width / height - } - - except Exception as e: - return { - "code": 0, - "message": f"查询上传素材信息失败:{str(e)}", - } \ No newline at end of file diff --git a/video-gen-api/app/services/resources_material_service.py b/video-gen-api/app/services/resources_material_service.py index 92b6a479..bd0d190e 100644 --- a/video-gen-api/app/services/resources_material_service.py +++ b/video-gen-api/app/services/resources_material_service.py @@ -18,11 +18,14 @@ async def get_resources_material_list( resource_type: Optional[str] = None, page: int = 1, page_size: int = 20, + user_id: Optional[str] = None, ) -> Tuple[list[ResourcesMaterialOut], int]: resource_alias = aliased(GeneratedResource) query = select(ResourcesMaterial).where(ResourcesMaterial.deleted_at.is_(None)) - + + if user_id: + query = query.where(ResourcesMaterial.user_id == user_id) if advertiser_id: query = query.where(ResourcesMaterial.advertiser_id == advertiser_id) if material_id: