Patch 3.8.3 (#1227)

* bump version

* test every workflow on every processor

* fix low fps bug (#1226)

* significant improve the test

* move partial logic to vision.py

* logic belongs to conditional_get_target_vision_frames

* use avg_frame_rate next to r_frame_rate for fps extraction

* update onnxruntime

* fix upload icon

* improve css

---------

Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
This commit is contained in:
Henry Ruhs
2026-09-01 14:42:48 +02:00
committed by GitHub
co-authored by Harisreedhar
parent 4b1dedb853
commit 435521dca8
21 changed files with 212 additions and 63 deletions
+17 -1
View File
@@ -6,7 +6,7 @@ import pytest
from facefusion import ffmpeg, ffmpeg_builder, process_manager
from facefusion.common_helper import is_linux
from facefusion.download import conditional_download
from facefusion.vision import calculate_histogram_difference, count_trim_frame_total, count_video_frame_total, detect_image_resolution, detect_video_duration, detect_video_fps, detect_video_resolution, match_frame_color, normalize_resolution, pack_resolution, predict_video_frame_total, read_image, read_video_frame, restrict_image_resolution, restrict_trim_frame, restrict_video_fps, restrict_video_resolution, scale_resolution, select_video_frames, unpack_resolution, write_image
from facefusion.vision import calculate_histogram_difference, count_trim_frame_total, count_video_frame_total, detect_image_resolution, detect_video_duration, detect_video_fps, detect_video_resolution, match_frame_color, normalize_resolution, pack_resolution, predict_video_frame_total, read_image, read_video_frame, resolve_extract_frame_number, resolve_target_frame_number, restrict_image_resolution, restrict_trim_frame, restrict_video_fps, restrict_video_resolution, scale_resolution, select_video_frames, unpack_resolution, write_image
from .helper import get_test_example_file, get_test_examples_directory, get_test_output_file, prepare_test_output_directory
@@ -156,9 +156,25 @@ def test_predict_video_frame_total() -> None:
assert predict_video_frame_total(get_test_example_file('target-240p-25fps.mp4'), 12.5, 0, 100) == 50
assert predict_video_frame_total(get_test_example_file('target-240p-25fps.mp4'), 25, 0, 100) == 100
assert predict_video_frame_total(get_test_example_file('target-240p-25fps.mp4'), 25, 0, 200) == 200
assert predict_video_frame_total(get_test_example_file('target-240p-25fps.mp4'), 6.25, 0, 270) == 68
assert predict_video_frame_total(get_test_example_file('target-240p-30fps.mp4'), 9.49, 40, 200) == 50
assert predict_video_frame_total('invalid', 25, 0, 100) == 0
def test_resolve_extract_frame_number() -> None:
assert resolve_extract_frame_number(25, 12.5, 100) == 50
assert resolve_extract_frame_number(25, 25, 100) == 100
assert resolve_extract_frame_number(25, 6.25, 270) == 68
assert resolve_extract_frame_number(30, 9.49, 40) == 13
def test_resolve_target_frame_number() -> None:
assert resolve_target_frame_number(25, 12.5, 50) == 100
assert resolve_target_frame_number(25, 25, 100) == 100
assert resolve_target_frame_number(25, 6.25, 1) == 5
assert resolve_target_frame_number(30, 9.49, 13) == 42
def test_detect_video_fps() -> None:
assert detect_video_fps(get_test_example_file('target-240p-25fps.mp4')) == 25.0
assert detect_video_fps(get_test_example_file('target-240p-30fps.mp4')) == 30.0