You've already forked FrameTour-RenderWorker
- 删除 biz/ffmpeg.py 和 biz/task.py 旧版业务模块 - 删除 entity/ffmpeg.py FFmpeg 任务实体类 - 删除 config/__init__.py 旧版配置初始化 - 更新 constant/__init__.py 常量定义,从 v1/v2 版本改为统一版本 - 修改 handlers/base.py 基础处理器,替换 OSS 相关导入为存储服务 - 添加 subprocess_args 工具函数支持跨平台进程参数配置 - 新增 probe_video_info 函数用于视频信息探测 - 新增 probe_duration_json 函数用于媒体时长探测
104 lines
2.2 KiB
Python
104 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
系统信息工具
|
|
|
|
提供系统信息采集功能。
|
|
"""
|
|
|
|
import os
|
|
import platform
|
|
import subprocess
|
|
from typing import Optional
|
|
|
|
import psutil
|
|
from constant import SOFTWARE_VERSION, DEFAULT_CAPABILITIES
|
|
|
|
|
|
def get_sys_info():
|
|
"""
|
|
获取系统信息
|
|
|
|
Returns:
|
|
dict: 系统信息字典
|
|
"""
|
|
mem = psutil.virtual_memory()
|
|
|
|
info = {
|
|
'os': platform.system(),
|
|
'cpu': f"{os.cpu_count()} cores",
|
|
'memory': f"{mem.total // (1024**3)}GB",
|
|
'cpuUsage': f"{psutil.cpu_percent()}%",
|
|
'memoryAvailable': f"{mem.available // (1024**3)}GB",
|
|
'platform': platform.system(),
|
|
'pythonVersion': platform.python_version(),
|
|
'version': SOFTWARE_VERSION,
|
|
}
|
|
|
|
# 尝试获取 GPU 信息
|
|
gpu_info = get_gpu_info()
|
|
if gpu_info:
|
|
info['gpu'] = gpu_info
|
|
|
|
return info
|
|
|
|
|
|
def get_capabilities():
|
|
"""
|
|
获取 Worker 支持的能力列表
|
|
|
|
Returns:
|
|
list: 能力列表
|
|
"""
|
|
return DEFAULT_CAPABILITIES.copy()
|
|
|
|
|
|
def get_gpu_info() -> Optional[str]:
|
|
"""
|
|
尝试获取 GPU 信息
|
|
|
|
Returns:
|
|
str: GPU 信息,失败返回 None
|
|
"""
|
|
try:
|
|
# 尝试使用 nvidia-smi
|
|
result = subprocess.run(
|
|
['nvidia-smi', '--query-gpu=name', '--format=csv,noheader'],
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=5
|
|
)
|
|
if result.returncode == 0:
|
|
gpu_name = result.stdout.strip().split('\n')[0]
|
|
return gpu_name
|
|
except Exception:
|
|
pass
|
|
|
|
return None
|
|
|
|
|
|
def get_ffmpeg_version() -> str:
|
|
"""
|
|
获取 FFmpeg 版本
|
|
|
|
Returns:
|
|
str: FFmpeg 版本号
|
|
"""
|
|
try:
|
|
result = subprocess.run(
|
|
['ffmpeg', '-version'],
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=5
|
|
)
|
|
if result.returncode == 0:
|
|
first_line = result.stdout.split('\n')[0]
|
|
# 解析版本号,例如 "ffmpeg version 6.0 ..."
|
|
parts = first_line.split()
|
|
for i, part in enumerate(parts):
|
|
if part == 'version' and i + 1 < len(parts):
|
|
return parts[i + 1]
|
|
except Exception:
|
|
pass
|
|
|
|
return 'unknown'
|