You've already forked FrameTour-RenderWorker
fix(ffmpeg): 修复视频裁剪时间戳问题
- 在 trim 过滤器后添加 setpts 过滤器以重置时间戳 - 修复 skip、tail 和 show 效果的时间戳计算问题 - 确保裁剪后的视频片段时间戳从零开始 - 避免因时间戳不连续导致的播放问题
This commit is contained in:
@@ -329,7 +329,7 @@ class FfmpegTask(object):
|
||||
skip_seconds = float(param)
|
||||
if skip_seconds > 0:
|
||||
effect_index += 1
|
||||
filter_args.append(f"{video_output_str}trim=start={skip_seconds}[v_eff{effect_index}]")
|
||||
filter_args.append(f"{video_output_str}trim=start={skip_seconds},setpts=PTS-STARTPTS[v_eff{effect_index}]")
|
||||
video_output_str = f"[v_eff{effect_index}]"
|
||||
elif effect.startswith("tail:"):
|
||||
param = effect.split(":", 2)[1]
|
||||
@@ -342,7 +342,7 @@ class FfmpegTask(object):
|
||||
# 使用reverse+trim+reverse的方法来精确获取最后N秒
|
||||
filter_args.append(f"{video_output_str}reverse[v_rev{effect_index}]")
|
||||
filter_args.append(f"[v_rev{effect_index}]trim=duration={tail_seconds}[v_trim{effect_index}]")
|
||||
filter_args.append(f"[v_trim{effect_index}]reverse[v_eff{effect_index}]")
|
||||
filter_args.append(f"[v_trim{effect_index}]reverse,setpts=PTS-STARTPTS[v_eff{effect_index}]")
|
||||
video_output_str = f"[v_eff{effect_index}]"
|
||||
elif effect.startswith("show:"):
|
||||
param = effect.split(":", 2)[1]
|
||||
@@ -351,7 +351,7 @@ class FfmpegTask(object):
|
||||
show_seconds = float(param)
|
||||
if show_seconds > 0:
|
||||
effect_index += 1
|
||||
filter_args.append(f"{video_output_str}trim=end={show_seconds}[v_eff{effect_index}]")
|
||||
filter_args.append(f"{video_output_str}trim=end={show_seconds},setpts=PTS-STARTPTS[v_eff{effect_index}]")
|
||||
video_output_str = f"[v_eff{effect_index}]"
|
||||
elif effect.startswith("grid4:"):
|
||||
param = effect.split(":", 2)[1]
|
||||
|
||||
Reference in New Issue
Block a user