From 7ba3db5fe3a932d7ca29877928179a2a324976db Mon Sep 17 00:00:00 2001 From: henryruhs Date: Tue, 27 May 2025 20:47:35 +0200 Subject: [PATCH] Add set_hardware_accelerator for ffmpeg --- facefusion/ffmpeg.py | 6 +++++- facefusion/ffmpeg_builder.py | 8 ++++++-- facefusion/uis/components/webcam.py | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/facefusion/ffmpeg.py b/facefusion/ffmpeg.py index a0955ae..adc9d1f 100644 --- a/facefusion/ffmpeg.py +++ b/facefusion/ffmpeg.py @@ -105,6 +105,7 @@ def extract_frames(target_path : str, temp_video_resolution : str, temp_video_fp 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(target_path, '%08d') commands = ffmpeg_builder.chain( + ffmpeg_builder.set_hardware_accelerator('auto'), ffmpeg_builder.set_input(target_path), ffmpeg_builder.set_media_resolution(temp_video_resolution), ffmpeg_builder.set_frame_quality(0), @@ -169,6 +170,7 @@ def restore_audio(target_path : str, output_path : str, trim_frame_start : int, output_audio_encoder = fix_audio_encoder(temp_video_format, output_audio_encoder) commands = ffmpeg_builder.chain( + ffmpeg_builder.set_hardware_accelerator('auto'), ffmpeg_builder.set_input(temp_video_path), ffmpeg_builder.select_media_range(trim_frame_start, trim_frame_end, target_video_fps), ffmpeg_builder.set_input(target_path), @@ -194,6 +196,7 @@ def replace_audio(target_path : str, audio_path : str, output_path : str) -> boo output_audio_encoder = fix_audio_encoder(temp_video_format, output_audio_encoder) commands = ffmpeg_builder.chain( + ffmpeg_builder.set_hardware_accelerator('auto'), ffmpeg_builder.set_input(temp_video_path), ffmpeg_builder.set_input(audio_path), ffmpeg_builder.copy_video_encoder(), @@ -217,7 +220,8 @@ def merge_video(target_path : str, temp_video_fps : Fps, output_video_resolution output_video_encoder = fix_video_encoder(temp_video_format, output_video_encoder) commands = ffmpeg_builder.chain( - ffmpeg_builder.set_conditional_fps(temp_video_fps), + ffmpeg_builder.set_hardware_accelerator('auto'), + ffmpeg_builder.set_input_fps(temp_video_fps), ffmpeg_builder.set_input(temp_frames_pattern), ffmpeg_builder.set_media_resolution(output_video_resolution), ffmpeg_builder.set_video_encoder(output_video_encoder), diff --git a/facefusion/ffmpeg_builder.py b/facefusion/ffmpeg_builder.py index 41ba0bc..4143291 100644 --- a/facefusion/ffmpeg_builder.py +++ b/facefusion/ffmpeg_builder.py @@ -20,6 +20,10 @@ def get_encoders() -> Commands: return [ '-encoders' ] +def set_hardware_accelerator(value : str) -> Commands: + return [ '-hwaccel', value ] + + def set_progress() -> Commands: return [ '-progress' ] @@ -28,8 +32,8 @@ def set_input(input_path : str) -> Commands: return [ '-i', input_path ] -def set_conditional_fps(conditional_fps : Fps) -> Commands: - return [ '-r', str(conditional_fps) ] +def set_input_fps(input_fps : Fps) -> Commands: + return [ '-r', str(input_fps)] def set_output(output_path : str) -> Commands: diff --git a/facefusion/uis/components/webcam.py b/facefusion/uis/components/webcam.py index 9f43af4..a7917c2 100644 --- a/facefusion/uis/components/webcam.py +++ b/facefusion/uis/components/webcam.py @@ -166,7 +166,7 @@ def open_stream(stream_mode : StreamMode, stream_resolution : str, stream_fps : commands = ffmpeg_builder.chain( ffmpeg_builder.capture_video(), ffmpeg_builder.set_media_resolution(stream_resolution), - ffmpeg_builder.set_conditional_fps(stream_fps) + ffmpeg_builder.set_input_fps(stream_fps) ) if stream_mode == 'udp':