This commit is contained in:
2025-09-24 10:50:34 +08:00
parent c055a68592
commit ec1705769c
18 changed files with 348 additions and 330 deletions

View File

@@ -1,4 +1,4 @@
from typing import List, Dict, Any
from typing import List
from .base import EffectProcessor
@@ -63,20 +63,24 @@ class CameraShotEffect(EffectProcessor):
# 选择开始部分帧
filter_args.append(
f"{start_out_str}select=lt(n\\,{int(start * self.frame_rate)}){start_out_str}"
f"{start_out_str}select=lt(n\\,"
f"{int(start * self.frame_rate)}){start_out_str}"
)
# 选择结束部分帧
filter_args.append(
f"{end_out_str}select=gt(n\\,{int(start * self.frame_rate)}){end_out_str}"
f"{end_out_str}select=gt(n\\,"
f"{int(start * self.frame_rate)}){end_out_str}"
)
# 选择中间特定帧并扩展
filter_args.append(
f"{mid_out_str}select=eq(n\\,{int(start * self.frame_rate)}){mid_out_str}"
f"{mid_out_str}select=eq(n\\,"
f"{int(start * self.frame_rate)}){mid_out_str}"
)
filter_args.append(
f"{mid_out_str}tpad=start_mode=clone:start_duration={duration:.4f}{mid_out_str}"
f"{mid_out_str}tpad=start_mode=clone:"
f"start_duration={duration:.4f}{mid_out_str}"
)
# 如果需要旋转
@@ -85,7 +89,8 @@ class CameraShotEffect(EffectProcessor):
# 连接三部分
filter_args.append(
f"{start_out_str}{mid_out_str}{end_out_str}concat=n=3:v=1:a=0,setpts=N/{self.frame_rate}/TB{final_output}"
f"{start_out_str}{mid_out_str}{end_out_str}concat=n=3:v=1:a=0,"
f"setpts=N/{self.frame_rate}/TB{final_output}"
)
return filter_args, final_output

View File

@@ -35,7 +35,8 @@ class TailEffect(EffectProcessor):
# 使用reverse+trim+reverse的方法来精确获取最后N秒
filter_args = [
f"{video_input}reverse[v_rev{effect_index}]",
f"[v_rev{effect_index}]trim=duration={tail_seconds}[v_trim{effect_index}]",
f"[v_rev{effect_index}]trim=duration={tail_seconds}"
f"[v_trim{effect_index}]",
f"[v_trim{effect_index}]reverse{output_stream}",
]

View File

@@ -1,5 +1,4 @@
from typing import List
import json
from .base import EffectProcessor

View File

@@ -1,4 +1,3 @@
import os
import time
from typing import List, Optional
@@ -10,8 +9,6 @@ from util.ffmpeg import probe_video_info, probe_video_audio
from util.ffmpeg_utils import (
build_base_ffmpeg_args,
build_null_audio_input,
build_amix_filter,
build_overlay_scale_filter,
get_annexb_filter,
build_standard_output_args,
)
@@ -209,8 +206,6 @@ class FFmpegCommandBuilder:
pos_json = self.task.ext_data.get("posJson", "{}")
pos_data = safe_json_loads(pos_json, {})
_v_w = pos_data.get("imgWidth", 1)
_v_h = pos_data.get("imgHeight", 1)
_f_x = pos_data.get("ltX", 0)
_f_x2 = pos_data.get("rbX", 0)
_f_y = pos_data.get("ltY", 0)

View File

@@ -1,10 +1,8 @@
import os
import uuid
from typing import List, Optional, Dict, Any
from dataclasses import dataclass, field
from enum import Enum
from config.settings import get_ffmpeg_config
from util.exceptions import TaskValidationError, EffectError
from entity.effects import registry as effect_registry