diff --git a/facefusion/exit_helper.py b/facefusion/exit_helper.py index 44754f0f..860e78bd 100644 --- a/facefusion/exit_helper.py +++ b/facefusion/exit_helper.py @@ -28,7 +28,7 @@ def graceful_exit(error_code : ErrorCode) -> None: while process_manager.is_processing(): sleep(0.5) - if state_manager.get_item('output_path'): + if state_manager.get_item('output_path') and not state_manager.get_item('keep_temp'): clear_temp_directory(state_manager.get_item('output_path'), state_manager.get_item('temp_path')) hard_exit(error_code) diff --git a/facefusion/ffmpeg.py b/facefusion/ffmpeg.py index fcca00d0..fa0030b4 100644 --- a/facefusion/ffmpeg.py +++ b/facefusion/ffmpeg.py @@ -109,7 +109,7 @@ def get_available_encoder_set() -> EncoderSet: def extract_frames(target_path : str, output_path : str, temp_video_resolution : Resolution, temp_video_fps : Fps, trim_frame_start : int, trim_frame_end : int) -> bool: extract_frame_total = predict_video_frame_total(target_path, temp_video_fps, trim_frame_start, trim_frame_end) - temp_frames_pattern = get_temp_frames_pattern(output_path, '%08d', state_manager.get_item('temp_path')) + temp_frames_pattern = get_temp_frames_pattern(output_path, '%08d', state_manager.get_item('temp_path'), state_manager.get_item('temp_frame_format')) commands = ffmpeg_builder.chain( ffmpeg_builder.set_input(target_path), ffmpeg_builder.set_media_resolution(pack_resolution(temp_video_resolution)), @@ -221,7 +221,7 @@ def merge_video(target_path : str, output_path : str, temp_video_fps : Fps, outp merge_frame_total = predict_video_frame_total(target_path, output_video_fps, trim_frame_start, trim_frame_end) temp_video_path = get_temp_file_path(output_path, state_manager.get_item('temp_path')) temp_video_format = cast(VideoFormat, get_file_format(output_path)) - temp_frames_pattern = get_temp_frames_pattern(output_path, '%08d', state_manager.get_item('temp_path')) + temp_frames_pattern = get_temp_frames_pattern(output_path, '%08d', state_manager.get_item('temp_path'), state_manager.get_item('temp_frame_format')) output_video_encoder = fix_video_encoder(temp_video_format, output_video_encoder) commands = ffmpeg_builder.chain( diff --git a/facefusion/temp_helper.py b/facefusion/temp_helper.py index 5ae703e7..1e8576a7 100644 --- a/facefusion/temp_helper.py +++ b/facefusion/temp_helper.py @@ -1,7 +1,6 @@ import os from typing import List -from facefusion import state_manager from facefusion.filesystem import create_directory, get_file_extension, get_file_name, move_file, remove_directory, resolve_file_pattern @@ -16,14 +15,14 @@ def move_temp_file(move_path : str, temp_path : str) -> bool: return move_file(temp_file_path, move_path) -def resolve_temp_frame_paths(target_path : str, temp_path : str) -> List[str]: - temp_frames_pattern = get_temp_frames_pattern(target_path, '*', temp_path) +def resolve_temp_frame_paths(target_path : str, temp_path : str, temp_frame_format : str) -> List[str]: + temp_frames_pattern = get_temp_frames_pattern(target_path, '*', temp_path, temp_frame_format) return resolve_file_pattern(temp_frames_pattern) -def get_temp_frames_pattern(target_path : str, temp_frame_prefix : str, temp_path : str) -> str: +def get_temp_frames_pattern(target_path : str, temp_frame_prefix : str, temp_path : str, temp_frame_format : str) -> str: temp_directory_path = get_temp_directory_path(target_path, temp_path) - return os.path.join(temp_directory_path, temp_frame_prefix + '.' + state_manager.get_item('temp_frame_format')) # TODO: remove state_manager.get + return os.path.join(temp_directory_path, temp_frame_prefix + '.' + temp_frame_format) def get_temp_directory_path(file_path : str, temp_path : str) -> str: @@ -37,10 +36,8 @@ def create_temp_directory(file_path : str, temp_path : str) -> bool: def clear_temp_directory(file_path : str, temp_path : str) -> bool: - if not state_manager.get_item('keep_temp'): # TODO: remove state_manager.get - temp_directory_path = get_temp_directory_path(file_path, temp_path) - return remove_directory(temp_directory_path) - return True + temp_directory_path = get_temp_directory_path(file_path, temp_path) + return remove_directory(temp_directory_path) def get_temp_sequence_paths(file_path : str, frame_total : int, temp_frame_prefix : str, temp_frame_format : str, temp_path : str) -> List[str]: diff --git a/facefusion/workflows/core.py b/facefusion/workflows/core.py index fff8e867..87cb0633 100644 --- a/facefusion/workflows/core.py +++ b/facefusion/workflows/core.py @@ -17,6 +17,7 @@ def setup() -> ErrorCode: def clear() -> ErrorCode: - clear_temp_directory(state_manager.get_item('output_path'), state_manager.get_item('temp_path')) - logger.debug(translator.get('clearing_temp'), __name__) + if not state_manager.get_item('keep_temp'): + clear_temp_directory(state_manager.get_item('output_path'), state_manager.get_item('temp_path')) + logger.debug(translator.get('clearing_temp'), __name__) return 0 diff --git a/facefusion/workflows/image_to_video.py b/facefusion/workflows/image_to_video.py index 5c6cfa4a..170e512a 100644 --- a/facefusion/workflows/image_to_video.py +++ b/facefusion/workflows/image_to_video.py @@ -69,7 +69,7 @@ def extract_frames() -> ErrorCode: def process_video() -> ErrorCode: - temp_frame_paths = resolve_temp_frame_paths(state_manager.get_item('output_path'), state_manager.get_item('temp_path')) + temp_frame_paths = resolve_temp_frame_paths(state_manager.get_item('output_path'), state_manager.get_item('temp_path'), state_manager.get_item('temp_frame_format')) if temp_frame_paths: with tqdm(total = len(temp_frame_paths), desc = translator.get('processing'), unit = 'frame', ascii = ' =', disable = state_manager.get_item('log_level') in [ 'warn', 'error' ]) as progress: diff --git a/tests/test_ffmpeg.py b/tests/test_ffmpeg.py index 328b5c97..32dd75d5 100644 --- a/tests/test_ffmpeg.py +++ b/tests/test_ffmpeg.py @@ -85,7 +85,7 @@ def test_extract_frames() -> None: create_temp_directory(output_path, state_manager.get_item('temp_path')) assert extract_frames(target_path, output_path, (452, 240), 30.0, trim_frame_start, trim_frame_end) is True - assert len(resolve_temp_frame_paths(output_path, state_manager.get_item('temp_path'))) == frame_total + assert len(resolve_temp_frame_paths(output_path, state_manager.get_item('temp_path'), state_manager.get_item('temp_frame_format'))) == frame_total clear_temp_directory(output_path, state_manager.get_item('temp_path')) diff --git a/tests/test_temp_helper.py b/tests/test_temp_helper.py index 553d12d0..1b15b9eb 100644 --- a/tests/test_temp_helper.py +++ b/tests/test_temp_helper.py @@ -29,4 +29,4 @@ def test_get_temp_directory_path() -> None: def test_get_temp_frames_pattern() -> None: - assert get_temp_frames_pattern(get_test_example_file('target-240p.mp4'), '%04d', state_manager.get_item('temp_path')) == os.path.join(state_manager.get_item('temp_path'), 'facefusion', 'target-240p', '%04d.png') + assert get_temp_frames_pattern(get_test_example_file('target-240p.mp4'), '%04d', state_manager.get_item('temp_path'), state_manager.get_item('temp_frame_format')) == os.path.join(state_manager.get_item('temp_path'), 'facefusion', 'target-240p', '%04d.png')