rename frame number to frame index everywhere (#1222)

This commit is contained in:
Henry Ruhs
2026-08-21 20:47:50 +02:00
committed by GitHub
parent 25bc9820f7
commit 161aec62d1
21 changed files with 114 additions and 114 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ face_selector_gender =
face_selector_race =
reference_face_position =
reference_face_distance =
reference_frame_number =
reference_frame_index =
[face_tracker]
face_tracker_score =
+8 -8
View File
@@ -93,7 +93,7 @@ async def save_asset_files(upload_files : List[UploadFile]) -> List[str]:
return asset_paths
def read_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[str]) -> List[VisionFrame]:
def read_asset_frames(asset : ImageAsset | VideoAsset, frame_indexes : List[str]) -> List[VisionFrame]:
vision_frames = []
if asset.get('media') == 'image':
@@ -103,9 +103,9 @@ def read_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[str]
vision_frames.append(vision_frame)
if asset.get('media') == 'video':
for frame_number in frame_numbers:
if frame_number.isdigit():
vision_frame = read_static_video_frame(asset.get('path'), int(frame_number))
for frame_index in frame_indexes:
if frame_index.isdigit():
vision_frame = read_static_video_frame(asset.get('path'), int(frame_index))
if is_vision_frame(vision_frame):
vision_frames.append(vision_frame)
@@ -113,9 +113,9 @@ def read_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[str]
return vision_frames
def capture_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[str], resolution : str) -> List[VisionFrame]:
def capture_asset_frames(asset : ImageAsset | VideoAsset, frame_indexes : List[str], resolution : str) -> List[VisionFrame]:
capture_vision_frames = []
temp_vision_frames = read_asset_frames(asset, frame_numbers)
temp_vision_frames = read_asset_frames(asset, frame_indexes)
for temp_vision_frame in temp_vision_frames:
capture_vision_frame = fit_contain_frame(temp_vision_frame, unpack_resolution(resolution))
@@ -124,9 +124,9 @@ def capture_asset_frames(asset : ImageAsset | VideoAsset, frame_numbers : List[s
return capture_vision_frames
def capture_asset_faces(asset : ImageAsset | VideoAsset, frame_numbers : List[str], resolution : str) -> List[VisionFrame]:
def capture_asset_faces(asset : ImageAsset | VideoAsset, frame_indexes : List[str], resolution : str) -> List[VisionFrame]:
capture_vision_frames = []
temp_vision_frames = read_asset_frames(asset, frame_numbers)
temp_vision_frames = read_asset_frames(asset, frame_indexes)
crop_size = unpack_resolution(resolution)
for temp_vision_frame in temp_vision_frames:
+3 -3
View File
@@ -92,14 +92,14 @@ async def get_asset(request : Request) -> Response:
if asset:
if asset.get('media') in [ 'image', 'video' ] and request.query_params.get('action') == 'capture':
resolution = request.query_params.get('resolution')
frame_numbers = request.query_params.getlist('frame_number')
frame_indexes = request.query_params.getlist('frame_index')
vision_frames = []
if request.query_params.get('subject') == 'frame':
vision_frames = capture_asset_frames(asset, frame_numbers, resolution) #type:ignore[arg-type]
vision_frames = capture_asset_frames(asset, frame_indexes, resolution) #type:ignore[arg-type]
if request.query_params.get('subject') == 'face':
vision_frames = capture_asset_faces(asset, frame_numbers, resolution) #type:ignore[arg-type]
vision_frames = capture_asset_faces(asset, frame_indexes, resolution) #type:ignore[arg-type]
if is_vision_frames(vision_frames):
return Response(content = to_strip_buffer(vision_frames), media_type = 'image/jpeg')
+1 -1
View File
@@ -34,7 +34,7 @@ def apply_args(args : Args, apply_state_item : ApplyStateItem) -> None:
apply_state_item('face_selector_race', args.get('face_selector_race'))
apply_state_item('reference_face_position', args.get('reference_face_position'))
apply_state_item('reference_face_distance', args.get('reference_face_distance'))
apply_state_item('reference_frame_number', args.get('reference_frame_number'))
apply_state_item('reference_frame_index', args.get('reference_frame_index'))
apply_state_item('face_tracker_score', args.get('face_tracker_score'))
apply_state_item('face_occluder_model', args.get('face_occluder_model'))
apply_state_item('face_parser_model', args.get('face_parser_model'))
+6 -6
View File
@@ -56,11 +56,11 @@ def read_voice(audio_path : str, fps : Fps) -> Optional[List[AudioFrame]]:
return None
def get_audio_frame(audio_path : str, fps : Fps, frame_number : int = 0) -> Optional[AudioFrame]:
def get_audio_frame(audio_path : str, fps : Fps, frame_index : int = 0) -> Optional[AudioFrame]:
if is_audio(audio_path):
audio_frames = read_static_audio(audio_path, fps)
if frame_number in range(len(audio_frames)):
return audio_frames[frame_number]
if frame_index in range(len(audio_frames)):
return audio_frames[frame_index]
return None
@@ -78,11 +78,11 @@ def extract_audio_frames(spectrogram : Spectrogram, fps : Fps) -> List[AudioFram
return audio_frames
def get_voice_frame(audio_path : str, fps : Fps, frame_number : int = 0) -> Optional[AudioFrame]:
def get_voice_frame(audio_path : str, fps : Fps, frame_index : int = 0) -> Optional[AudioFrame]:
if is_audio(audio_path):
voice_frames = read_static_voice(audio_path, fps)
if frame_number in range(len(voice_frames)):
return voice_frames[frame_number]
if frame_index in range(len(voice_frames)):
return voice_frames[frame_index]
return None
+2 -2
View File
@@ -169,10 +169,10 @@ def analyse_video(video_path : str, trim_frame_start : int, trim_frame_end : int
progress.set_title(translator.get('analysing'))
progress.count(frame_range)
for frame_number in frame_range:
for frame_index in frame_range:
vision_frame = video_manager.read_video_frame(video_reader)
if frame_number % int(video_fps) == 0:
if frame_index % int(video_fps) == 0:
if is_vision_frame(vision_frame):
total += 1
+1 -1
View File
@@ -101,7 +101,7 @@ def pre_check() -> bool:
def common_pre_check() -> bool:
content_analyser_content = inspect.getsource(content_analyser).encode()
return hash_helper.create_hash(content_analyser_content) == '61e33ef3'
return hash_helper.create_hash(content_analyser_content) == 'b51ff11f'
def processors_pre_check() -> bool:
+4 -4
View File
@@ -25,8 +25,8 @@ def run_ffmpeg_with_progress(commands : List[Command], update_progress : UpdateP
process.terminate()
if 'frame=' in __line__:
_, frame_number = __line__.split('frame=')
update_progress(int(frame_number))
_, frame_index = __line__.split('frame=')
update_progress(int(frame_index))
if log_level == 'debug':
log_debug(process)
@@ -70,9 +70,9 @@ def open_ffmpeg(commands : List[Command]) -> subprocess.Popen[Buffer]:
return subprocess.Popen(commands, stdin = subprocess.PIPE, stderr = subprocess.DEVNULL, stdout = subprocess.PIPE)
def create_video_reader(video_path : str, frame_number : int, video_metadata : VideoReaderMetadata) -> subprocess.Popen[Buffer]:
def create_video_reader(video_path : str, frame_index : int, video_metadata : VideoReaderMetadata) -> subprocess.Popen[Buffer]:
commands = ffmpeg_builder.chain(
ffmpeg_builder.seek_to(frame_number / video_metadata.get('fps')),
ffmpeg_builder.seek_to(frame_index / video_metadata.get('fps')),
ffmpeg_builder.set_input(video_path),
ffmpeg_builder.restrict_color_transfer(video_metadata.get('color_transfer')),
ffmpeg_builder.prevent_frame_drop(),
+2 -2
View File
@@ -55,8 +55,8 @@ def set_input_fps(input_fps : Fps) -> List[Command]:
return [ '-r', str(input_fps) ]
def set_start_number(frame_number : int) -> List[Command]:
return [ '-start_number', str(frame_number) ]
def set_start_number(frame_index : int) -> List[Command]:
return [ '-start_number', str(frame_index) ]
def set_output(output_path : str) -> List[Command]:
+5 -5
View File
@@ -10,18 +10,18 @@ def get_frame_store(id : str) -> VisionFrameSet:
return FRAME_STORE_SET.get(id)
def set_frame(id : str, frame_number : int, vision_frame : VisionFrame) -> None:
def set_frame(id : str, frame_index : int, vision_frame : VisionFrame) -> None:
frame_store = get_frame_store(id)
frame_store[frame_number] = vision_frame
frame_store[frame_index] = vision_frame
def select_frame_set(id : str, frame_start : int, frame_end : int) -> VisionFrameSet:
frame_store = get_frame_store(id)
frame_set = {}
for frame_number in range(frame_start, frame_end + 1):
if frame_number in frame_store:
frame_set[frame_number] = frame_store.get(frame_number)
for frame_index in range(frame_start, frame_end + 1):
if frame_index in frame_store:
frame_set[frame_index] = frame_store.get(frame_index)
return frame_set
+1 -1
View File
@@ -122,7 +122,7 @@ LOCALES : Locales =\
'face_selector_race': 'filter the detected faces based on their race',
'reference_face_position': 'specify the position used to create the reference face',
'reference_face_distance': 'specify the similarity between the reference face and target face',
'reference_frame_number': 'specify the frame used to create the reference face',
'reference_frame_index': 'specify the frame used to create the reference face',
'face_tracker_score': 'specify the overlap score used to match the tracked faces',
'face_occluder_model': 'choose the model responsible for the occlusion mask',
'face_parser_model': 'choose the model responsible for the region mask',
+3 -3
View File
@@ -446,10 +446,10 @@ def create_face_selector_program() -> ArgumentParser:
capability_store.register_capability_set(
[
group_face_selector.add_argument(
'--reference-frame-number',
help = translator.get('help.reference_frame_number'),
'--reference-frame-index',
help = translator.get('help.reference_frame_index'),
type = int,
default = config.get_int_value('face_selector', 'reference_frame_number', '0')
default = config.get_int_value('face_selector', 'reference_frame_index', '0')
)
],
scopes = [ 'api', 'cli' ],
+2 -2
View File
@@ -26,8 +26,8 @@ def resolve_temp_frame_set(temp_path : str, output_path : str, temp_frame_format
temp_frame_set = {}
for temp_frame_path in resolve_file_pattern(temp_frames_pattern):
frame_number = int(get_file_name(temp_frame_path))
temp_frame_set[frame_number] = temp_frame_path
frame_index = int(get_file_name(temp_frame_path))
temp_frame_set[frame_index] = temp_frame_path
return temp_frame_set
+3 -3
View File
@@ -257,7 +257,7 @@ VideoReader = TypedDict('VideoReader',
'file_path' : str,
'process' : subprocess.Popen[bytes],
'metadata' : VideoReaderMetadata,
'frame_number' : int
'frame_index' : int
})
VideoReaderSet : TypeAlias = Dict[str, VideoReader]
VideoWriter = TypedDict('VideoWriter',
@@ -544,7 +544,7 @@ StateKey = Literal\
'face_selector_age_end',
'reference_face_position',
'reference_face_distance',
'reference_frame_number',
'reference_frame_index',
'face_tracker_score',
'face_occluder_model',
'face_parser_model',
@@ -620,7 +620,7 @@ State = TypedDict('State',
'face_selector_age_end' : int,
'reference_face_position' : int,
'reference_face_distance' : float,
'reference_frame_number' : int,
'reference_frame_index' : int,
'face_tracker_score' : Score,
'face_occluder_model' : FaceOccluderModel,
'face_parser_model' : FaceParserModel,
+17 -17
View File
@@ -28,30 +28,30 @@ def get_reader(video_path : str, context : str) -> VideoReader:
'file_path': video_path,
'process': ffmpeg.create_video_reader(video_path, 0, video_metadata),
'metadata': video_metadata,
'frame_number': 0
'frame_index': 0
}
return VIDEO_POOL_SET.get('reader').get(reader_id)
def conditional_seek_video_reader(video_reader : VideoReader, frame_number : int = 0) -> None:
def conditional_seek_video_reader(video_reader : VideoReader, frame_index : int = 0) -> None:
frame_total = video_reader.get('metadata').get('frame_total')
frame_number = min(frame_total - 1, frame_number)
skip_total = frame_number - video_reader.get('frame_number')
frame_index = min(frame_total - 1, frame_index)
skip_total = frame_index - video_reader.get('frame_index')
skip_margin = 128
if 0 < skip_total <= skip_margin:
drain_video_reader(video_reader, skip_total)
if not video_reader.get('frame_number') == frame_number:
seek_video_reader(video_reader, frame_number)
if not video_reader.get('frame_index') == frame_index:
seek_video_reader(video_reader, frame_index)
def seek_video_reader(video_reader : VideoReader, frame_number : int = 0) -> None:
def seek_video_reader(video_reader : VideoReader, frame_index : int = 0) -> None:
close_video_reader(video_reader)
video_reader['process'] = ffmpeg.create_video_reader(video_reader.get('file_path'), frame_number, video_reader.get('metadata'))
video_reader['frame_number'] = frame_number
video_reader['process'] = ffmpeg.create_video_reader(video_reader.get('file_path'), frame_index, video_reader.get('metadata'))
video_reader['frame_index'] = frame_index
def drain_video_reader(video_reader : VideoReader, skip_total : int) -> None:
@@ -62,7 +62,7 @@ def drain_video_reader(video_reader : VideoReader, skip_total : int) -> None:
for _ in range(skip_total):
video_reader.get('process').stdout.read(frame_size)
video_reader['frame_number'] = video_reader.get('frame_number') + skip_total
video_reader['frame_index'] = video_reader.get('frame_index') + skip_total
def read_video_frame(video_reader : VideoReader) -> Optional[VisionFrame]:
@@ -72,7 +72,7 @@ def read_video_frame(video_reader : VideoReader) -> Optional[VisionFrame]:
vision_frame = numpy.empty(width * height * channel_total, numpy.uint8)
if video_stream.readinto(vision_frame) == vision_frame.size:
video_reader['frame_number'] = video_reader.get('frame_number') + 1
video_reader['frame_index'] = video_reader.get('frame_index') + 1
return vision_frame.reshape(height, width, channel_total)
return None
@@ -84,9 +84,9 @@ def read_video_frames(video_reader : VideoReader, frame_start : int, frame_end :
keep_margin = 4
frame_gaps = []
for frame_number in range(frame_start, frame_end + 1):
if frame_number not in frame_set:
frame_gaps.append(frame_number)
for frame_index in range(frame_start, frame_end + 1):
if frame_index not in frame_set:
frame_gaps.append(frame_index)
if frame_gaps:
collect_video_frames(video_reader, get_first(frame_gaps), get_last(frame_gaps))
@@ -97,17 +97,17 @@ def read_video_frames(video_reader : VideoReader, frame_start : int, frame_end :
def collect_video_frames(video_reader : VideoReader, frame_start : int, frame_end : int) -> None:
reader_id = video_reader.get('id')
skip_total = frame_start - video_reader.get('frame_number')
skip_total = frame_start - video_reader.get('frame_index')
skip_margin = 16
if skip_total < 0 or skip_total > skip_margin:
seek_video_reader(video_reader, frame_start)
for frame_number in range(video_reader.get('frame_number'), frame_end + 1):
for frame_index in range(video_reader.get('frame_index'), frame_end + 1):
vision_frame = read_video_frame(video_reader)
if vision.is_vision_frame(vision_frame):
frame_store.set_frame(reader_id, frame_number, vision_frame)
frame_store.set_frame(reader_id, frame_index, vision_frame)
def close_video_reader(video_reader : VideoReader) -> None:
+10 -10
View File
@@ -72,36 +72,36 @@ def restrict_image_resolution(image_path : str, resolution : Resolution) -> Reso
@lru_cache(maxsize = 64)
def read_static_video_frame(video_path : str, frame_number : int = 0) -> Optional[VisionFrame]:
return read_video_frame(video_path, frame_number)
def read_static_video_frame(video_path : str, frame_index : int = 0) -> Optional[VisionFrame]:
return read_video_frame(video_path, frame_index)
def read_video_frame(video_path : str, frame_number : int = 0) -> Optional[VisionFrame]:
def read_video_frame(video_path : str, frame_index : int = 0) -> Optional[VisionFrame]:
if is_video(video_path):
video_reader = video_manager.get_reader(video_path, 'read_video_frame')
with thread_semaphore():
video_manager.conditional_seek_video_reader(video_reader, frame_number)
video_manager.conditional_seek_video_reader(video_reader, frame_index)
return video_manager.read_video_frame(video_reader)
return None
def select_video_frames(video_path : str, frame_number : int = 0, frame_offset : int = 2) -> List[VisionFrame]:
def select_video_frames(video_path : str, frame_index : int = 0, frame_offset : int = 2) -> List[VisionFrame]:
vision_frames = []
frame_start = frame_number - frame_offset
frame_end = frame_number + frame_offset
frame_start = frame_index - frame_offset
frame_end = frame_index + frame_offset
if is_video(video_path):
with thread_lock():
video_reader = video_manager.get_reader(video_path, 'select_video_frames')
frame_set = video_manager.read_video_frames(video_reader, max(frame_start, 0), frame_end)
for frame_number in range(frame_start, frame_end + 1):
for frame_index in range(frame_start, frame_end + 1):
vision_frame = create_empty_vision_frame()
if frame_number in frame_set:
vision_frame = frame_set.get(frame_number)
if frame_index in frame_set:
vision_frame = frame_set.get(frame_index)
vision_frames.append(vision_frame)
+18 -18
View File
@@ -50,7 +50,7 @@ def clear() -> ErrorCode:
return 0
def conditional_get_source_audio_frame(frame_number : int) -> AudioFrame:
def conditional_get_source_audio_frame(frame_index : int) -> AudioFrame:
if state_manager.get_item('workflow_mode') in [ 'audio-to-image:frames', 'audio-to-image:video', 'image-to-video' ]:
source_audio_path = get_first(filter_audio_paths(state_manager.get_item('source_paths')))
fps = state_manager.get_item('output_audio_fps')
@@ -58,9 +58,9 @@ def conditional_get_source_audio_frame(frame_number : int) -> AudioFrame:
if state_manager.get_item('workflow_mode') == 'image-to-video':
trim_frame_start, _ = restrict_trim_video_frame(state_manager.get_item('target_path'), state_manager.get_item('trim_frame_start'), state_manager.get_item('trim_frame_end'))
fps = restrict_video_fps(state_manager.get_item('target_path'), state_manager.get_item('output_video_fps'))
frame_number = frame_number - trim_frame_start
frame_index = frame_index - trim_frame_start
source_audio_frame = get_audio_frame(source_audio_path, fps, frame_number)
source_audio_frame = get_audio_frame(source_audio_path, fps, frame_index)
if numpy.any(source_audio_frame):
return source_audio_frame
@@ -68,7 +68,7 @@ def conditional_get_source_audio_frame(frame_number : int) -> AudioFrame:
return create_empty_audio_frame()
def conditional_get_source_voice_frame(frame_number : int) -> AudioFrame:
def conditional_get_source_voice_frame(frame_index : int) -> AudioFrame:
if state_manager.get_item('workflow_mode') in [ 'audio-to-image:frames', 'audio-to-image:video', 'image-to-video' ]:
source_audio_path = get_first(filter_audio_paths(state_manager.get_item('source_paths')))
temp_fps = state_manager.get_item('output_audio_fps')
@@ -76,9 +76,9 @@ def conditional_get_source_voice_frame(frame_number : int) -> AudioFrame:
if state_manager.get_item('workflow_mode') == 'image-to-video':
trim_frame_start, _ = restrict_trim_video_frame(state_manager.get_item('target_path'), state_manager.get_item('trim_frame_start'), state_manager.get_item('trim_frame_end'))
temp_fps = restrict_video_fps(state_manager.get_item('target_path'), state_manager.get_item('output_video_fps'))
frame_number = frame_number - trim_frame_start
frame_index = frame_index - trim_frame_start
source_voice_frame = get_voice_frame(source_audio_path, temp_fps, frame_number)
source_voice_frame = get_voice_frame(source_audio_path, temp_fps, frame_index)
if numpy.any(source_voice_frame):
return source_voice_frame
@@ -88,22 +88,22 @@ def conditional_get_source_voice_frame(frame_number : int) -> AudioFrame:
def conditional_get_reference_vision_frame() -> VisionFrame:
if state_manager.get_item('workflow_mode') in [ 'image-to-video', 'image-to-video:frames' ]:
return read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
return read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_index'))
return read_static_image(state_manager.get_item('target_path'))
def conditional_get_target_vision_frames(frame_number : int) -> List[VisionFrame]:
def conditional_get_target_vision_frames(frame_index : int) -> List[VisionFrame]:
if state_manager.get_item('workflow_mode') in [ 'image-to-video', 'image-to-video:frames' ]:
return select_video_frames(state_manager.get_item('target_path'), frame_number, state_manager.get_item('target_frame_amount'))
return select_video_frames(state_manager.get_item('target_path'), frame_index, state_manager.get_item('target_frame_amount'))
return [ read_static_image(state_manager.get_item('target_path')) ]
def process_temp_frame(temp_frame_path : str, frame_number : int) -> bool:
def process_temp_frame(temp_frame_path : str, frame_index : int) -> bool:
reference_vision_frame = conditional_get_reference_vision_frame()
source_vision_frames = read_static_images(state_manager.get_item('source_paths'))
source_audio_frame = conditional_get_source_audio_frame(frame_number)
source_voice_frame = conditional_get_source_voice_frame(frame_number)
target_vision_frames = conditional_get_target_vision_frames(frame_number)
source_audio_frame = conditional_get_source_audio_frame(frame_index)
source_voice_frame = conditional_get_source_voice_frame(frame_index)
target_vision_frames = conditional_get_target_vision_frames(frame_index)
temp_vision_frame = read_static_image(temp_frame_path, 'rgba').copy()
temp_vision_mask = extract_vision_mask(temp_vision_frame)
@@ -123,11 +123,11 @@ def process_temp_frame(temp_frame_path : str, frame_number : int) -> bool:
return write_image(temp_frame_path, temp_vision_frame)
def process_temp_vision_frame(target_vision_frames : List[VisionFrame], temp_vision_frame : VisionFrame, frame_number : int) -> VisionFrame:
def process_temp_vision_frame(target_vision_frames : List[VisionFrame], temp_vision_frame : VisionFrame, frame_index : int) -> VisionFrame:
reference_vision_frame = conditional_get_reference_vision_frame()
source_vision_frames = read_static_images(state_manager.get_item('source_paths'))
source_audio_frame = conditional_get_source_audio_frame(frame_number)
source_voice_frame = conditional_get_source_voice_frame(frame_number)
source_audio_frame = conditional_get_source_audio_frame(frame_index)
source_voice_frame = conditional_get_source_voice_frame(frame_index)
temp_vision_mask = extract_vision_mask(temp_vision_frame)
for processor_module in get_processors_modules(state_manager.get_item('processors')):
@@ -156,8 +156,8 @@ def process_frames() -> ErrorCode:
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
futures : Deque[Future[bool]] = deque()
for frame_number, temp_frame_path in temp_frame_set.items():
future = executor.submit(process_temp_frame, temp_frame_path, frame_number)
for frame_index, temp_frame_path in temp_frame_set.items():
future = executor.submit(process_temp_frame, temp_frame_path, frame_index)
futures.append(future)
while futures:
+6 -6
View File
@@ -42,15 +42,15 @@ def create_temp_frames() -> ErrorCode:
return 0
def process_memory_frame(frame_number : int, temp_video_resolution : Resolution, output_video_resolution : Resolution) -> VisionFrame:
target_vision_frames = select_video_frames(state_manager.get_item('target_path'), frame_number, state_manager.get_item('target_frame_amount'))
def process_memory_frame(frame_index : int, temp_video_resolution : Resolution, output_video_resolution : Resolution) -> VisionFrame:
target_vision_frames = select_video_frames(state_manager.get_item('target_path'), frame_index, state_manager.get_item('target_frame_amount'))
target_vision_frame = get_middle(target_vision_frames)
temp_vision_frame = target_vision_frame.copy()
if not (target_vision_frame.shape[1], target_vision_frame.shape[0]) == temp_video_resolution:
temp_vision_frame = cv2.resize(target_vision_frame, temp_video_resolution)
temp_vision_frame = process_temp_vision_frame(target_vision_frames, temp_vision_frame, frame_number)
temp_vision_frame = process_temp_vision_frame(target_vision_frames, temp_vision_frame, frame_index)
if not (temp_vision_frame.shape[1], temp_vision_frame.shape[0]) == output_video_resolution:
temp_vision_frame = cv2.resize(temp_vision_frame, output_video_resolution)
@@ -78,13 +78,13 @@ def process_memory_frames() -> ErrorCode:
progress.set_title(translator.get('processing'))
progress.count(temp_frame_range)
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_index'))
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
futures : Deque[Future[VisionFrame]] = deque()
for frame_number in temp_frame_range:
future = executor.submit(process_memory_frame, frame_number, temp_video_resolution, output_video_resolution)
for frame_index in temp_frame_range:
future = executor.submit(process_memory_frame, frame_index, temp_video_resolution, output_video_resolution)
futures.append(future)
while futures:
+3 -3
View File
@@ -17,15 +17,15 @@ def before_all() -> None:
'https://github.com/facefusion/facefusion-assets/releases/download/examples-3.0.0/target-240p.mp4'
])
for frame_number in [ 1, 2 ]:
for frame_index in [ 1, 2 ]:
ffmpeg.run_ffmpeg(
ffmpeg_builder.chain(
ffmpeg_builder.set_input(get_test_example_file('target-240p.mp4')),
[
'-vframes',
str(frame_number)
str(frame_index)
],
ffmpeg_builder.set_output(get_test_example_file('target-240p-batch-' + str(frame_number) + '.jpg'))
ffmpeg_builder.set_output(get_test_example_file('target-240p-batch-' + str(frame_index) + '.jpg'))
)
)
+2 -2
View File
@@ -54,8 +54,8 @@ def test_select_frame_set() -> None:
def test_reduce_frames() -> None:
target_frame = read_video_frame(get_test_example_file('target-240p.mp4'), 0)
for frame_number in range(0, 10):
set_frame('reader-1', frame_number, target_frame)
for frame_index in range(0, 10):
set_frame('reader-1', frame_index, target_frame)
reduce_frames('reader-1', 4, 6)
+16 -16
View File
@@ -59,26 +59,26 @@ def test_conditional_seek_video_reader() -> None:
video_reader = get_reader(get_test_example_file('target-240p-25fps.mp4'), 'read_video_frame')
video_frames = {}
for frame_number in range(30):
video_frames[frame_number] = read_video_frame(video_reader)
for frame_index in range(30):
video_frames[frame_index] = read_video_frame(video_reader)
for frame_number in [ 5, 17, 29 ]:
conditional_seek_video_reader(video_reader, frame_number)
for frame_index in [ 5, 17, 29 ]:
conditional_seek_video_reader(video_reader, frame_index)
assert numpy.array_equal(read_video_frame(video_reader), video_frames.get(frame_number)) is True
assert numpy.array_equal(read_video_frame(video_reader), video_frames.get(frame_index)) is True
def test_seek_video_reader() -> None:
video_reader = get_reader(get_test_example_file('target-240p-25fps.mp4'), 'read_video_frame')
video_frames = {}
for frame_number in range(30):
video_frames[frame_number] = read_video_frame(video_reader)
for frame_index in range(30):
video_frames[frame_index] = read_video_frame(video_reader)
for frame_number in [ 5, 17, 29 ]:
seek_video_reader(video_reader, frame_number)
for frame_index in [ 5, 17, 29 ]:
seek_video_reader(video_reader, frame_index)
assert numpy.array_equal(read_video_frame(video_reader), video_frames.get(frame_number)) is True
assert numpy.array_equal(read_video_frame(video_reader), video_frames.get(frame_index)) is True
def test_drain_video_reader() -> None:
@@ -86,7 +86,7 @@ def test_drain_video_reader() -> None:
drain_video_reader(video_reader, 10)
assert video_reader.get('frame_number') == 10
assert video_reader.get('frame_index') == 10
vision_frame = read_video_frame(video_reader)
seek_video_reader(video_reader, 10)
@@ -98,7 +98,7 @@ def test_read_video_frame() -> None:
video_reader = get_reader(get_test_example_file('target-240p-25fps.mp4'), 'read_video_frame')
assert read_video_frame(video_reader).shape == (226, 426, 3)
assert video_reader.get('frame_number') == 1
assert video_reader.get('frame_index') == 1
seek_video_reader(video_reader, 269)
@@ -111,10 +111,10 @@ def test_read_video_frames() -> None:
assert sorted(read_video_frames(video_reader, 0, 4)) == [ 0, 1, 2, 3, 4 ]
frame_number = video_reader.get('frame_number')
frame_index = video_reader.get('frame_index')
assert sorted(read_video_frames(video_reader, 1, 3)) == [ 1, 2, 3 ]
assert video_reader.get('frame_number') == frame_number
assert video_reader.get('frame_index') == frame_index
read_video_frames(video_reader, 21, 25)
@@ -129,7 +129,7 @@ def test_collect_video_frames() -> None:
collect_video_frames(video_reader, 20, 24)
assert sorted(get_frame_store(video_reader.get('id'))) == [ 20, 21, 22, 23, 24 ]
assert video_reader.get('frame_number') == 25
assert video_reader.get('frame_index') == 25
def test_close_video_reader() -> None:
@@ -159,7 +159,7 @@ def test_write_video_frame() -> None:
video_reader = get_reader(target_path, 'read_video_frame')
video_writer = get_writer(target_path, 25.0, (426, 226), (426, 226), 25.0)
for frame_number in range(25):
for frame_index in range(25):
write_video_frame(video_writer, read_video_frame(video_reader))
assert close_video_writer(video_writer) is True