You've already forked FrameTour-RenderWorker
q
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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}",
|
||||
]
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from typing import List
|
||||
import json
|
||||
from .base import EffectProcessor
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user