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)
|
skip_seconds = float(param)
|
||||||
if skip_seconds > 0:
|
if skip_seconds > 0:
|
||||||
effect_index += 1
|
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}]"
|
video_output_str = f"[v_eff{effect_index}]"
|
||||||
elif effect.startswith("tail:"):
|
elif effect.startswith("tail:"):
|
||||||
param = effect.split(":", 2)[1]
|
param = effect.split(":", 2)[1]
|
||||||
@@ -342,7 +342,7 @@ class FfmpegTask(object):
|
|||||||
# 使用reverse+trim+reverse的方法来精确获取最后N秒
|
# 使用reverse+trim+reverse的方法来精确获取最后N秒
|
||||||
filter_args.append(f"{video_output_str}reverse[v_rev{effect_index}]")
|
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_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}]"
|
video_output_str = f"[v_eff{effect_index}]"
|
||||||
elif effect.startswith("show:"):
|
elif effect.startswith("show:"):
|
||||||
param = effect.split(":", 2)[1]
|
param = effect.split(":", 2)[1]
|
||||||
@@ -351,7 +351,7 @@ class FfmpegTask(object):
|
|||||||
show_seconds = float(param)
|
show_seconds = float(param)
|
||||||
if show_seconds > 0:
|
if show_seconds > 0:
|
||||||
effect_index += 1
|
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}]"
|
video_output_str = f"[v_eff{effect_index}]"
|
||||||
elif effect.startswith("grid4:"):
|
elif effect.startswith("grid4:"):
|
||||||
param = effect.split(":", 2)[1]
|
param = effect.split(":", 2)[1]
|
||||||
|
|||||||
Reference in New Issue
Block a user