Fix video saving overwriting files by adding auto-increment support

save_video was always producing the same filename when use_timestamp was
off, causing each run to overwrite the previous video. Now passes
auto_increment and counter_digits through to save_video, which uses
get_start_index to produce numbered filenames like frame_0001.mp4.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 01:06:45 +01:00
parent 6bfc2f0eed
commit 2f4a58f134

View File

@@ -236,13 +236,21 @@ class FastAbsoluteSaver:
return False return False
def save_video(self, frames_np, output_path, filename_prefix, use_timestamp, fps, crf, pixel_format, video_format, def save_video(self, frames_np, output_path, filename_prefix, use_timestamp, fps, crf, pixel_format, video_format,
auto_increment=False, counter_digits=4,
scores_list=None, metadata_key="sharpness_score", save_workflow=False, prompt_data=None, extra_data=None): scores_list=None, metadata_key="sharpness_score", save_workflow=False, prompt_data=None, extra_data=None):
"""Save image batch as a video file using ffmpeg. frames_np is a list/array of uint8 numpy arrays.""" """Save image batch as a video file using ffmpeg. frames_np is a list/array of uint8 numpy arrays."""
ffmpeg_path = _get_ffmpeg() ffmpeg_path = _get_ffmpeg()
ts_str = f"_{int(time.time())}" if use_timestamp else ""
ext = ".mp4" if video_format == "mp4" else ".webm" ext = ".mp4" if video_format == "mp4" else ".webm"
out_file = os.path.join(output_path, f"{filename_prefix}{ts_str}{ext}") if use_timestamp:
ts_str = f"_{int(time.time())}"
out_file = os.path.join(output_path, f"{filename_prefix}{ts_str}{ext}")
elif auto_increment:
start_idx = self.get_start_index(output_path, filename_prefix)
fmt_str = f"{{:0{counter_digits}d}}"
out_file = os.path.join(output_path, f"{filename_prefix}_{fmt_str.format(start_idx)}{ext}")
else:
out_file = os.path.join(output_path, f"{filename_prefix}{ext}")
batch_size = len(frames_np) batch_size = len(frames_np)
h, w = frames_np[0].shape[0], frames_np[0].shape[1] h, w = frames_np[0].shape[0], frames_np[0].shape[1]
@@ -347,6 +355,7 @@ class FastAbsoluteSaver:
_, scores_list = self.parse_info(scores_info, batch_size) _, scores_list = self.parse_info(scores_info, batch_size)
out_file = self.save_video(images_np, output_path, filename_prefix, use_timestamp, out_file = self.save_video(images_np, output_path, filename_prefix, use_timestamp,
video_fps, video_crf, video_pixel_format, save_format, video_fps, video_crf, video_pixel_format, save_format,
auto_increment=auto_increment, counter_digits=counter_digits,
scores_list=scores_list, metadata_key=metadata_key, scores_list=scores_list, metadata_key=metadata_key,
save_workflow=save_workflow_metadata, prompt_data=prompt, save_workflow=save_workflow_metadata, prompt_data=prompt,
extra_data=extra_pnginfo) extra_data=extra_pnginfo)