annotation segment mode

This commit is contained in:
j 2026-01-30 15:41:27 +01:00
commit 400b880f63

View file

@ -995,7 +995,7 @@ def reshoot_item_segments(item, character, keep=False):
source = item.files.all()[0].data.path
info = ox.avinfo(source)
duration = info["duration"]
if duration < max_duration:
if duration < max_duration and character != "annotation":
segments = [duration]
else:
segments = get_item_segments(item, max_duration=max_duration)
@ -1024,15 +1024,15 @@ def reshoot_item_segments(item, character, keep=False):
if character == "annotation":
a = item.annotations.filter(
layer='prompts', start__gte=position, end__gt=position
).order_by('start').first()
).exclude(start__gte=segment).order_by('start').first()
if a:
segment_character = a.value
print('use character from annotation', a, segment_character, 'for %s-%s' % (position, segment))
else:
segment_character = None
print('use no character for %s-%s' % (position, segment))
else:
segment_character = character
if position:
segment_character = segment_first_frame_url
if segment_character:
segment_first_frame = replace_character(
item, segment_character, position, seed=seed
@ -1048,7 +1048,8 @@ def reshoot_item_segments(item, character, keep=False):
frames = int(segment_duration * 24)
trim_video(output_ai, trimmed, frames, stype == "c")
processed.append(trimmed)
first_frames.append(segment_first_frame)
if segment_character:
first_frames.append(segment_first_frame)
n += 1
position = segment
joined_output = "%s/joined.mp4" % (prefix)
@ -1318,6 +1319,7 @@ def fragment_video(filename, segmentdir, segments):
if last is None:
os.unlink(output_path)
else:
print(frame_count, output_path)
cv2.imwrite(output_path.replace(".mp4", "_last.jpg"), last)