Update app/main.py
Browse files- app/main.py +13 -4
app/main.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
import os
|
| 2 |
import uuid
|
| 3 |
import hashlib
|
|
@@ -21,6 +22,13 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
| 21 |
# Ключ API для доступа
|
| 22 |
API_KEY = os.getenv("API_KEY")
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
# Директории для хранения данных
|
| 25 |
BASE_DATA_DIR = Path("data")
|
| 26 |
UPLOADS_DIR = BASE_DATA_DIR / "uploads"
|
|
@@ -221,7 +229,7 @@ async def cleanup_files():
|
|
| 221 |
app = FastAPI(
|
| 222 |
title="ab-av1 API Server",
|
| 223 |
description="REST API для асинхронного кодирования видео. **Интерактивная документация: `/docs`**.",
|
| 224 |
-
version="2.
|
| 225 |
)
|
| 226 |
|
| 227 |
@app.on_event("startup")
|
|
@@ -363,10 +371,12 @@ def run_auto_encode_workflow(task_id: str, request: AutoEncodeRequest):
|
|
| 363 |
|
| 364 |
temp_cfr_path = OUTPUTS_DIR / f"{task_id}_temp_cfr.mp4"
|
| 365 |
|
| 366 |
-
# ---
|
| 367 |
cfr_cmd = [
|
| 368 |
"ffmpeg", "-i", str(original_input_path), "-vf", f"fps={target_fps}",
|
| 369 |
-
"-c:v", "libsvtav1",
|
|
|
|
|
|
|
| 370 |
"-c:a", "copy", "-c:s", "copy", str(temp_cfr_path)
|
| 371 |
]
|
| 372 |
_run_sub_task(cfr_cmd, "VFR в CFR конвертация")
|
|
@@ -402,7 +412,6 @@ def run_auto_encode_workflow(task_id: str, request: AutoEncodeRequest):
|
|
| 402 |
raise RuntimeError("Не удалось найти рекомендованный CRF в выводе crf-search.")
|
| 403 |
_log_message(f"Найден оптимальный CRF: {found_crf}")
|
| 404 |
|
| 405 |
-
# --- ИЗМЕНЕНИЕ 2: Финальное кодирование использует правильный исходник (crf_search_input) ---
|
| 406 |
_log_message("Шаг 3/4: Финальное кодирование")
|
| 407 |
final_output_path = Path(task["output_path"])
|
| 408 |
encode_cmd = [
|
|
|
|
| 1 |
+
|
| 2 |
import os
|
| 3 |
import uuid
|
| 4 |
import hashlib
|
|
|
|
| 22 |
# Ключ API для доступа
|
| 23 |
API_KEY = os.getenv("API_KEY")
|
| 24 |
|
| 25 |
+
# --- ИЗМЕНЕНИЕ: Параметры для VFR -> CFR вынесены сюда ---
|
| 26 |
+
# Настройки для конвертации видео с переменной частотой кадров (VFR)
|
| 27 |
+
# в видео с постоянной частотой кадров (CFR).
|
| 28 |
+
# Этот шаг выполняется для стабилизации видео перед основным кодированием.
|
| 29 |
+
VFR_TO_CFR_CRF = 17 # Качество (чем ниже, тем лучше). 17 - очень высокое.
|
| 30 |
+
VFR_TO_CFR_PRESET = 4 # Скорость (чем ниже, тем качественнее, но медленнее).
|
| 31 |
+
|
| 32 |
# Директории для хранения данных
|
| 33 |
BASE_DATA_DIR = Path("data")
|
| 34 |
UPLOADS_DIR = BASE_DATA_DIR / "uploads"
|
|
|
|
| 229 |
app = FastAPI(
|
| 230 |
title="ab-av1 API Server",
|
| 231 |
description="REST API для асинхронного кодирования видео. **Интерактивная документация: `/docs`**.",
|
| 232 |
+
version="2.8.0", # Версия обновлена
|
| 233 |
)
|
| 234 |
|
| 235 |
@app.on_event("startup")
|
|
|
|
| 371 |
|
| 372 |
temp_cfr_path = OUTPUTS_DIR / f"{task_id}_temp_cfr.mp4"
|
| 373 |
|
| 374 |
+
# --- ИЗМЕНЕНИЕ: Используются переменные из конфигурации ---
|
| 375 |
cfr_cmd = [
|
| 376 |
"ffmpeg", "-i", str(original_input_path), "-vf", f"fps={target_fps}",
|
| 377 |
+
"-c:v", "libsvtav1",
|
| 378 |
+
"-crf", str(VFR_TO_CFR_CRF),
|
| 379 |
+
"-preset", str(VFR_TO_CFR_PRESET),
|
| 380 |
"-c:a", "copy", "-c:s", "copy", str(temp_cfr_path)
|
| 381 |
]
|
| 382 |
_run_sub_task(cfr_cmd, "VFR в CFR конвертация")
|
|
|
|
| 412 |
raise RuntimeError("Не удалось найти рекомендованный CRF в выводе crf-search.")
|
| 413 |
_log_message(f"Найден оптимальный CRF: {found_crf}")
|
| 414 |
|
|
|
|
| 415 |
_log_message("Шаг 3/4: Финальное кодирование")
|
| 416 |
final_output_path = Path(task["output_path"])
|
| 417 |
encode_cmd = [
|