Files
BiliNote/backend/app/utils/video_helper.py
JefferyHcool 6d06cb662d build(tauri): 更新后端端口并优化打包流程
- 将后端端口从8000 修改为 8483
- 更新前端请求基础 URL 以匹配新的后端端口
- 优化后端打包脚本,确保 .env 文件正确复制和清理
- 修改后端主程序和请求工具中的端口配置
2025-06-20 09:39:45 +08:00

70 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import shutil
from pathlib import Path
from dotenv import load_dotenv
import subprocess
import os
import uuid
load_dotenv()
api_path = os.getenv("API_BASE_URL", "http://localhost")
BACKEND_PORT= os.getenv("BACKEND_PORT", 8483)
BACKEND_BASE_URL = f"{api_path}:{BACKEND_PORT}"
from typing import Optional
def generate_screenshot(video_path: str, output_dir: str, timestamp: int, index: int) -> str:
"""
使用 ffmpeg 生成截图,返回生成图片路径
"""
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
filename = f"screenshot_{index:03}_{uuid.uuid4()}.jpg"
output_path = output_dir / filename
command = [
"ffmpeg",
"-ss", str(timestamp),
"-i", str(video_path),
"-frames:v", "1",
"-q:v", "2",
str(output_path),
"-y"
]
print("Running command:", command)
result = subprocess.run(command, capture_output=True, text=True)
if result.returncode != 0:
print("ffmpeg failed:", result.stderr)
return str(output_path)
def save_cover_to_static(local_cover_path: str, subfolder: Optional[str] = "cover") -> str:
"""
将封面图片保存到 static 目录下,并返回前端可访问的路径
:param local_cover_path: 本地原封面路径比如提取出来的jpg
:param subfolder: 子目录,默认是 cover可以自定义
:return: 前端访问路径,例如 /static/cover/xxx.jpg
"""
# 项目根目录
project_root = os.getcwd()
# static目录
static_dir = os.path.join(project_root, "static")
# 确定目标子目录
target_dir = os.path.join(static_dir, subfolder or "cover")
os.makedirs(target_dir, exist_ok=True)
# 拷贝文件
file_name = os.path.basename(local_cover_path)
target_path = os.path.join(target_dir, file_name)
shutil.copy2(local_cover_path, target_path) # 保留原时间戳、权限
image_relative_path = f"/static/{subfolder}/{file_name}".replace("\\", "/")
url_path = f"{BACKEND_BASE_URL.rstrip('/')}/{image_relative_path.lstrip('/')}"
# 返回前端可访问的路径
return url_path