mirror of
https://github.com/facefusion/facefusion.git
synced 2026-07-27 12:30:55 +02:00
Skip forward reads and warm the reference frame to avoid reader restarts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M8GqDtmNT89ei6EJrQKWXx
This commit is contained in:
@@ -50,6 +50,13 @@ def get_video_reader(video_path : str) -> VideoReader:
|
||||
|
||||
|
||||
def conditional_set_video_reader_position(video_reader : VideoReader, frame_position : int) -> None:
|
||||
skip_margin = 128
|
||||
skipping = video_reader.get('position') < frame_position and frame_position - video_reader.get('position') <= skip_margin
|
||||
|
||||
while skipping:
|
||||
has_vision_frame, vision_frame = read_video_reader_frame(video_reader)
|
||||
skipping = has_vision_frame and video_reader.get('position') < frame_position
|
||||
|
||||
if not video_reader.get('position') == frame_position:
|
||||
restart_video_reader(video_reader, frame_position)
|
||||
|
||||
|
||||
@@ -97,6 +97,8 @@ def process_stream_frames() -> ErrorCode:
|
||||
with tqdm(total = len(frame_range), desc = translator.get('processing'), unit = 'frame', ascii = ' =', disable = state_manager.get_item('log_level') in [ 'warn', 'error' ]) as progress:
|
||||
progress.set_postfix(execution_providers = state_manager.get_item('execution_providers'))
|
||||
|
||||
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
|
||||
|
||||
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
|
||||
futures = []
|
||||
# TODO: review - this has to be a dedicated method
|
||||
@@ -235,6 +237,8 @@ def process_disk_frames() -> ErrorCode:
|
||||
with tqdm(total = len(temp_frame_set), desc = translator.get('processing'), unit = 'frame', ascii = ' =', disable = state_manager.get_item('log_level') in [ 'warn', 'error' ]) as progress:
|
||||
progress.set_postfix(execution_providers = state_manager.get_item('execution_providers'))
|
||||
|
||||
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
|
||||
|
||||
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
|
||||
futures = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user