Fix/ffmpeg sanitize (#1074)

* fix sanitize for videos

* fix macos

* fix macos
This commit is contained in:
Henry Ruhs
2026-04-06 17:56:43 +02:00
committed by GitHub
parent 8ee40517a4
commit af9cc1a37a
2 changed files with 7 additions and 15 deletions
+4 -3
View File
@@ -339,11 +339,12 @@ def sanitize_image(media_chunk_reader : MediaChunkReader, asset_path : str) -> b
def sanitize_video(media_chunk_reader : MediaChunkReader, asset_path : str, security_strategy : ApiSecurityStrategy) -> bool:
if security_strategy == 'strict':
available_video_encoders = get_available_encoder_set().get('video')
commands = ffmpeg_builder.chain(
ffmpeg_builder.set_input('pipe:0'),
ffmpeg_builder.set_video_encoder('libx264'), #todo - remove hard coded
ffmpeg_builder.set_video_preset('libx264', 'ultrafast'), #todo - remove hard coded
ffmpeg_builder.set_pixel_format('libx264'), #todo - remove hard coded
ffmpeg_builder.set_video_encoder(available_video_encoders[0]),
ffmpeg_builder.set_video_preset(available_video_encoders[0], 'ultrafast'),
ffmpeg_builder.set_pixel_format(available_video_encoders[0]),
ffmpeg_builder.deep_copy_video(),
ffmpeg_builder.deep_copy_audio(),
ffmpeg_builder.strip_metadata(),
+3 -12
View File
@@ -1,13 +1,11 @@
import os
import subprocess
import sys
import tempfile
import pytest
import facefusion.ffmpeg
from facefusion import process_manager, state_manager
from facefusion.common_helper import is_linux
from facefusion.download import conditional_download
from facefusion.ffmpeg import concat_video, extract_frames, merge_video, read_audio_buffer, replace_audio, restore_audio, sanitize_audio, sanitize_image, sanitize_video, spawn_frames
from facefusion.ffprobe import probe_entries
@@ -35,10 +33,7 @@ def before_all() -> None:
subprocess.run([ 'ffmpeg', '-i', get_test_example_file('source.mp3'), '-i', get_test_example_file('target-240p.mp4'), '-ar', '16000', get_test_example_file('target-240p-16khz.' + output_video_format) ])
subprocess.run([ 'ffmpeg', '-i', get_test_example_file('source.mp3'), '-i', get_test_example_file('target-240p.mp4'), '-ar', '48000', get_test_example_file('target-240p-48khz.mp4') ])
if sys.platform == 'darwin':
subprocess.run([ 'ffmpeg', '-i', get_test_example_file('target-240p.mp4'), '-c:v', 'hevc_videotoolbox', '-an', get_test_example_file('target-240p-h265.mp4') ])
else:
subprocess.run([ 'ffmpeg', '-i', get_test_example_file('target-240p.mp4'), '-c:v', 'libx265', '-an', get_test_example_file('target-240p-h265.mp4') ])
subprocess.run([ 'ffmpeg', '-i', get_test_example_file('target-240p.mp4'), '-c:v', 'libx265', '-an', '-movflags', '+faststart', get_test_example_file('target-240p-h265.mp4') ])
state_manager.init_item('temp_path', tempfile.gettempdir())
state_manager.init_item('temp_frame_format', 'png')
state_manager.init_item('output_audio_encoder', 'aac')
@@ -250,12 +245,8 @@ def test_sanitize_video() -> None:
get_test_output_path('test-sanitize-video-moderate.mp4')
]
if is_linux():
assert sanitize_video(create_media_reader(file_path), output_paths[0], 'strict') is True
assert probe_entries(output_paths[0], [ 'codec_name' ]).get('codec_name') == 'h264'
else:
#todo: fix this test under windows - might be just proper preparation of testfile, as we need moov at the beginning
pytest.skip()
assert sanitize_video(create_media_reader(file_path), output_paths[0], 'strict') is True
assert probe_entries(output_paths[0], [ 'codec_name' ]).get('codec_name') == 'h264'
assert sanitize_video(create_media_reader(file_path), output_paths[1], 'moderate') is True
assert probe_entries(output_paths[1], [ 'codec_name' ]).get('codec_name') == 'hevc'