c8163cbadc
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 29s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 54s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 7s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m37s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m55s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m37s
AI Code Review / AI Code Review (pull_request) Successful in 1m43s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m4s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 26s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m4s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 3m35s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m44s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m16s
66 lines
2.1 KiB
Python
Executable File
66 lines
2.1 KiB
Python
Executable File
"""裁剪引擎 — 基于 FFmpeg trim/atrim 的精确帧级裁剪.
|
||
|
||
支持:
|
||
- 入点出点裁剪(start_time / end_time / duration 三选二)
|
||
- 边界自动钳制(超出素材时长自动修正,不阻断渲染)
|
||
- 多段裁剪(一个素材裁剪出多段)
|
||
- 音画同步(视频 + 音频同步裁剪)
|
||
|
||
注:核心领域模型已抽离到 packages/domain/trim_config.py,
|
||
本模块保留薄包装层,确保向后兼容。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import logging
|
||
from typing import Any
|
||
|
||
from packages.domain.trim_config import (
|
||
TrimConfig,
|
||
TrimSegment,
|
||
)
|
||
from packages.domain.trim_config import build_audio_trim_filter as _build_audio_trim_filter # noqa: F401 — 向后兼容
|
||
from packages.domain.trim_config import build_video_trim_filter as _build_video_trim_filter
|
||
from packages.domain.trim_config import parse_segments_from_config as _parse_segments_from_config
|
||
from packages.domain.trim_config import resolve_segments as _resolve_segments
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class TrimEngine:
|
||
"""裁剪引擎 — 生成 FFmpeg trim / atrim 滤镜.
|
||
|
||
薄包装层,实际逻辑委托给 packages.domain.trim_config。
|
||
"""
|
||
|
||
@staticmethod
|
||
def build_video_trim_filter(
|
||
input_label: str,
|
||
trim: TrimConfig,
|
||
output_label: str,
|
||
) -> str:
|
||
"""构建视频裁剪滤镜链."""
|
||
return _build_video_trim_filter(input_label, trim, output_label)
|
||
|
||
@staticmethod
|
||
def build_audio_trim_filter(
|
||
input_label: str,
|
||
trim: TrimConfig,
|
||
output_label: str,
|
||
) -> str:
|
||
"""构建音频裁剪滤镜链."""
|
||
return _build_audio_trim_filter(input_label, trim, output_label)
|
||
|
||
@staticmethod
|
||
def resolve_segments(
|
||
segments: list[TrimSegment],
|
||
asset_duration: float,
|
||
) -> list[TrimSegment]:
|
||
"""解析并钳制多段裁剪配置,过滤无效段."""
|
||
return _resolve_segments(segments, asset_duration)
|
||
|
||
@staticmethod
|
||
def parse_segments_from_config(config: dict[str, Any] | None) -> list[TrimSegment]:
|
||
"""从 clip config 中解析多段裁剪配置."""
|
||
return _parse_segments_from_config(config)
|