Fix set audio quality

This commit is contained in:
henryruhs
2025-01-13 11:46:56 +01:00
parent 8a9e08f3a2
commit b8ebcf9fe3
3 changed files with 38 additions and 18 deletions

View File

@@ -124,13 +124,16 @@ def set_audio_channel_total(audio_channel_total : int) -> Commands:
def set_audio_quality(audio_encoder : AudioEncoder, audio_quality : int) -> Commands: def set_audio_quality(audio_encoder : AudioEncoder, audio_quality : int) -> Commands:
if audio_encoder == 'aac': if audio_encoder == 'aac':
audio_compression = round(10 - (audio_quality * 0.9)) audio_compression = round(2.0 - ((audio_quality / 100) * 1.9), 1)
return [ '-q:a', str(audio_compression) ] return [ '-q:a', str(audio_compression) ]
if audio_encoder == 'libmp3lame': if audio_encoder == 'libmp3lame':
audio_compression = round(9 - (audio_quality * 0.9)) audio_compression = round(9 - (audio_quality / 100) * 9)
return [ '-q:a', str(audio_compression) ] return [ '-q:a', str(audio_compression) ]
if audio_encoder in [ 'libopus', 'libvorbis' ]: if audio_encoder == 'libopus':
audio_compression = round((100 - audio_quality) / 10) audio_bit_rate = round(64 + (audio_quality / 100) * (320 - 64))
return [ '-b:a', str(audio_bit_rate) + 'k' ]
if audio_encoder == 'libvorbis':
audio_compression = round(-1.0 + (audio_quality / 100) * 11, 1)
return [ '-q:a', str(audio_compression) ] return [ '-q:a', str(audio_compression) ]
return [] return []

View File

@@ -1,17 +1,18 @@
from shutil import which from shutil import which
from facefusion import curl_builder, metadata from facefusion import metadata
from facefusion.curl_builder import chain, head, run
def test_run() -> None: def test_run() -> None:
user_agent = metadata.get('name') + '/' + metadata.get('version') user_agent = metadata.get('name') + '/' + metadata.get('version')
assert curl_builder.run([]) == [ which('curl'), '--user-agent', user_agent, '--insecure', '--location', '--silent' ] assert run([]) == [ which('curl'), '--user-agent', user_agent, '--insecure', '--location', '--silent' ]
def test_chain() -> None: def test_chain() -> None:
commands = curl_builder.chain( commands = chain(
curl_builder.head(metadata.get('url')) head(metadata.get('url'))
) )
assert commands == [ '-I', metadata.get('url') ] assert commands == [ '-I', metadata.get('url') ]

View File

@@ -1,14 +1,15 @@
from shutil import which from shutil import which
from facefusion import ffmpeg_builder from facefusion import ffmpeg_builder
from facefusion.ffmpeg_builder import chain, run, select_frame_range, set_audio_quality, set_audio_sample_size, set_stream_mode
def test_run() -> None: def test_run() -> None:
assert ffmpeg_builder.run([]) == [ which('ffmpeg'), '-loglevel', 'error' ] assert run([]) == [ which('ffmpeg'), '-loglevel', 'error' ]
def test_chain() -> None: def test_chain() -> None:
commands = ffmpeg_builder.chain( commands = chain(
ffmpeg_builder.set_progress() ffmpeg_builder.set_progress()
) )
@@ -16,17 +17,32 @@ def test_chain() -> None:
def test_stream_mode() -> None: def test_stream_mode() -> None:
assert ffmpeg_builder.set_stream_mode('udp') == [ '-f', 'mpegts' ] assert set_stream_mode('udp') == [ '-f', 'mpegts' ]
assert ffmpeg_builder.set_stream_mode('v4l2') == [ '-f', 'v4l2' ] assert set_stream_mode('v4l2') == [ '-f', 'v4l2' ]
def test_select_frame_range() -> None: def test_select_frame_range() -> None:
assert ffmpeg_builder.select_frame_range(0, None, 30) == [ '-vf', 'trim=start_frame=0,fps=30' ] assert select_frame_range(0, None, 30) == [ '-vf', 'trim=start_frame=0,fps=30' ]
assert ffmpeg_builder.select_frame_range(None, 100, 30) == [ '-vf', 'trim=end_frame=100,fps=30' ] assert select_frame_range(None, 100, 30) == [ '-vf', 'trim=end_frame=100,fps=30' ]
assert ffmpeg_builder.select_frame_range(0, 100, 30) == [ '-vf', 'trim=start_frame=0:end_frame=100,fps=30' ] assert select_frame_range(0, 100, 30) == [ '-vf', 'trim=start_frame=0:end_frame=100,fps=30' ]
assert ffmpeg_builder.select_frame_range(None, None, 30) == [ '-vf', 'fps=30' ] assert select_frame_range(None, None, 30) == [ '-vf', 'fps=30' ]
def test_audio_sample_size() -> None: def test_audio_sample_size() -> None:
assert ffmpeg_builder.set_audio_sample_size(16) == [ '-f', 's16le', '-acodec', 'pcm_s16le' ] assert set_audio_sample_size(16) == [ '-f', 's16le', '-acodec', 'pcm_s16le' ]
assert ffmpeg_builder.set_audio_sample_size(32) == [ '-f', 's32le', '-acodec', 'pcm_s32le' ] assert set_audio_sample_size(32) == [ '-f', 's32le', '-acodec', 'pcm_s32le' ]
def test_set_audio_quality() -> None:
assert set_audio_quality('aac', 0) == [ '-q:a', '2.0' ]
assert set_audio_quality('aac', 50) == [ '-q:a', '1.1' ]
assert set_audio_quality('aac', 100) == [ '-q:a', '0.1' ]
assert set_audio_quality('libmp3lame', 0) == [ '-q:a', '9' ]
assert set_audio_quality('libmp3lame', 50) == [ '-q:a', '4' ]
assert set_audio_quality('libmp3lame', 100) == [ '-q:a', '0' ]
assert set_audio_quality('libopus', 0) == [ '-b:a', '64k' ]
assert set_audio_quality('libopus', 50) == [ '-b:a', '192k' ]
assert set_audio_quality('libopus', 100) == [ '-b:a', '320k' ]
assert set_audio_quality('libvorbis', 0) == [ '-q:a', '-1.0' ]
assert set_audio_quality('libvorbis', 50) == [ '-q:a', '4.5' ]
assert set_audio_quality('libvorbis', 100) == [ '-q:a', '10.0' ]