New upstream version 23.2.1+dfsg1

This commit is contained in:
Simon Chopin 2019-07-27 14:47:10 +02:00
parent cdc9a9fc87
commit b14f9eae6d
1017 changed files with 37232 additions and 11111 deletions

View file

@ -1,13 +1,23 @@
project(obs-filters)
find_package(Libspeexdsp QUIET)
if(LIBSPEEXDSP_FOUND)
set(obs-filters_LIBSPEEXDSP_SOURCES
noise-suppress-filter.c)
set(obs-filters_LIBSPEEXDSP_LIBRARIES
${LIBSPEEXDSP_LIBRARIES})
option(DISABLE_SPEEXDSP "Disable building of the SpeexDSP-based Noise Suppression filter" OFF)
if(DISABLE_SPEEXDSP)
message(STATUS "SpeexDSP support disabled")
set(LIBSPEEXDSP_FOUND FALSE)
else()
message(STATUS "Speexdsp library not found, speexdsp filters disabled")
find_package(Libspeexdsp QUIET)
if(NOT LIBSPEEXDSP_FOUND)
message(STATUS "SpeexDSP support not found")
set(LIBSPEEXDSP_FOUND FALSE)
else()
message(STATUS "SpeexDSP supported")
set(obs-filters_LIBSPEEXDSP_SOURCES
noise-suppress-filter.c)
set(obs-filters_LIBSPEEXDSP_LIBRARIES
${LIBSPEEXDSP_LIBRARIES})
endif()
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/obs-filters-config.h.in"
@ -38,7 +48,11 @@ set(obs-filters_SOURCES
gain-filter.c
noise-gate-filter.c
mask-filter.c
compressor-filter.c)
invert-audio-polarity.c
compressor-filter.c
limiter-filter.c
expander-filter.c
luma-key-filter.c)
add_library(obs-filters MODULE
${obs-filters_SOURCES}

View file

@ -35,7 +35,6 @@ struct chroma_key_filter_data {
gs_eparam_t *pixel_size_param;
gs_eparam_t *chroma_param;
gs_eparam_t *key_rgb_param;
gs_eparam_t *similarity_param;
gs_eparam_t *smoothness_param;
gs_eparam_t *spill_param;
@ -45,7 +44,6 @@ struct chroma_key_filter_data {
float brightness;
float gamma;
struct vec4 key_rgb;
struct vec2 chroma;
float similarity;
float smoothness;
@ -97,6 +95,7 @@ static inline void chroma_settings_update(
SETTING_KEY_COLOR);
const char *key_type = obs_data_get_string(settings,
SETTING_COLOR_TYPE);
struct vec4 key_rgb;
struct vec4 key_color_v4;
struct matrix4 yuv_mat_m4;
@ -107,10 +106,10 @@ static inline void chroma_settings_update(
else if (strcmp(key_type, "magenta") == 0)
key_color = 0xFF00FF;
vec4_from_rgba(&filter->key_rgb, key_color | 0xFF000000);
vec4_from_rgba(&key_rgb, key_color | 0xFF000000);
memcpy(&yuv_mat_m4, yuv_mat, sizeof(yuv_mat));
vec4_transform(&key_color_v4, &filter->key_rgb, &yuv_mat_m4);
vec4_transform(&key_color_v4, &key_rgb, &yuv_mat_m4);
vec2_set(&filter->chroma, key_color_v4.y, key_color_v4.z);
filter->similarity = (float)similarity / 1000.0f;
@ -161,8 +160,6 @@ static void *chroma_key_create(obs_data_t *settings, obs_source_t *context)
filter->effect, "gamma");
filter->chroma_param = gs_effect_get_param_by_name(
filter->effect, "chroma_key");
filter->key_rgb_param = gs_effect_get_param_by_name(
filter->effect, "key_rgb");
filter->pixel_size_param = gs_effect_get_param_by_name(
filter->effect, "pixel_size");
filter->similarity_param = gs_effect_get_param_by_name(
@ -205,7 +202,6 @@ static void chroma_key_render(void *data, gs_effect_t *effect)
gs_effect_set_float(filter->brightness_param, filter->brightness);
gs_effect_set_float(filter->gamma_param, filter->gamma);
gs_effect_set_vec2(filter->chroma_param, &filter->chroma);
gs_effect_set_vec4(filter->key_rgb_param, &filter->key_rgb);
gs_effect_set_vec2(filter->pixel_size_param, &pixel_size);
gs_effect_set_float(filter->similarity_param, filter->similarity);
gs_effect_set_float(filter->smoothness_param, filter->smoothness);
@ -251,7 +247,8 @@ static obs_properties_t *chroma_key_properties(void *data)
obs_properties_add_int_slider(props, SETTING_SPILL,
TEXT_SPILL, 1, 1000, 1);
obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
0, 100, 1);
obs_properties_add_float_slider(props, SETTING_CONTRAST,
TEXT_CONTRAST, -1.0, 1.0, 0.01);
obs_properties_add_float_slider(props, SETTING_BRIGHTNESS,

View file

@ -218,7 +218,8 @@ static obs_properties_t *color_key_properties(void *data)
obs_properties_add_int_slider(props, SETTING_SMOOTHNESS,
TEXT_SMOOTHNESS, 1, 1000, 1);
obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
0, 100, 1);
obs_properties_add_float_slider(props, SETTING_CONTRAST,
TEXT_CONTRAST, -1.0, 1.0, 0.01);
obs_properties_add_float_slider(props, SETTING_BRIGHTNESS,

View file

@ -12,7 +12,6 @@ uniform float brightness;
uniform float gamma;
uniform float2 chroma_key;
uniform float4 key_rgb;
uniform float2 pixel_size;
uniform float similarity;
uniform float smoothness;
@ -55,17 +54,15 @@ float4 SampleTexture(float2 uv)
float GetBoxFilteredChromaDist(float3 rgb, float2 texCoord)
{
float distVal = GetChromaDist(rgb);
distVal += GetChromaDist(SampleTexture(texCoord-pixel_size).rgb);
distVal += GetChromaDist(SampleTexture(texCoord-float2(pixel_size.x, 0.0)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord-float2(pixel_size.x, -pixel_size.y)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord-float2(0.0, pixel_size.y)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+float2(0.0, pixel_size.y)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+float2(pixel_size.x, -pixel_size.y)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+float2(pixel_size.x, 0.0)).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+pixel_size).rgb);
float2 h_pixel_size = pixel_size / 2.0;
float2 point_0 = float2(pixel_size.x, h_pixel_size.y);
float2 point_1 = float2(h_pixel_size.x, -pixel_size.y);
float distVal = GetChromaDist(SampleTexture(texCoord-point_0).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+point_0).rgb);
distVal += GetChromaDist(SampleTexture(texCoord-point_1).rgb);
distVal += GetChromaDist(SampleTexture(texCoord+point_1).rgb);
distVal *= 2.0;
distVal += GetChromaDist(rgb);
return distVal / 9.0;
}
@ -76,6 +73,7 @@ float4 ProcessChromaKey(float4 rgba, VertData v_in)
float fullMask = pow(saturate(baseMask / smoothness), 1.5);
float spillVal = pow(saturate(baseMask / spill), 1.5);
rgba.rgba *= color;
rgba.a *= fullMask;
float desat = (rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722);
@ -86,7 +84,7 @@ float4 ProcessChromaKey(float4 rgba, VertData v_in)
float4 PSChromaKeyRGBA(VertData v_in) : TARGET
{
float4 rgba = image.Sample(textureSampler, v_in.uv) * color;
float4 rgba = image.Sample(textureSampler, v_in.uv);
return ProcessChromaKey(rgba, v_in);
}

View file

@ -39,17 +39,9 @@ float GetColorDist(float3 rgb)
return distance(key_color.rgb, rgb);
}
float4 SampleYUVToRGB(float2 uv)
{
float4 yuv = image.Sample(textureSampler, uv);
yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max);
return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
}
float4 ProcessColorKey(float4 rgba, VertData v_in)
{
float colorDist = GetColorDist(rgba.rgb);
float baseMask = colorDist - similarity;
rgba.a *= saturate(max(colorDist - similarity, 0.0) / smoothness);
return CalcColor(rgba);

View file

@ -0,0 +1,4 @@
Limiter="Ограничител"
Limiter.Threshold="Праг на отсичане (dB)"
Limiter.ReleaseTime="Време за отговор (мс)"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Retard de processament"
UndistortCenter="No distorsionis el centre de la imatge en escalar des d'una ultrapanoràmica"
NoiseGate="Porta de soroll"
NoiseSuppress="Supressió de soroll"
InvertPolarity="Inverteix la polaritat"
Gain="Guany"
DelayMs="Retard (en mil·lisegons)"
Type="Tipus"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Temps d'alliberar (mil·lisegons)"
Gain.GainDB="Guany (dB)"
StretchImage="Expandir imatge (descarta la relació d'aspecte d'imatge)"
Resolution="Resolució"
Base.Canvas="Resolució base (Llenç)"
None="Cap"
ScaleFiltering="Escala de filtratge"
ScaleFiltering.Point="Punt"
ScaleFiltering.Bilinear="Bilineal"
ScaleFiltering.Bicubic="Bicúbic"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Àrea"
NoiseSuppress.SuppressLevel="Nivell de supressió (dB)"
Saturation="Saturació"
HueShift="Cavi de tonalitat"
@ -74,4 +77,25 @@ Compressor.AttackTime="Atac (ms)"
Compressor.ReleaseTime="Llançament (ms)"
Compressor.OutputGain="Guany de sortida (dB)"
Compressor.SidechainSource="Font d'atenuació/reducció"
Limiter="Límit"
Limiter.Threshold="Llindar (dB)"
Limiter.ReleaseTime="Llançament (ms)"
Expander="Expansor"
Expander.Ratio="Ràtio (X:1)"
Expander.Threshold="Llindar (dB)"
Expander.AttackTime="Atac (ms)"
Expander.ReleaseTime="Llançament (ms)"
Expander.OutputGain="Guany de sortida (dB)"
Expander.Detector="Detecció"
Expander.RMS="RMS"
Expander.Peak="Límit"
Expander.None="Cap"
Expander.Presets="Predefinits"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Porta"
LumaKeyFilter="Clau Luma"
Luma.LumaMax="Màx. Luma"
Luma.LumaMin="Mín. Luma"
Luma.LumaMaxSmooth="Suavitzat màx. Luma"
Luma.LumaMinSmooth="Suavitzat mín. Luma"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Zpoždění vykreslování"
UndistortCenter="Zlepší střed obrázku při škálování z ultra-širokého obrazu"
NoiseGate="Šumová brána"
NoiseSuppress="Potlačení šumu"
InvertPolarity="Obrátit polaritu"
Gain="Zisk"
DelayMs="Zpoždění (ms)"
Type="Typ"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Čas uvolnění (ms)"
Gain.GainDB="Zisk (dB)"
StretchImage="Roztáhnout obrázek (ignorovat poměr stran)"
Resolution="Rozlišení"
Base.Canvas="Základní rozlišení"
None="Žádné"
ScaleFiltering="Filtrování rozsahu"
ScaleFiltering.Point="Bod"
ScaleFiltering.Bilinear="Bilineární"
ScaleFiltering.Bicubic="Bikubický"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Oblast"
NoiseSuppress.SuppressLevel="Úroveň potlačení (dB)"
Saturation="Saturace"
HueShift="Posun odstínu"
@ -74,4 +77,25 @@ Compressor.AttackTime="Stažení (v ms)"
Compressor.ReleaseTime="Uvolnění (v ms)"
Compressor.OutputGain="Síla výstupu (v dB)"
Compressor.SidechainSource="Zdroj pro side-chain/ducking"
Limiter="Omezovač"
Limiter.Threshold="Práh (v dB)"
Limiter.ReleaseTime="Uvolnění (v ms)"
Expander="Expander"
Expander.Ratio="Poměr (X:1)"
Expander.Threshold="Práh (v dB)"
Expander.AttackTime="Stažení (v ms)"
Expander.ReleaseTime="Uvolnění (v ms)"
Expander.OutputGain="Síla výstupu (v dB)"
Expander.Detector="Detekce"
Expander.RMS="RMS"
Expander.Peak="Špičky"
Expander.None="Žádná"
Expander.Presets="Předvolby"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Brána"
LumaKeyFilter="Luma klíč"
Luma.LumaMax="Luma maximum"
Luma.LumaMin="Luma minimum"
Luma.LumaMaxSmooth="Luma maximální vyhlazení"
Luma.LumaMinSmooth="Luma minimální vyhlazení"

View file

@ -1,10 +1,10 @@
ColorFilter="Farvekorrektion"
ColorGradeFilter="Anvend LUT"
MaskFilter="Billede maske/blanding"
AsyncDelayFilter="Video forsinkelse (asynkron)"
MaskFilter="Billedmaskering/-blanding"
AsyncDelayFilter="Videoforsinkelse (asynkron)"
CropFilter="Beskæring/Polstring"
ScrollFilter="Rul"
ChromaKeyFilter="Chroma nøgle"
ChromaKeyFilter="Chroma-nøgle"
ColorKeyFilter="Farvenøgle"
SharpnessFilter="Skarphed"
ScaleFilter="Skalering/Formatforhold"
@ -12,14 +12,15 @@ GPUDelayFilter="Renderingsforsinkelse"
UndistortCenter="Fjern forvrængning af billedets midte ved skalering fra ultrabred"
NoiseGate="Noise Gate"
NoiseSuppress="Støjundertrykkelse"
InvertPolarity="Invertér polaritet"
Gain="Forstærkning"
DelayMs="Forsinkelse (millisekunder)"
Type="Type"
MaskBlendType.MaskColor="Alpha maske (farvekanal)"
MaskBlendType.MaskAlpha="Alpha maske (Alpha kanal)"
MaskBlendType.BlendMultiply="Blend (formere)"
MaskBlendType.BlendAddition="Blanding (tilføjelse)"
MaskBlendType.BlendSubtraction="Blanding (subtraktion)"
MaskBlendType.MaskColor="Alpha-maske (farvekanal)"
MaskBlendType.MaskAlpha="Alpha-maske (Alpha-kanal)"
MaskBlendType.BlendMultiply="Bland (formere)"
MaskBlendType.BlendAddition="Bland (tilføjelse)"
MaskBlendType.BlendSubtraction="Bland (subtraktion)"
Path="Sti"
Color="Farve"
Opacity="Gennemsigtighed"
@ -28,11 +29,11 @@ Brightness="Lysstyrke"
Gamma="Gamma"
BrowsePath.Images="Alle billedfiler"
BrowsePath.AllFiles="Alle filer"
KeyColorType="Nøglefarve type"
KeyColor="Nøglefarven"
Similarity="Lighed (1-1000)"
Smoothness="Glathed (1-1000)"
ColorSpillReduction="Nøglefarve udslipsreduktion (1-1000)"
KeyColorType="Nøglefarvetype"
KeyColor="Nøglefarve"
Similarity="Lighed (1-1.000)"
Smoothness="Glathed (1-1.000)"
ColorSpillReduction="Nøglefarve udslipsreduktion (1-1.000)"
Crop.Left="Venstre"
Crop.Right="Højre"
Crop.Top="Top"
@ -44,25 +45,27 @@ ScrollFilter.SpeedX="Horisontal hastighed"
ScrollFilter.SpeedY="Vertikal hastighed"
ScrollFilter.LimitWidth="Begræns bredde"
ScrollFilter.LimitHeight="Begræns højde"
CustomColor="Brugerdefineret farve"
CustomColor="Tilpasset farve"
Red="Rød"
Green="Grøn"
Blue="Blå"
Magenta="Magenta"
NoiseGate.OpenThreshold="Åbne-tærskel (dB)"
NoiseGate.CloseThreshold="Lukke-tærskel (dB)"
NoiseGate.AttackTime="Effektueringstid (millisek.)"
NoiseGate.OpenThreshold="Åbningstærskel (dB)"
NoiseGate.CloseThreshold="Lukningstærskel (dB)"
NoiseGate.AttackTime="Responstid (millisek.)"
NoiseGate.HoldTime="Holdetid (millisek.)"
NoiseGate.ReleaseTime="Frigivelsestid (millisek.)"
Gain.GainDB="Forstærkning (dB)"
StretchImage="Stræk billedet (ignorer størrelsesforhold)"
StretchImage="Stræk billede (ignorér størrelsesforhold)"
Resolution="Opløsning"
Base.Canvas="Grundopløsning (lærred)"
None="Ingen"
ScaleFiltering="Skaleringsfilter"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilineær"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Område"
NoiseSuppress.SuppressLevel="Undertrykkelsesniveau (dB)"
Saturation="Mætning"
HueShift="Nuanceskift"
@ -70,8 +73,29 @@ Amount="Værdi"
Compressor="Kompressor"
Compressor.Ratio="Forhold (X:1)"
Compressor.Threshold="Grænse (dB)"
Compressor.AttackTime="Attack (ms)"
Compressor.ReleaseTime="Release (ms)"
Compressor.OutputGain="Output øgning (dB)"
Compressor.SidechainSource="Sidechain/Ducking-kilde"
Compressor.AttackTime="Responstid (ms)"
Compressor.ReleaseTime="Frigivelse (ms)"
Compressor.OutputGain="Outputforstærkning (dB)"
Compressor.SidechainSource="Sidechain-/Ducking-kilde"
Limiter="Begrænser"
Limiter.Threshold="Grænse (dB)"
Limiter.ReleaseTime="Frigivelse (ms)"
Expander="Expander"
Expander.Ratio="Forhold (X:1)"
Expander.Threshold="Grænse (dB)"
Expander.AttackTime="Responstid (ms)"
Expander.ReleaseTime="Frigivelse (ms)"
Expander.OutputGain="Outputforstærkning (dB)"
Expander.Detector="Detektering"
Expander.RMS="RMS"
Expander.Peak="Spids"
Expander.None="Ingen"
Expander.Presets="Forvalg"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Gate"
LumaKeyFilter="Luma Key"
Luma.LumaMax="Luma maks."
Luma.LumaMin="Luma min."
Luma.LumaMaxSmooth="Luma maks. glidende"
Luma.LumaMinSmooth="Luma min. glidende"

View file

@ -1,25 +1,26 @@
ColorFilter="Farbkorrektur"
ColorGradeFilter="LUT anwenden"
MaskFilter="Bild Maske/Blend"
MaskFilter="Bildmaske/-Vermischung"
AsyncDelayFilter="Videoverzögerung (Asynchron)"
CropFilter="Zuschneiden/Pad"
ScrollFilter="Bewegung"
ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Color Key"
SharpnessFilter="Schärfen"
SharpnessFilter="Schärfung"
ScaleFilter="Skalierung/Seitenverhältnis"
GPUDelayFilter="Renderverzögerung"
UndistortCenter="Entzerre Mitte des Bildes bei der Skalierung von Ultraweitwinkel"
UndistortCenter="Mitte des Bildes bei der Skalierung von Ultraweitwinkel entzerren"
NoiseGate="Noise Gate"
NoiseSuppress="Rauschunterdrückung"
InvertPolarity="Audiopolarität umkehren"
Gain="Gain"
DelayMs="Verzögerung (Millisekunden)"
Type="Art"
MaskBlendType.MaskColor="Alphamaske (Farbkanal)"
MaskBlendType.MaskAlpha="Alphamaske (Alphakanal)"
MaskBlendType.BlendMultiply="Blend (Multiplizieren)"
MaskBlendType.BlendAddition="Blend (Addition)"
MaskBlendType.BlendSubtraction="Blend (Subtraktion)"
MaskBlendType.BlendAddition="Blend (Addieren)"
MaskBlendType.BlendSubtraction="Blend (Subtrahieren)"
Path="Pfad"
Color="Farbe"
Opacity="Deckkraft"
@ -28,11 +29,11 @@ Brightness="Helligkeit"
Gamma="Gamma"
BrowsePath.Images="Alle Bilddateien"
BrowsePath.AllFiles="Alle Dateien"
KeyColorType="Key-Farbe-Typ"
KeyColorType="Key-Farbtyp"
KeyColor="Key-Farbe"
Similarity="Ähnlichkeit (1-1000)"
Smoothness="Glätte (1-1000)"
ColorSpillReduction="Key-Farbe Spill Reduktion (1-1000)"
Similarity="Ähnlichkeit (11000)"
Smoothness="Glätte (11000)"
ColorSpillReduction="Key-Farbe-Spill-Reduzierung (1 — 1000)"
Crop.Left="Links"
Crop.Right="Rechts"
Crop.Top="Oben"
@ -57,21 +58,44 @@ NoiseGate.ReleaseTime="Release-Zeit (Millisekunden)"
Gain.GainDB="Gain (dB)"
StretchImage="Bild strecken (Bildseitenverhältnis verwerfen)"
Resolution="Auflösung"
Base.Canvas="Basis-(Leinwand-)Auflösung"
None="Keine"
ScaleFiltering="Skalierungsfilterung"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Bereich"
NoiseSuppress.SuppressLevel="Unterdrückungspegel (dB)"
Saturation="Sättigung"
HueShift="Farbtonverschiebung"
Amount="Betrag"
Compressor="Kompressor"
Compressor.Ratio="Verhältnis (X:1)"
Compressor.Threshold="Schwelle (dB)"
Compressor.Threshold="Schwellenwert (dB)"
Compressor.AttackTime="Angriff (ms)"
Compressor.ReleaseTime="Freigabe (ms)"
Compressor.ReleaseTime="Abfallzeit (ms)"
Compressor.OutputGain="Ausgangspegel (dB)"
Compressor.SidechainSource="Sidechain/Ducking Quelle"
Compressor.SidechainSource="Sidechain-/Ducking-Quelle"
Limiter="Begrenzer"
Limiter.Threshold="Schwellenwert (dB)"
Limiter.ReleaseTime="Abfallzeit (ms)"
Expander="Expander"
Expander.Ratio="Verhältnis (X:1)"
Expander.Threshold="Schwellenwert (dB)"
Expander.AttackTime="Angriff (ms)"
Expander.ReleaseTime="Abfallzeit (ms)"
Expander.OutputGain="Ausgangspegel (dB)"
Expander.Detector="Erkennung"
Expander.RMS="RMS"
Expander.Peak="Spitze"
Expander.None="Keine"
Expander.Presets="Voreinstellungen"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Gate"
LumaKeyFilter="Luma-Key"
Luma.LumaMax="Max. Luma"
Luma.LumaMin="Min. Luma"
Luma.LumaMaxSmooth="Max. Luma-Glätte"
Luma.LumaMinSmooth="Min. Luma-Glätte"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Render Delay"
UndistortCenter="Undistort center of image when scaling from ultrawide"
NoiseGate="Noise Gate"
NoiseSuppress="Noise Suppression"
InvertPolarity="Invert Polarity"
Gain="Gain"
DelayMs="Delay (milliseconds)"
Type="Type"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Release Time (milliseconds)"
Gain.GainDB="Gain (dB)"
StretchImage="Stretch Image (discard image aspect ratio)"
Resolution="Resolution"
Base.Canvas="Base (Canvas) Resolution"
None="None"
ScaleFiltering="Scale Filtering"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Area"
NoiseSuppress.SuppressLevel="Suppression Level (dB)"
Saturation="Saturation"
HueShift="Hue Shift"
@ -74,3 +77,24 @@ Compressor.AttackTime="Attack (ms)"
Compressor.ReleaseTime="Release (ms)"
Compressor.OutputGain="Output Gain (dB)"
Compressor.SidechainSource="Sidechain/Ducking Source"
Limiter="Limiter"
Limiter.Threshold="Threshold (dB)"
Limiter.ReleaseTime="Release (ms)"
Expander="Expander"
Expander.Ratio="Ratio (X:1)"
Expander.Threshold="Threshold (dB)"
Expander.AttackTime="Attack (ms)"
Expander.ReleaseTime="Release (ms)"
Expander.OutputGain="Output Gain (dB)"
Expander.Detector="Detection"
Expander.RMS="RMS"
Expander.Peak="Peak"
Expander.None="None"
Expander.Presets="Presets"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Gate"
LumaKeyFilter="Luma Key"
Luma.LumaMax="Luma Max"
Luma.LumaMin="Luma Min"
Luma.LumaMaxSmooth="Luma Max Smooth"
Luma.LumaMinSmooth="Luma Min Smooth"

View file

@ -1,17 +1,18 @@
ColorFilter="Corrección de color"
ColorGradeFilter="Aplicar LUT"
MaskFilter="Imagen máscara/mezcla"
AsyncDelayFilter="Retardo de Video (asincróno)"
AsyncDelayFilter="Retardo de Vídeo (asíncrono)"
CropFilter="Recortar/Acolchar"
ScrollFilter="desplazamiento"
ScrollFilter="Desplazamiento"
ChromaKeyFilter="Fondro croma"
ColorKeyFilter="Filtro de color"
SharpnessFilter="Filtro de enfoque"
ScaleFilter="Escala/Relación de Aspecto"
GPUDelayFilter="Retardo de procesamiento"
UndistortCenter="No distorsionar el centro de la imagen en escalar des de una ultrapanorámica"
UndistortCenter="No distorsionar el centro de la imagen al escalar desde una ultrapanorámica"
NoiseGate="Puerta anti-ruidos"
NoiseSuppress="Eliminación de ruido"
InvertPolarity="Invertir polaridad"
Gain="Ganancia"
DelayMs="Retardo (milisegundos)"
Type="Tipo"
@ -41,7 +42,7 @@ Crop.Width="Ancho"
Crop.Height="Alto"
Crop.Relative="Relativo"
ScrollFilter.SpeedX="Velocidad Horizontal"
ScrollFilter.SpeedY="VElocidad Vertical"
ScrollFilter.SpeedY="Velocidad Vertical"
ScrollFilter.LimitWidth="Limitar el ancho"
ScrollFilter.LimitHeight="Limitar la altura"
CustomColor="Color Personalizado"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Tiempo (en milisegundos) de liberacion"
Gain.GainDB="Ganancia (dB)"
StretchImage="Expandir imagen (descartar relación de aspecto de imagen)"
Resolution="Resolución"
Base.Canvas="Resolución base (Lienzo)"
None="Ninguno"
ScaleFiltering="Escala de filtrado"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineal"
ScaleFiltering.Bicubic="Bicúbico"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Área"
NoiseSuppress.SuppressLevel="Nivel de eliminación de ruido (dB)"
Saturation="Saturación"
HueShift="Cambio de tonalidad"
@ -74,4 +77,25 @@ Compressor.AttackTime="Ataque (ms)"
Compressor.ReleaseTime="Liberación (ms)"
Compressor.OutputGain="Ganancia de salida (dB)"
Compressor.SidechainSource="Fuente de atenuación/reducción"
Limiter="Limitador"
Limiter.Threshold="Umbral (dB)"
Limiter.ReleaseTime="Soltar (ms)"
Expander="Expansor"
Expander.Ratio="Relación (X:1)"
Expander.Threshold="Umbral (dB)"
Expander.AttackTime="Atacar (ms)"
Expander.ReleaseTime="Soltar (ms)"
Expander.OutputGain="Ganancia de salida (dB)"
Expander.Detector="Detección"
Expander.RMS="RMS"
Expander.Peak="Pico"
Expander.None="Ninguna"
Expander.Presets="Pre-ajustes"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Puerta"
LumaKeyFilter="Clave Luma"
Luma.LumaMax="Máx. Luma"
Luma.LumaMin="Min. Luma"
Luma.LumaMaxSmooth="Suavizado Máximo Luma"
Luma.LumaMinSmooth="Suavizado Mínimo Luma"

View file

@ -6,12 +6,13 @@ CropFilter="Moztu/Bete"
ScrollFilter="Korritu"
ChromaKeyFilter="Kroma"
ColorKeyFilter="Kolore gakoa"
SharpnessFilter="Enfokea"
SharpnessFilter="Fokatzea"
ScaleFilter="Eskala/Aspektu-erlazioa"
GPUDelayFilter="Errendatzearen atzerapena"
UndistortCenter="Ez distortsionatu irudiaren erdigunea ultra zabala eskalatzean"
NoiseGate="Zarata atalasea"
NoiseSuppress="Zarata kendu"
InvertPolarity="Polaritatea alderantzikatu"
Gain="Irabazia"
DelayMs="Atzerapena (milisegundo)"
Type="Mota"
@ -49,20 +50,22 @@ Red="Gorria"
Green="Berdea"
Blue="Urdina"
Magenta="Magenta"
NoiseGate.OpenThreshold="Irekiera muga (dB)"
NoiseGate.CloseThreshold="Itxiera muga (dB)"
NoiseGate.OpenThreshold="Irekiera atalasea (dB)"
NoiseGate.CloseThreshold="Itxiera atalasea (dB)"
NoiseGate.AttackTime="Eraso denbora (milisegundo)"
NoiseGate.HoldTime="Euste denbora (milisegundo)"
NoiseGate.ReleaseTime="Askatze denbora (milisegundo)"
Gain.GainDB="Irabazia (dB)"
StretchImage="Luzatu irudia (baztertu irudiaren aspektu-erlazioa)"
Resolution="Bereizmena"
Base.Canvas="Oinarriaren (oihalaren) bereizmena"
None="Ezer ez"
ScaleFiltering="Iragazketa-eskala"
ScaleFiltering.Point="Puntua"
ScaleFiltering.Bilinear="Bilineala"
ScaleFiltering.Bicubic="Bikubikoa"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Area"
NoiseSuppress.SuppressLevel="Kenketaren maila (dB)"
Saturation="Margoasetasuna"
HueShift="Nabardura Aldaketa"
@ -74,4 +77,25 @@ Compressor.AttackTime="Erasoa (ms)"
Compressor.ReleaseTime="Askapena (ms)"
Compressor.OutputGain="Irteerako irabazia (dB)"
Compressor.SidechainSource="Sidechain/Ducking iturburua"
Limiter="Mugatzailea"
Limiter.Threshold="Atalasea (dB)"
Limiter.ReleaseTime="Askatze denbora (ms)"
Expander="Deskonprimagailua"
Expander.Ratio="Erlazioa (X:1)"
Expander.Threshold="Atalasea (dB)"
Expander.AttackTime="Erasoa (ms)"
Expander.ReleaseTime="Askapena (ms)"
Expander.OutputGain="Irteerako irabazia (dB)"
Expander.Detector="Detekzioa"
Expander.RMS="RMS"
Expander.Peak="Gailurra"
Expander.None="Bat ere ez"
Expander.Presets="Aurrez ezarritakoak"
Expander.Presets.Expander="Deskonprimagailua"
Expander.Presets.Gate="Atea"
LumaKeyFilter="Luma gakoa"
Luma.LumaMax="Luma max"
Luma.LumaMin="Luma min"
Luma.LumaMaxSmooth="Luma leuntasun max"
Luma.LumaMinSmooth="Luma leuntasun min"

View file

@ -0,0 +1,18 @@
ColorFilter="اصلاح رنگ"
ColorGradeFilter="درخواست LUT"
MaskFilter="تصویر ماسک/مخلوط"
ChromaKeyFilter="صحنه کلیدی(کروماکی)"
ColorKeyFilter="رنگ کلیدی"
SharpnessFilter="تیزکردن"
BrowsePath.AllFiles="همه‌ی فایل ها"
KeyColorType="نوع رنگ کلیدی"
Crop.Left="چپ"
Crop.Right="راست"
Crop.Top="بالا"
Crop.Bottom="پایین"
Crop.Width="عرض"
Crop.Height="ارتفاع"
Red="قرمز"
Green="سبز"
ScaleFiltering.Area="ناحیه"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Renderoinnin viive"
UndistortCenter="Poista vääristymä keskeltä kuvaa skaalattaessa ultra-leveästä"
NoiseGate="Noise Gate"
NoiseSuppress="Melunvaimennus"
InvertPolarity="Käännä Audio-napaisuus"
Gain="Vahvistus"
DelayMs="Viive (millisekuntia)"
Type="Tyyppi"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Vapautumisaika (millisekuntia)"
Gain.GainDB="Vahvistus (dB)"
StretchImage="Venytä kuvaa (Ohita kuvasuhde)"
Resolution="Resoluutio"
Base.Canvas="Piirtoalueen (kanvaasin) resoluutio"
None="Ei mitään"
ScaleFiltering="Skaalauksen suodatus"
ScaleFiltering.Point="Piste"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Alue"
NoiseSuppress.SuppressLevel="Vaimennustaso (dB)"
Saturation="Värikylläisyys"
HueShift="Värisävy"
@ -74,4 +77,25 @@ Compressor.AttackTime="Attack-aika (ms)"
Compressor.ReleaseTime="Vapautumisaika (ms)"
Compressor.OutputGain="Signaalin vahvistus (dB)"
Compressor.SidechainSource="Lähteen väistäminen"
Limiter="Rajoitin"
Limiter.Threshold="Kynnysarvo (dB)"
Limiter.ReleaseTime="Vapautumisaika (ms)"
Expander="Laajentaja"
Expander.Ratio="Suhde (X:1)"
Expander.Threshold="Kynnysarvo (dB)"
Expander.AttackTime="Attack-aika (ms)"
Expander.ReleaseTime="Vapautumisaika (ms)"
Expander.OutputGain="Signaalin vahvistus (dB)"
Expander.Detector="Havaitseminen"
Expander.RMS="RMS"
Expander.Peak="Huippu"
Expander.None="Ei mitään"
Expander.Presets="Esiasetukset"
Expander.Presets.Expander="Laajentaja"
Expander.Presets.Gate="Gate"
LumaKeyFilter="Luma-avain"
Luma.LumaMax="Luma-maksimi"
Luma.LumaMin="Luma-minimi"
Luma.LumaMaxSmooth="Luma-maksimin pehmennys"
Luma.LumaMinSmooth="Luma-minimin pehmennys"

View file

@ -1,17 +1,18 @@
ColorFilter="Corrections colorimétrique"
ColorGradeFilter="Appliquer LUT"
ColorGradeFilter="Appliquer un LUT"
MaskFilter="Masque d'image/mélange"
AsyncDelayFilter="Retard vidéo (async.)"
AsyncDelayFilter="Retard vidéo (asynchrone)"
CropFilter="Rogner / Encadrer"
ScrollFilter="Défilement"
ChromaKeyFilter="Clé chromatique"
ColorKeyFilter="Couleur d'incrustation"
ChromaKeyFilter="Incrustation par chrominance (Chroma Key)"
ColorKeyFilter="Incrustation par couleur"
SharpnessFilter="Accentuer"
ScaleFilter="Mise à léchelle / Ratio d'affichage"
ScaleFilter="Mise à léchelle / Rapport d'affichage"
GPUDelayFilter="Délai de rendu"
UndistortCenter="Ne pas déformer le centre de l'image lors d'une mise à l'échelle ultra large"
NoiseGate="Noise Gate"
NoiseSuppress="Suppression du bruit"
InvertPolarity="Inverser la polarité"
Gain="Gain"
DelayMs="Retard (en millisecondes)"
Type="Type "
@ -26,7 +27,7 @@ Opacity="Opacité"
Contrast="Contraste"
Brightness="Luminosité"
Gamma="Gamma"
BrowsePath.Images="Tous les fichiers images"
BrowsePath.Images="Tous les fichiers Image"
BrowsePath.AllFiles="Tous les fichiers"
KeyColorType="Type de couleur-clé"
KeyColor="Couleur-clé"
@ -53,16 +54,18 @@ NoiseGate.OpenThreshold="Seuil d'ouverture (dB)"
NoiseGate.CloseThreshold="Seuil de fermeture (dB)"
NoiseGate.AttackTime="Temps d'attaque (millisecondes)"
NoiseGate.HoldTime="Temps de maintien (millisecondes)"
NoiseGate.ReleaseTime="Temps d'arrêt (millisecondes)"
NoiseGate.ReleaseTime="Temps de relâche (ou \"release\" en millisecondes)"
Gain.GainDB="Gain (dB)"
StretchImage="Étirer l'Image (ignorer ses proportions)"
Resolution="Résolution"
Base.Canvas="Résolution de base (canevas)"
None="Aucune"
ScaleFiltering="Échelle de filtrage"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinéaire"
ScaleFiltering.Bicubic="Bicubique"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Zone"
NoiseSuppress.SuppressLevel="Seuil de suppression (en dB)"
Saturation="Saturation"
HueShift="Décalage de teinte"
@ -71,7 +74,28 @@ Compressor="Compresseur"
Compressor.Ratio="Ratio (X:1)"
Compressor.Threshold="Seuil (dB)"
Compressor.AttackTime="Attaque (ms)"
Compressor.ReleaseTime="Libération (ms)"
Compressor.OutputGain="Sortie Gain (dB)"
Compressor.SidechainSource="Source Sidechain/Ducking"
Compressor.ReleaseTime="Relâchement (ou \"release\" en ms)"
Compressor.OutputGain="Gain en Sortie (dB)"
Compressor.SidechainSource="Source pour la Sidechain/Ducking"
Limiter="Limiteur"
Limiter.Threshold="Seuil (dB)"
Limiter.ReleaseTime="Relâchement (\"release\" en ms)"
Expander="Expandeur"
Expander.Ratio="Ratio (X:1)"
Expander.Threshold="Seuil (dB)"
Expander.AttackTime="Attaque (ms)"
Expander.ReleaseTime="Relâchement (\"release\" en ms)"
Expander.OutputGain="Gain en sortie (dB)"
Expander.Detector="Détection"
Expander.RMS="RMS"
Expander.Peak="Crête"
Expander.None="Aucune"
Expander.Presets="Pré-réglages"
Expander.Presets.Expander="Expandeur"
Expander.Presets.Gate="Gate"
LumaKeyFilter="Incrustation par luminance (Luma Key)"
Luma.LumaMax="Luminance max."
Luma.LumaMin="Luminance min."
Luma.LumaMaxSmooth="Adoucissement luminance max."
Luma.LumaMinSmooth="Adoucissement luminance min."

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Render késleltetés"
UndistortCenter="Kép közepének zavarosságának a csökkentése ultraszélesről való skálázás esetén"
NoiseGate="Zajgát"
NoiseSuppress="Zajcsökkentés"
InvertPolarity="Polaritás megfordítása"
Gain="Erősítés"
DelayMs="Késleltetés (ezredmásodperc)"
Type="Típus"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Felengedés ideje (ezredmásodperc)"
Gain.GainDB="Erősítés (dB)"
StretchImage="Kép nyújtása (képarány elvetésével)"
Resolution="Felbontás"
Base.Canvas="Alap (Vászon) felbontás"
None="Nincs"
ScaleFiltering="Skála-szűrés"
ScaleFiltering.Point="Pont"
ScaleFiltering.Bilinear="Bilineáris"
ScaleFiltering.Bicubic="Kettős köbös"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Terület"
NoiseSuppress.SuppressLevel="Csökkentési szint (dB)"
Saturation="Telítettség"
HueShift="Színezet váltása"
@ -74,4 +77,25 @@ Compressor.AttackTime="Aktiválás (ms)"
Compressor.ReleaseTime="Felengedés (ms)"
Compressor.OutputGain="Kimeneti erősítés (dB)"
Compressor.SidechainSource="Oldallánc/Buktatott forrás"
Limiter="Limiter"
Limiter.Threshold="Küszöb (dB)"
Limiter.ReleaseTime="Kiadás (ms)"
Expander="Expander"
Expander.Ratio="Arány (X:1)"
Expander.Threshold="Küszöb (dB)"
Expander.AttackTime="Aktiválás (ms)"
Expander.ReleaseTime="Felengedés (ms)"
Expander.OutputGain="Kimeneti erősítés (dB)"
Expander.Detector="Észlelés"
Expander.RMS="RMS"
Expander.Peak="Csúcs"
Expander.None="Nincs"
Expander.Presets="Készletek"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Kapu"
LumaKeyFilter="Luma kulcs"
Luma.LumaMax="Luma maximum"
Luma.LumaMin="Luma minimum"
Luma.LumaMaxSmooth="Luma maximum simított"
Luma.LumaMinSmooth="Luma minimum simított"

View file

@ -1,77 +1,101 @@
ColorFilter="Correzione colore"
ColorFilter="Correzione del colore"
ColorGradeFilter="Applica LUT"
MaskFilter="Immagine maschera/miscela"
MaskFilter="Maschera/miscela l'immagine"
AsyncDelayFilter="Ritardo video (Asincrono)"
CropFilter="Crop/Pad"
CropFilter="Ritaglia/aggiungi una cornice"
ScrollFilter="Scorrimento"
ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Chiave Colore"
ChromaKeyFilter="Chiave chroma"
ColorKeyFilter="Chiave colore"
SharpnessFilter="Nitidizza"
ScaleFilter="Ridimensionamento/Aspect Ratio"
GPUDelayFilter="Ritardo di rendering"
UndistortCenter="Rimuovi distorsione del centro immagine quando si scala da un rapporto molto alto"
ScaleFilter="Ridimensionamento/proporzioni"
GPUDelayFilter="Ritardo del rendering"
UndistortCenter="Rimuovi la distorsione del centro immagine quando si scala da un rapporto dello schermo ultrawide"
NoiseGate="Sensibilità dell'ingresso"
NoiseSuppress="Soppressione rumore"
Gain="Incremento"
DelayMs="Ritardo (millisecondi)"
NoiseSuppress="Riduzione del rumore"
InvertPolarity="Inverti la polarità"
Gain="Guadagno"
DelayMs="Ritardo (in millisecondi)"
Type="Tipo"
MaskBlendType.MaskColor="Maschera alfa (canale di colore)"
MaskBlendType.MaskAlpha="Maschera alfa (Canale alpha)"
MaskBlendType.MaskAlpha="Maschera alfa (canale alfa)"
MaskBlendType.BlendMultiply="Miscela (moltiplica)"
MaskBlendType.BlendAddition="Miscela (aggiunta)"
MaskBlendType.BlendSubtraction="Miscela (sottrazione)"
MaskBlendType.BlendAddition="Miscela (additiva)"
MaskBlendType.BlendSubtraction="Miscela (sottrattiva)"
Path="Percorso"
Color="Colore"
Opacity="Opacità"
Contrast="Contrasto"
Brightness="Luminosità"
Gamma="Gamma"
BrowsePath.Images="Tutti i file di immagine"
BrowsePath.Images="Tutti i file immagine"
BrowsePath.AllFiles="Tutti i file"
KeyColorType="Tipo di Color Key"
KeyColor="Key Color"
KeyColorType="Tipo di chiave colore"
KeyColor="Chiave colore"
Similarity="Somiglianza (1-1000)"
Smoothness="Scorrevolezza (1-1000)"
ColorSpillReduction="Key Color Spill Reduction (1-1000)"
Smoothness="Finezza (1-1000)"
ColorSpillReduction="Riduzione della sbavatura della chiave colore (1-1000)"
Crop.Left="A sinistra"
Crop.Right="A destra"
Crop.Top="In alto"
Crop.Bottom="In Basso"
Crop.Bottom="In basso"
Crop.Width="Larghezza"
Crop.Height="Altezza"
Crop.Relative="Relativo"
ScrollFilter.SpeedX="Velocità orizzontale"
ScrollFilter.SpeedY="Velocità verticale"
ScrollFilter.LimitWidth="Limite larghezza"
ScrollFilter.LimitHeight="Limite altezza"
CustomColor="Personalizza colore"
ScrollFilter.LimitWidth="Limite della larghezza"
ScrollFilter.LimitHeight="Limite dell'altezza"
CustomColor="Colore personalizzato"
Red="Rosso"
Green="Verde"
Blue="Blu"
Magenta="Magenta"
NoiseGate.OpenThreshold="Apri soglia (dB)"
NoiseGate.CloseThreshold="Chiudo soglia (dB)"
NoiseGate.AttackTime="Tempo d'inizio (millisecondi)"
NoiseGate.HoldTime="Tempo d'attesa (millisecondi)"
NoiseGate.ReleaseTime="Tempo di rilascio (millisecondi)"
Gain.GainDB="Incremento (dB)"
StretchImage="Stendi immagine (scarta proporzioni immagine)"
NoiseGate.OpenThreshold="Soglia di apertura (in dB)"
NoiseGate.CloseThreshold="Soglia di chiusura (in dB)"
NoiseGate.AttackTime="Tempo di attivazione (in millisecondi)"
NoiseGate.HoldTime="Tempo di attesa (in millisecondi)"
NoiseGate.ReleaseTime="Tempo di rilascio (in millisecondi)"
Gain.GainDB="Guadagno (in dB)"
StretchImage="Adatta l'immagine allo schermo (ignorando le proporzioni)"
Resolution="Risoluzione"
None="Nessuno"
Base.Canvas="Risoluzione di base (inquadratura)"
None="Nessuna"
ScaleFiltering="Scala di filtraggio"
ScaleFiltering.Point="Punto"
ScaleFiltering.Bilinear="Bilineare"
ScaleFiltering.Bicubic="Bicubico"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Livello di soppressione (dB)"
ScaleFiltering.Area="Zona"
NoiseSuppress.SuppressLevel="Livello di riduzione (in dB)"
Saturation="Saturazione"
HueShift="Cambio di tonalità"
Amount="Quantità"
Compressor="Compressore"
Compressor.Ratio="Rapporto (X:1)"
Compressor.Threshold="Soglia (dB)"
Compressor.AttackTime="Attacco (ms)"
Compressor.ReleaseTime="Rilascio (ms)"
Compressor.OutputGain="Guadagno di uscita (dB)"
Compressor.SidechainSource="Sidechain/Ducking Sorgente"
Compressor.Ratio="Rapporto/proporzioni (X:1)"
Compressor.Threshold="Soglia (in dB)"
Compressor.AttackTime="Attivazione (in ms)"
Compressor.ReleaseTime="Rilascio (in ms)"
Compressor.OutputGain="Guadagno in uscita (in dB)"
Compressor.SidechainSource="Fonte per sidechain/ducking"
Limiter="Limitatore"
Limiter.Threshold="Soglia (in dB)"
Limiter.ReleaseTime="Rilascio (in ms)"
Expander="Espansore"
Expander.Ratio="Rapporto/proporzioni (X:1)"
Expander.Threshold="Soglia (in dB)"
Expander.AttackTime="Attivazione (in ms)"
Expander.ReleaseTime="Rilascio (in ms)"
Expander.OutputGain="Guadagno in uscita (in dB)"
Expander.Detector="Tipo di rilevamento"
Expander.RMS="RMS"
Expander.Peak="Picco"
Expander.None="Nessuno"
Expander.Presets="Preset"
Expander.Presets.Expander="Espansore"
Expander.Presets.Gate="Sensibilità"
LumaKeyFilter="Chiave Luma"
Luma.LumaMax="Luma massima"
Luma.LumaMin="Luma minima"
Luma.LumaMaxSmooth="Sfumatura massima di Luma"
Luma.LumaMinSmooth="Sfumatura minima di Luma"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="レンダリング遅延"
UndistortCenter="超広角からスケーリングするときに画像の中心を歪めない"
NoiseGate="ノイズゲート"
NoiseSuppress="ノイズ抑制"
InvertPolarity="極性を反転する"
Gain="ゲイン"
DelayMs="遅延時間 (ミリ秒)"
Type="種別"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="解除時間 (ミリ秒)"
Gain.GainDB="ゲイン (dB)"
StretchImage="画像を拡大 (アスペクト比を破棄)"
Resolution="解像度"
Base.Canvas="基本 (キャンバス) 解像度"
None="なし"
ScaleFiltering="スケールフィルタ"
ScaleFiltering.Point="ポイント"
ScaleFiltering.Bilinear="バイリニア"
ScaleFiltering.Bicubic="バイキュービック"
ScaleFiltering.Lanczos="ランチョス"
ScaleFiltering.Area="エリア"
NoiseSuppress.SuppressLevel="抑制レベル (dB)"
Saturation="彩度"
HueShift="色相シフト"
@ -74,4 +77,25 @@ Compressor.AttackTime="アタックタイム (ms)"
Compressor.ReleaseTime="リリースタイム (ms)"
Compressor.OutputGain="出力ゲイン (dB)"
Compressor.SidechainSource="サイドチェーン/ダッキングソース"
Limiter="リミッター"
Limiter.Threshold="閾値 (dB)"
Limiter.ReleaseTime="リリースタイム (ms)"
Expander="エキスパンダー"
Expander.Ratio="比率 (X:1)"
Expander.Threshold="閾値 (dB)"
Expander.AttackTime="アタックタイム (ms)"
Expander.ReleaseTime="リリースタイム (ms)"
Expander.OutputGain="出力ゲイン (dB)"
Expander.Detector="検出"
Expander.RMS="RMS"
Expander.Peak="ピーク"
Expander.None="未設定"
Expander.Presets="プリセット"
Expander.Presets.Expander="エキスパンダー"
Expander.Presets.Gate="ゲート"
LumaKeyFilter="ルマキー"
Luma.LumaMax="最大輝度"
Luma.LumaMin="最小輝度"
Luma.LumaMaxSmooth="ルマ最大スムーズ"
Luma.LumaMinSmooth="ルマ最小スムーズ"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="დაყოვნება დამუშავებისა
UndistortCenter="ზეფართო სურათის შუაგულის გამრუდების არიდება, ზომების შეცვლისას"
NoiseGate="ხმაურის შეზღუდვა"
NoiseSuppress="ხმაურის დახშობა"
InvertPolarity="შებრუნებული პოლარობა"
Gain="სიგნალის გაძლიერება"
DelayMs="დაყოვნება (მილიწამი)"
Type="სახეობა"
@ -32,7 +33,7 @@ KeyColorType="საკვანძო ფერის სახე"
KeyColor="საკვანძო ფერი"
Similarity="მსგავსება (1-1000)"
Smoothness="სიგლუვე (1-1000)"
ColorSpillReduction="საკვანძო ფერთა გაბნევის შემცირება (1-1000)"
ColorSpillReduction="საკვანძო ფერის გაბნევის შემცირება (1-1000)"
Crop.Left="მარცხენა"
Crop.Right="მარჯვენა"
Crop.Top="ზედა"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="შემცირების (Release) ხანგრ
Gain.GainDB="გაძლიერება (dB)"
StretchImage="სურათის გაწელვა (გვერდების თანაფარდობის უგულებელყოფა)"
Resolution="გაფართოება"
Base.Canvas="ძირითადი (ფონის) გაფართოება"
None="არცერთი"
ScaleFiltering="მასშტაბირების ფილტრი"
ScaleFiltering.Point="წერტილოვანი"
ScaleFiltering.Bilinear="ორხაზოვანი"
ScaleFiltering.Bicubic="ბიკუბური"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="სივრცე"
NoiseSuppress.SuppressLevel="დახშობის ხარისხი (dB)"
Saturation="გაჯერებულობა"
HueShift="შეფერილობის შეცვლა"
@ -74,4 +77,25 @@ Compressor.AttackTime="მომატება (მწ)"
Compressor.ReleaseTime="შემცირება (მწ)"
Compressor.OutputGain="გამომავალი სიგნალის გაძლიერება (dB)"
Compressor.SidechainSource="Sidechain/ხმის დონის დადაბლების წყარო"
Limiter="შემზღუდველი"
Limiter.Threshold="ზღურბლი (dB)"
Limiter.ReleaseTime="შემცირება (მწ)"
Expander="გამშლელი"
Expander.Ratio="ფარდობა (X:1)"
Expander.Threshold="ზღურბლი (dB)"
Expander.AttackTime="მომატება (მწ)"
Expander.ReleaseTime="შემცირება (მწ)"
Expander.OutputGain="გამომავალი სიგნალის გაძლიერება (dB)"
Expander.Detector="დადგენა"
Expander.RMS="საშ. კვადრატული (RMS)"
Expander.Peak="ხანმოკლე"
Expander.None="არცერთი"
Expander.Presets="მზა პარამეტრები"
Expander.Presets.Expander="გამშლელი"
Expander.Presets.Gate="ჩამკეტი"
LumaKeyFilter="კაშკაშა არეების ჩანაცვლება (Luma Key)"
Luma.LumaMax="სიკაშკაშის ზედა ზღვარი"
Luma.LumaMin="სიკაშკაშის ქვედა ზღვარი"
Luma.LumaMaxSmooth="სიკაშკაშის ზედა ზღვრის სიგლუვე"
Luma.LumaMinSmooth="სიკაშკაშის ქვედა ზღვრის სიგლუვე"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="렌더링 지연"
UndistortCenter="울트라와이드에서 크기조정 시 이미지 중앙의 왜곡을 수정"
NoiseGate="노이즈 게이트"
NoiseSuppress="소음 억제"
InvertPolarity="극성 반전"
Gain="증폭"
DelayMs="지연 (밀리초)"
Type="형식"
@ -53,16 +54,18 @@ NoiseGate.OpenThreshold="개방 역치값 (dB)"
NoiseGate.CloseThreshold="폐쇄 역치값 (dB)"
NoiseGate.AttackTime="개방 준비 시간 (밀리세컨드)"
NoiseGate.HoldTime="개방 유지 시간 (밀리세컨드)"
NoiseGate.ReleaseTime="폐쇄 준비 시간 (밀리세컨드)"
NoiseGate.ReleaseTime="폐쇄 준비 시간 (밀리세컨드)"
Gain.GainDB="증폭 (dB)"
StretchImage="이미지 늘리기 (이미지 가로 세로 비율 포기)"
Resolution="해상도"
Base.Canvas="기본 (캔버스) 해상도"
None="없음"
ScaleFiltering="비율 필터링"
ScaleFiltering.Point="점"
ScaleFiltering.Bilinear="이중선형"
ScaleFiltering.Bicubic="쌍삼차"
ScaleFiltering.Lanczos="란초스"
ScaleFiltering.Area="영역"
NoiseSuppress.SuppressLevel="억제 세기 (dB)"
Saturation="채도"
HueShift="색조 변화"
@ -74,4 +77,25 @@ Compressor.AttackTime="신호 감지 후 반응까지 걸리는 시간 (ms)"
Compressor.ReleaseTime="신호 세기가 감퇴 이후 증폭이 회복하는 시간 (ms)"
Compressor.OutputGain="출력 증폭 (dB)"
Compressor.SidechainSource="사이드체인/더킹 소스"
Limiter="음성 제한"
Limiter.Threshold="임계값 (dB)"
Limiter.ReleaseTime="해제 (ms)"
Expander="확장기"
Expander.Ratio="비율 (X:1)"
Expander.Threshold="임계값 (dB)"
Expander.AttackTime="반응 시간 (ms)"
Expander.ReleaseTime="해제 (ms)"
Expander.OutputGain="출력 증폭 (dB)"
Expander.Detector="측정 감지"
Expander.RMS="RMS"
Expander.Peak="최고조"
Expander.None="없음"
Expander.Presets="사전 설정"
Expander.Presets.Expander="확장기"
Expander.Presets.Gate="게이트"
LumaKeyFilter="루마 키"
Luma.LumaMax="루마 최대값"
Luma.LumaMin="루마 최소값"
Luma.LumaMaxSmooth="루마 스무스 최대값"
Luma.LumaMinSmooth="루마 스무스 최소값"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Rendringsforsinkelse"
UndistortCenter="Fjern forstyrring av bildets midtområde, når det skaleres ned fra ultrabredhet"
NoiseGate="Støyterskel"
NoiseSuppress="Lyddemping"
InvertPolarity="Inverter polaritet"
Gain="Forsterkning"
DelayMs="Forsinkelse (millisekunder)"
Type="Type"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Løslatelsestid (millisekunder)"
Gain.GainDB="Forsterkning (dB)"
StretchImage="Strekk bilde (ignorer bildets sideforhold)"
Resolution="Oppløsning"
Base.Canvas="Grunnoppløsning (lerret)"
None="Ingen"
ScaleFiltering="Skala Filtrering"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilineær"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Område"
NoiseSuppress.SuppressLevel="Dempelse Nivå (dB)"
Saturation="Metning"
HueShift="Fargetone Skifte"
@ -74,4 +77,25 @@ Compressor.AttackTime="Angrep (ms)"
Compressor.ReleaseTime="Slipp (ms)"
Compressor.OutputGain="Utdataforsterkning (dB)"
Compressor.SidechainSource="Lydduppe-kilde"
Limiter="Begrenser"
Limiter.Threshold="Terskel (dB)"
Limiter.ReleaseTime="Slipp (ms)"
Expander="Utvider"
Expander.Ratio="Forhold (X:1)"
Expander.Threshold="Terskel (dB)"
Expander.AttackTime="Responstid (ms)"
Expander.ReleaseTime="Slipp (ms)"
Expander.OutputGain="Utdataforsterkning (dB)"
Expander.Detector="Identifisering"
Expander.RMS="RMS"
Expander.Peak="Topp"
Expander.None="Ingen"
Expander.Presets="Forhåndsinnstillinger"
Expander.Presets.Expander="Utvider"
Expander.Presets.Gate="Port"
LumaKeyFilter="Luma Key"
Luma.LumaMax="Luma maks."
Luma.LumaMin="Luma min."
Luma.LumaMaxSmooth="Luma maks. glidende"
Luma.LumaMinSmooth="Luma min. glidende"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Rendervertraging"
UndistortCenter="Verbeter beeldverhouding in het midden van bij schalen vanaf ultrawide"
NoiseGate="Noise Gate"
NoiseSuppress="Ruisonderdrukking"
InvertPolarity="Polariteit omkeren"
Gain="Gain"
DelayMs="Vertraging (milliseconden)"
Type="Type"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Release-tijd (milliseconden)"
Gain.GainDB="Gain (dB)"
StretchImage="Afbeelding uitrekken (negeer beeldverhouding van de afbeelding)"
Resolution="Resolutie"
Base.Canvas="Basisresolutie (Canvas)"
None="Geen"
ScaleFiltering="Schaal-filter"
ScaleFiltering.Point="Point"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Gebied"
NoiseSuppress.SuppressLevel="Onderdrukkingsniveau (dB)"
Saturation="Verzadiging"
HueShift="Tintverschuiving"
@ -74,4 +77,20 @@ Compressor.AttackTime="Attack (ms)"
Compressor.ReleaseTime="Release (ms)"
Compressor.OutputGain="Uitvoergain (dB)"
Compressor.SidechainSource="Sidechain/Ducking Bron"
Limiter="Begrenzer"
Limiter.Threshold="Drempel (dB)"
Limiter.ReleaseTime="Vrijgave (ms)"
Expander="Uitbreiding"
Expander.Ratio="Verhouding (X:1)"
Expander.Threshold="Drempel (dB)"
Expander.AttackTime="Aanval (ms)"
Expander.ReleaseTime="Vrijgave (ms)"
Expander.OutputGain="Uitvoer versterking (dB)"
Expander.Detector="Detectie"
Expander.RMS="RMS"
Expander.Peak="Piek"
Expander.None="Geen"
Expander.Presets="Vooraf ingestelde instellingen"
Expander.Presets.Expander="Uitbreiding"
Expander.Presets.Gate="Hek"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Opóźnienie renderowania"
UndistortCenter="Usuń przekłamania przy skalowaniu źródeł o dużej szerokości"
NoiseGate="Bramka szumów"
NoiseSuppress="Tłumienie hałasu"
InvertPolarity="Odwrócenie polaryzacji"
Gain="Poziom"
DelayMs="Opóźnienie (milisekundy)"
Type="Typ"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Czas zwolnienia (milisekundy)"
Gain.GainDB="Poziom (dB)"
StretchImage="Rozciągnięcie obrazu (ignoruj proporcje)"
Resolution="Rozdzielczość"
Base.Canvas="Rozdzielczość bazowa (obraz)"
None="Brak"
ScaleFiltering="Filtrowanie"
ScaleFiltering.Point="Punktowe"
ScaleFiltering.Bilinear="Dwuliniowe"
ScaleFiltering.Bicubic="Dwusześcienne"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Obszar"
NoiseSuppress.SuppressLevel="Poziom tłumienia (dB)"
Saturation="Nasycenie"
HueShift="Przesunięcie barwy"
@ -74,4 +77,25 @@ Compressor.AttackTime="Atak (ms)"
Compressor.ReleaseTime="Odpuszczenie (ms)"
Compressor.OutputGain="Zysk na wyjściu (dB)"
Compressor.SidechainSource="Źródło poboczne"
Limiter="Limiter"
Limiter.Threshold="Próg odcięcia (dB)"
Limiter.ReleaseTime="Czas reakcji (ms)"
Expander="Expander"
Expander.Ratio="Stosunek (X:1)"
Expander.Threshold="Próg (dB)"
Expander.AttackTime="Aktywacja (ms)"
Expander.ReleaseTime="Odpuszczenie (ms)"
Expander.OutputGain="Zysk na wyjściu (dB)"
Expander.Detector="Wykrywanie"
Expander.RMS="RMS"
Expander.Peak="Punkt szczytowy"
Expander.None="Brak"
Expander.Presets="Predefiniowane"
Expander.Presets.Expander="Expander"
Expander.Presets.Gate="Brama"
LumaKeyFilter="Kluczowanie luma key"
Luma.LumaMax="Luma Max"
Luma.LumaMin="Luma Min"
Luma.LumaMaxSmooth="Luma wygładzanie max"
Luma.LumaMinSmooth="Luma wygładzanie min"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Atraso de Renderização"
UndistortCenter="Remover distorção do centro da imagem ao redimensionar de ultralargo"
NoiseGate="Filtro de Rúido"
NoiseSuppress="Redução de ruídos"
InvertPolarity="Inverter Polaridade"
Gain="Ganho"
DelayMs="Atraso (milissegundos)"
Type="Tipo"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Tempo de liberação (milissegundos)"
Gain.GainDB="Ganho (dB)"
StretchImage="Esticar a Imagem (descartar aspecto da imagem)"
Resolution="Resolução"
Base.Canvas="Resolução Base (Tela)"
None="Nenhum"
ScaleFiltering="Filtragem de escala"
ScaleFiltering.Point="Ponto"
ScaleFiltering.Bilinear="Bilinear"
ScaleFiltering.Bicubic="Bicúbico"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Área"
NoiseSuppress.SuppressLevel="Nível de redução (dB)"
Saturation="Saturação"
HueShift="Alteração de matiz"
@ -74,4 +77,25 @@ Compressor.AttackTime="Ataque (ms)"
Compressor.ReleaseTime="Liberação (ms)"
Compressor.OutputGain="Ganho na saída (dB)"
Compressor.SidechainSource="Fonte de Cadeia Lateral/Oscilação de Áudio"
Limiter="Limitador"
Limiter.Threshold="Limiar (dB)"
Limiter.ReleaseTime="Liberação (ms)"
Expander="Expansor"
Expander.Ratio="Razão (X:1)"
Expander.Threshold="Limiar (dB)"
Expander.AttackTime="Ataque (ms)"
Expander.ReleaseTime="Liberação (ms)"
Expander.OutputGain="Ganho na Saída (dB)"
Expander.Detector="Detecção"
Expander.RMS="RMS"
Expander.Peak="Pico"
Expander.None="Nenhuma"
Expander.Presets="Predefinições"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Portão"
LumaKeyFilter="Luma Key"
Luma.LumaMax="Luminância Máxima"
Luma.LumaMin="Luminância Mínima"
Luma.LumaMaxSmooth="Suavização da Luminância Máxima"
Luma.LumaMinSmooth="Suavização da Luminância Mínima"

View file

@ -1,4 +1,5 @@
ColorFilter="Correção de cor"
ColorGradeFilter="Aplicar LUT"
MaskFilter="Máscara/mistura de imagem"
AsyncDelayFilter="Atraso de vídeo (Async)"
ScrollFilter="Percorre"
@ -6,6 +7,7 @@ ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Color Key"
SharpnessFilter="Nitidez"
NoiseGate="Filtro de ruído"
InvertPolarity="Inverter Polaridade"
Gain="Ganho"
DelayMs="Atraso (milissegundos)"
Type="Topo"
@ -50,4 +52,32 @@ NoiseGate.HoldTime="Tempo de bloqueio (milissegundos)"
NoiseGate.ReleaseTime="Tempo de libertação (milissegundos)"
Gain.GainDB="Ganho (dB)"
StretchImage="Esticar a imagem (relação de aspeto de imagem de descarte)"
Resolution="Resolução"
None="Nenhum"
NoiseSuppress.SuppressLevel="Nível de Supressão (dB)"
Saturation="Saturação"
Amount="Montante"
Compressor="Compressor"
Compressor.Ratio="Relação (X:1)"
Compressor.Threshold="Limiar (dB)"
Compressor.AttackTime="Ataque (ms)"
Compressor.ReleaseTime="Liberação (ms)"
Compressor.OutputGain="Ganho de saída (dB)"
Compressor.SidechainSource="Sidechain/Ducking Source"
Limiter="Limitador"
Limiter.Threshold="Limiar (dB)"
Limiter.ReleaseTime="Release (ms)"
Expander="Expansor"
Expander.Ratio="Relação (X:1)"
Expander.Threshold="Limiar (dB)"
Expander.AttackTime="Ataque (ms)"
Expander.ReleaseTime="Liberação (ms)"
Expander.OutputGain="Ganho de saída (dB)"
Expander.Detector="Deteção"
Expander.RMS="RMS"
Expander.Peak="Pico"
Expander.None="Nenhum"
Expander.Presets="Predefinições"
Expander.Presets.Expander="Expansor"
Expander.Presets.Gate="Portão"

View file

@ -7,6 +7,7 @@ ColorKeyFilter="Culoare cheie"
SharpnessFilter="Accentuare"
ScaleFilter="Scalare/Rație Aspect"
NoiseGate="Poartă de zgomot"
InvertPolarity="Inversează polaritatea"
Gain="Amplificare"
DelayMs="Întârziere (milisecunde)"
Type="Tip"
@ -26,7 +27,7 @@ BrowsePath.AllFiles="Toate fișierele"
KeyColorType="Tipul culorii cheie"
KeyColor="Culoare cheie"
Similarity="Similaritate (1-100)"
Smoothness="Netezire (1-1000)"
Smoothness="Netezime (1-1000)"
ColorSpillReduction="Reducere pentru devărsarea culorii cheie (1-1000)"
Crop.Left="Stânga"
Crop.Right="Dreapta"
@ -52,9 +53,28 @@ NoiseGate.ReleaseTime="Timp de eliberare (milisecunde)"
Gain.GainDB="Amplificare (dB)"
StretchImage="Întinde imaginea (renunță la raportul de aspect al imaginii)"
Resolution="Rezoluție"
Base.Canvas="Rezoluție (planșă) de bază"
None="Fără"
ScaleFiltering.Bilinear="Biliniar"
ScaleFiltering.Bicubic="Bicubic"
ScaleFiltering.Lanczos="Lanczos"
Saturation="Saturație"
Compressor="Compresor"
Compressor.Ratio="Raport (X:1)"
Compressor.Threshold="Prag (dB)"
Compressor.AttackTime="Atacare (ms)"
Compressor.ReleaseTime="Eliberare (ms)"
Compressor.OutputGain="Amplificare pentru ieșire (dB)"
Limiter="Limitor"
Limiter.Threshold="Prag (dB)"
Limiter.ReleaseTime="Eliberare (ms)"
Expander.Ratio="Raport (X:1)"
Expander.Threshold="Prag (dB)"
Expander.OutputGain="Amplificare pentru ieșire (dB)"
Expander.Detector="Detectare"
Expander.RMS="RMS"
Expander.Peak="Valoare de vârf"
Expander.None="Niciuna"
Expander.Presets="Presetări"
Expander.Presets.Expander="Expandor"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Задержка отображения"
UndistortCenter="Не искривлять центр изображения при масштабировании Ultrawide разрешения"
NoiseGate="Пропускной уровень шума"
NoiseSuppress="Шумоподавление"
InvertPolarity="Инвертировать полярность"
Gain="Усиление"
DelayMs="Задержка (миллисекунд)"
Type="Тип"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Длительность затухания (миллис
Gain.GainDB="Усиление (дБ)"
StretchImage="Растянуть изображение (игнорировать пропорции изображения)"
Resolution="Разрешение"
Base.Canvas="Базовое (основное) разрешение"
None="Нет"
ScaleFiltering="Фильтр масштабирования"
ScaleFiltering.Point="Точечный"
ScaleFiltering.Bilinear="Билинейный"
ScaleFiltering.Bicubic="Бикубический"
ScaleFiltering.Lanczos="Метод Ланцоша"
ScaleFiltering.Area="Область"
NoiseSuppress.SuppressLevel="Уровень подавления (дБ)"
Saturation="Насыщенность"
HueShift="Сдвиг оттенка"
@ -74,4 +77,25 @@ Compressor.AttackTime="Атака (мс)"
Compressor.ReleaseTime="Спад (мс)"
Compressor.OutputGain="Выходное усиление (дБ)"
Compressor.SidechainSource="Источник приглушения/сайдчейн-компрессии"
Limiter="Лимитер"
Limiter.Threshold="Порог срабатывания (дБ)"
Limiter.ReleaseTime="Восстановление (мс)"
Expander="Экспандер"
Expander.Ratio="Соотношение (X:1)"
Expander.Threshold="Порог срабатывания (дБ)"
Expander.AttackTime="Атака (мс)"
Expander.ReleaseTime="Восстановление (мс)"
Expander.OutputGain="Выходное усиление (дБ)"
Expander.Detector="Обнаружение"
Expander.RMS="RMS"
Expander.Peak="Пик"
Expander.None="Нет"
Expander.Presets="Предустановки"
Expander.Presets.Expander="Экспандер"
Expander.Presets.Gate="Гейт"
LumaKeyFilter="Яркостный ключ"
Luma.LumaMax="Макс. яркость"
Luma.LumaMin="Мин. яркость"
Luma.LumaMaxSmooth="Сглаживание макс. яркости"
Luma.LumaMinSmooth="Сглаживание мин. яркости"

View file

@ -1,15 +1,26 @@
ColorFilter="Korekcia farieb"
ColorGradeFilter="Použiť LUT"
MaskFilter="Maska/miešanie obrazu"
AsyncDelayFilter="Oneskorenie videa (Async)"
CropFilter="Orezať/odsadiť"
ScrollFilter="Rolovanie"
ChromaKeyFilter="Chroma Key"
ColorKeyFilter="Farebný kľúč"
SharpnessFilter="Zaostriť"
ScaleFilter="Škálovanie/pomer strán"
GPUDelayFilter="Oneskorenie vykresľovania"
UndistortCenter="Odstrániť skreslenie pri škálovaní zo širokouhlého obrazu"
NoiseGate="Hluková brána"
NoiseSuppress="Potlačenie šumu"
InvertPolarity="Invertovať polaritu"
Gain="Zosilnenie"
DelayMs="Oneskorenie (v milisekundách)"
Type="Typ"
MaskBlendType.MaskColor="Maska priehľadnosti (kanál farieb)"
MaskBlendType.MaskAlpha="Maska priehľadnosti (kanál priehľadnosti)"
MaskBlendType.BlendMultiply="Zmiešať (násobenie)"
MaskBlendType.BlendAddition="Zmiešať (sčítanie)"
MaskBlendType.BlendSubtraction="Zmiešať (odčítanie)"
Path="Cesta"
Color="Farba"
Opacity="Priehľadnosť"
@ -21,6 +32,8 @@ BrowsePath.AllFiles="Všetky súbory"
KeyColorType="Typ kľúčovej farby"
KeyColor="Kľúčová farba"
Similarity="Podobnosť (1-1000)"
Smoothness="Hladkosť (1-1000)"
ColorSpillReduction="Redukcia color spill-u (1-1000)"
Crop.Left="Vľavo"
Crop.Right="Vpravo"
Crop.Top="Hore"
@ -28,6 +41,8 @@ Crop.Bottom="Dole"
Crop.Width="Šírka"
Crop.Height="Výška"
Crop.Relative="Relatívne"
ScrollFilter.SpeedX="Horizontálna rýchlosť"
ScrollFilter.SpeedY="Vertikálna rýchlosť"
ScrollFilter.LimitWidth="Obmedziť šírku"
ScrollFilter.LimitHeight="Obmedziť výšku"
CustomColor="Vlastná farba"
@ -37,16 +52,27 @@ Blue="Modrá"
Magenta="Purpurová"
NoiseGate.OpenThreshold="Hladina otvorenia (dB)"
NoiseGate.CloseThreshold="Hladina zatvorenia (dB)"
NoiseGate.AttackTime="Čas nástupu (milisekundy)"
NoiseGate.HoldTime="Čas podržania (milisekundy)"
NoiseGate.ReleaseTime="Čas uvoľnenia (milisekundy)"
Gain.GainDB="Zisk (dB)"
StretchImage="Roztiahnutie obrázka (pomer strán obrazu zahodiť)"
Resolution="Rozlíšenie"
Base.Canvas="Základné (Plátnové) rozlíšenie"
None="Žiadne"
ScaleFiltering="Filtrovanie rozsahu"
ScaleFiltering.Point="Bodové"
ScaleFiltering.Bilinear="Bilineárne"
ScaleFiltering.Bicubic="Bikubické"
ScaleFiltering.Lanczos="Lanczos"
NoiseSuppress.SuppressLevel="Úroveň potlačenia (dB)"
Saturation="Sýtosť"
HueShift="Posun odtieňa"
Amount="Množstvo"
Compressor="Kompresor"
Compressor.Ratio="Pomer (X:1)"
Compressor.Threshold="Prah (dB)"
Compressor.AttackTime="Nástup (ms)"
Compressor.ReleaseTime="Uvoľnenie (ms)"
Compressor.OutputGain="Zosilnenie výstupu (dB)"

View file

@ -1,16 +1,20 @@
ColorFilter="Promena boja"
ColorGradeFilter="Primeni LUT"
MaskFilter="Slika maske i stapanja"
AsyncDelayFilter="Video pauza (asinhrono)"
AsyncDelayFilter="Video kašnjenje (asinhrono)"
CropFilter="Odsecanje/okvir"
ScrollFilter="Pomeranje"
ChromaKeyFilter="Ključ providnosti"
ColorKeyFilter="Ključ boje"
SharpnessFilter="Izoštravanje"
ScaleFilter="Uvećanje/Odnos"
GPUDelayFilter="Kašnjenje u radu"
UndistortCenter="Ukloni distorziju centra slike tokom skaliranja sa ultra široke slike na normalnu"
NoiseGate="Kapija šuma"
NoiseSuppress="Suzbijanje šuma"
InvertPolarity="Invertuj polaritet"
Gain="Pojačanje"
DelayMs="Pauza (milisekunde)"
DelayMs="Kašnjenje (milisekunde)"
Type="Vrsta"
MaskBlendType.MaskColor="Maska prozirnosti (kanal boje)"
MaskBlendType.MaskAlpha="Maska prozirnosti (prozirni kanal)"
@ -54,6 +58,7 @@ NoiseGate.ReleaseTime="Vreme otpuštanja (milisekunde)"
Gain.GainDB="Pojačanje (dB)"
StretchImage="Istegni sliku (zanemari odnos visine i širine slike)"
Resolution="Rezolucija"
Base.Canvas="Osnovna rezolucija"
None="Nijedno"
ScaleFiltering="Filter uvećanja"
ScaleFiltering.Point="Tačka"
@ -61,4 +66,30 @@ ScaleFiltering.Bilinear="Bilinearno"
ScaleFiltering.Bicubic="Bikubično"
ScaleFiltering.Lanczos="Lankoz"
NoiseSuppress.SuppressLevel="Nivo suzbijanja (dB)"
Saturation="Zasićenje"
HueShift="Promena nijanse"
Amount="Količina"
Compressor="Kompresor"
Compressor.Ratio="Razmera (X:1)"
Compressor.Threshold="Prag (dB)"
Compressor.AttackTime="Napad (ms)"
Compressor.ReleaseTime="Vreme otpuštanja (ms)"
Compressor.OutputGain="Pojačanje izlaza (dB)"
Compressor.SidechainSource="Sidechain/Ducking Izvor"
Limiter="Limiter"
Limiter.Threshold="Prag (dB)"
Limiter.ReleaseTime="Vreme otpuštanja (ms)"
Expander="Ekspander"
Expander.Ratio="Razmera (X:1)"
Expander.Threshold="Prag (dB)"
Expander.AttackTime="Napad (ms)"
Expander.ReleaseTime="Vreme otpuštanja (ms)"
Expander.OutputGain="Pojačanje izlaza (dB)"
Expander.Detector="Detekcija"
Expander.RMS="RMS"
Expander.Peak="Vrhunac (ekspander reaguje na kratke vrhunce)"
Expander.None="Bez"
Expander.Presets="Predefinisana podešavanja"
Expander.Presets.Expander="Ekspander"
Expander.Presets.Gate="Prolaz (eng. Gate)"

View file

@ -1,16 +1,20 @@
ColorFilter="Промена боја"
ColorGradeFilter="Примени LUT"
MaskFilter="Слика маске и стапања"
AsyncDelayFilter="Видео пауза (асинхроно)"
AsyncDelayFilter="Видео кашњење (асинхроно)"
CropFilter="Одсецање/оквир"
ScrollFilter="Померање"
ChromaKeyFilter="Кључ провидности"
ColorKeyFilter="Кључ боје"
SharpnessFilter="Изоштравање"
ScaleFilter="Увећање/однос"
GPUDelayFilter="Кашњење у раду"
UndistortCenter="Уклони дисторзију центра слике током скалирања са ултра широке слике на нормалну"
NoiseGate="Капија шума"
NoiseSuppress="Сузбијање шума"
InvertPolarity="Инвертуј поларитет"
Gain="Појачање"
DelayMs="Пауза (милисекунде)"
DelayMs="Кашњење (милисекунде)"
Type="Врста"
MaskBlendType.MaskColor="Маска прозирности (канал боје)"
MaskBlendType.MaskAlpha="Маска прозирности (прозирни канал)"
@ -54,6 +58,7 @@ NoiseGate.ReleaseTime="Време отпуштања (милисекунде)"
Gain.GainDB="Појачање (dB)"
StretchImage="Истегни слику (занемари однос висине и ширине слике)"
Resolution="Резолуција"
Base.Canvas="Основна резолуција"
None="Ниједно"
ScaleFiltering="Филтер увећања"
ScaleFiltering.Point="Тачка"
@ -61,4 +66,30 @@ ScaleFiltering.Bilinear="Билинеарно"
ScaleFiltering.Bicubic="Бикубично"
ScaleFiltering.Lanczos="Ланкоз"
NoiseSuppress.SuppressLevel="Ниво сузбијања (dB)"
Saturation="Засићење"
HueShift="Промена нијансе"
Amount="Количина"
Compressor="Компресор"
Compressor.Ratio="Размера (X:1)"
Compressor.Threshold="Праг (dB)"
Compressor.AttackTime="Напад (ms)"
Compressor.ReleaseTime="Време отпуштања (ms)"
Compressor.OutputGain="Појачање излаза (dB)"
Compressor.SidechainSource="Sidechain/Ducking Извор"
Limiter="Лимитер"
Limiter.Threshold="Праг (dB)"
Limiter.ReleaseTime="Време отпуштања (ms)"
Expander="Експандер"
Expander.Ratio="Размера (X:1)"
Expander.Threshold="Праг (dB)"
Expander.AttackTime="Напад (ms)"
Expander.ReleaseTime="Време отпуштања (ms)"
Expander.OutputGain="Појачање излаза (dB)"
Expander.Detector="Детекција"
Expander.RMS="RMS"
Expander.Peak="Врхунац (експандер реагује на кратке врхунце)"
Expander.None="Без"
Expander.Presets="Предефинисана подешавања"
Expander.Presets.Expander="Експандер"
Expander.Presets.Gate="Пролаз (енг. Gate)"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Renderingsfördröjning"
UndistortCenter="Återställ bildens centrum vid skalning från ultrawide"
NoiseGate="Brusblockering"
NoiseSuppress="Brusreducering"
InvertPolarity="Invertera polaritet"
Gain="Förstärkning"
DelayMs="Fördröjning (millisekunder)"
Type="Typ"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Släpptid (millisekunder)"
Gain.GainDB="Förstärkning (dB)"
StretchImage="Sträck bild (ignorera bildförhållandet)"
Resolution="Upplösning"
Base.Canvas="Grundupplösning (kanvas)"
None="Ingen"
ScaleFiltering="Skalningsfiltrering"
ScaleFiltering.Point="Punkt"
ScaleFiltering.Bilinear="Bilinjär"
ScaleFiltering.Bicubic="Bikubisk"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="Område"
NoiseSuppress.SuppressLevel="Brusreduceringsnivå (dB)"
Saturation="Mättnad"
HueShift="Nyansväxling"
@ -74,4 +77,25 @@ Compressor.AttackTime="Attack (ms)"
Compressor.ReleaseTime="Frigör (ms)"
Compressor.OutputGain="Utmatningsförstärkning (dB)"
Compressor.SidechainSource="Sidechain/Ducking-källa"
Limiter="Begränsare"
Limiter.Threshold="Tröskel (dB)"
Limiter.ReleaseTime="Frigör (ms)"
Expander="Utvidgare"
Expander.Ratio="Förhållande (X:1)"
Expander.Threshold="Tröskel (dB)"
Expander.AttackTime="Attack (ms)"
Expander.ReleaseTime="Frigör (ms)"
Expander.OutputGain="Utmatningsförstärkning (dB)"
Expander.Detector="Identifiering"
Expander.RMS="RMS"
Expander.Peak="Maxpunkt"
Expander.None="Ingen"
Expander.Presets="Förinställningar"
Expander.Presets.Expander="Utvidgare"
Expander.Presets.Gate="Port"
LumaKeyFilter="Ljusstyrkefilter"
Luma.LumaMax="Maximal ljusstyrka"
Luma.LumaMin="Minimal ljusstyrka"
Luma.LumaMaxSmooth="Max. utjämning av ljusstyrka"
Luma.LumaMinSmooth="Min. utjämning av ljusstyrka"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="İşleyici Gecikmesi"
UndistortCenter="Ultra genişten boyutlandırırken görüntü merkezindeki bozulmayı düzelt"
NoiseGate="Gürültü Filtresi"
NoiseSuppress="Gürültü Bastırma"
InvertPolarity="Polariteyi ters çevir"
Gain="Kazanç"
DelayMs="Gecikme (milisaniye)"
Type="Türü"
@ -57,6 +58,7 @@ NoiseGate.ReleaseTime="Bırakma Süresi (milisaniye)"
Gain.GainDB="Kazanç (dB)"
StretchImage="Görüntüyü Uzat (görüntü en-boy oranını görmezden gel)"
Resolution="Çözünürlük"
Base.Canvas="Temel (Tuval) Çözünürlüğü"
None="Hiçbiri"
ScaleFiltering="Ölçek Filtreleme"
ScaleFiltering.Point="Nokta"
@ -74,4 +76,18 @@ Compressor.AttackTime="Atak (ms)"
Compressor.ReleaseTime="Bırakma (ms)"
Compressor.OutputGain=ıkış Kazancı (dB)"
Compressor.SidechainSource="Yan-Zincir/Alçaltma Kaynağı"
Limiter="Sınırlayıcı"
Limiter.Threshold="Eşik (dB)"
Limiter.ReleaseTime="Bırakma süresi (ms)"
Expander="Genişletici"
Expander.Ratio="Oran (X:1)"
Expander.Threshold="Eşik (dB)"
Expander.AttackTime="Tepki Süresi (ms)"
Expander.ReleaseTime="Bırakma Süresi (ms)"
Expander.OutputGain=ıkış Kazancı (dB)"
Expander.Detector="Algılama"
Expander.None="Hiçbiri"
Expander.Presets="Hazır Ayarlar"
Expander.Presets.Expander="Genişletici"
Expander.Presets.Gate="Geçit"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="Затримка візуалізації"
UndistortCenter="Зменшити викривлення у центрі, якщо масштабувати з надширокоформатного"
NoiseGate="Пороговий шумопонижувач"
NoiseSuppress="Подавлення шуму"
InvertPolarity="Інверсія сигналу"
Gain="Підсилення"
DelayMs="Затримка (мілісекунд)"
Type="Тип"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="Тривалість спаду сигналу (мілі
Gain.GainDB="Підсилення (дБ)"
StretchImage="Розтягнути зображення (ігнорувати пропорції зображення)"
Resolution="Новий розмір"
Base.Canvas="Роздільна здатність (Полотно)"
None="Не вказано"
ScaleFiltering="Фільтр масштабування"
ScaleFiltering.Point="Ступінчастий"
ScaleFiltering.Bilinear="Білінійний"
ScaleFiltering.Bicubic="Бікубічний"
ScaleFiltering.Lanczos="Ланцош"
ScaleFiltering.Area="Усереднення площ"
NoiseSuppress.SuppressLevel="Рівень подавлення (дБ)"
Saturation="Насиченість"
HueShift="Відтінок"
@ -74,4 +77,25 @@ Compressor.AttackTime="Атака (мс)"
Compressor.ReleaseTime="Затухання (мс)"
Compressor.OutputGain="Підсилення виводу (dB)"
Compressor.SidechainSource="Джерело Коригування/Приглушення"
Limiter="Обмежувач амплітуди"
Limiter.Threshold="Поріг (дБ)"
Limiter.ReleaseTime="Затухання (мс)"
Expander="Експандер"
Expander.Ratio="Відношення (X:1)"
Expander.Threshold="Поріг (дБ)"
Expander.AttackTime="Атака (мс)"
Expander.ReleaseTime="Затухання (мс)"
Expander.OutputGain="Підсилення виводу (dB)"
Expander.Detector="Детектор"
Expander.RMS="Середньоквадратичний (RMS)"
Expander.Peak="Піковий"
Expander.None="Немає (миттєві значення)"
Expander.Presets="Шаблони"
Expander.Presets.Expander="Експандер"
Expander.Presets.Gate="Пороговий"
LumaKeyFilter="Фільтр яскравості"
Luma.LumaMax="Максимум яскравості"
Luma.LumaMin="Мінімум яскравості"
Luma.LumaMaxSmooth="Максимум яскравості припуск"
Luma.LumaMinSmooth="Мінімум яскравості припуск"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="渲染延迟"
UndistortCenter="当从超宽扩展时, 让图片中心不失真"
NoiseGate="噪音阈值"
NoiseSuppress="噪声抑制"
InvertPolarity="反转极性"
Gain="增益"
DelayMs="延迟(毫秒)"
Type="类型"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="释放时间(毫秒)"
Gain.GainDB="增益 (dB)"
StretchImage="伸展图像 (丢弃图像纵横比)"
Resolution="分辨率"
Base.Canvas="基础 (Canvas) 分辨率"
None="无"
ScaleFiltering="尺度滤波"
ScaleFiltering.Point="点"
ScaleFiltering.Bilinear="双线性算法"
ScaleFiltering.Bicubic="双立方算法"
ScaleFiltering.Lanczos="兰索斯算法"
ScaleFiltering.Area="区域"
NoiseSuppress.SuppressLevel="抑制程度 (dB)"
Saturation="饱和度"
HueShift="色调偏移"
@ -70,8 +73,29 @@ Amount="数值"
Compressor="压缩器"
Compressor.Ratio="比率 (X:1)"
Compressor.Threshold="阈值 (dB)"
Compressor.AttackTime="攻击 (ms)"
Compressor.AttackTime="起始时间(毫秒)"
Compressor.ReleaseTime="释放 (ms)"
Compressor.OutputGain="输出增益 (dB)"
Compressor.SidechainSource="避免来源"
Limiter="限幅"
Limiter.Threshold="阈值 (dB)"
Limiter.ReleaseTime="释放 (ms)"
Expander="扩展效果"
Expander.Ratio="比率 (X:1)"
Expander.Threshold="阈值 (dB)"
Expander.AttackTime="起始时间(毫秒)"
Expander.ReleaseTime="释放时间(毫秒)"
Expander.OutputGain="输出增益 (dB)"
Expander.Detector="检测"
Expander.RMS="均方根"
Expander.Peak="峰值"
Expander.None="无"
Expander.Presets="预设"
Expander.Presets.Expander="扩展效果"
Expander.Presets.Gate="门限"
LumaKeyFilter="亮度键"
Luma.LumaMax="最大亮度"
Luma.LumaMin="最小亮度"
Luma.LumaMaxSmooth="最大亮度平滑"
Luma.LumaMinSmooth="最小亮度平滑"

View file

@ -12,6 +12,7 @@ GPUDelayFilter="繪製延遲"
UndistortCenter="從超寬影像縮放時彌補影像中心的畸變"
NoiseGate="噪音閾"
NoiseSuppress="雜訊抑制"
InvertPolarity="反轉極性"
Gain="增益"
DelayMs="延遲 (毫秒)"
Type="類型"
@ -57,12 +58,14 @@ NoiseGate.ReleaseTime="釋音時間 (Release time)(毫秒)"
Gain.GainDB="增益 (dB)"
StretchImage="伸展圖像 (無視圖像比例)"
Resolution="解析度"
Base.Canvas="來源(畫布)解析度"
None="無"
ScaleFiltering="縮放濾鏡"
ScaleFiltering.Point="點"
ScaleFiltering.Bilinear="雙線性插值"
ScaleFiltering.Bicubic="雙三次插值"
ScaleFiltering.Lanczos="Lanczos"
ScaleFiltering.Area="範圍"
NoiseSuppress.SuppressLevel="抑制標準 (dB)"
Saturation="飽合度"
HueShift="色調偏移"
@ -74,4 +77,25 @@ Compressor.AttackTime="起始時間 (ms)"
Compressor.ReleaseTime="釋放時間 (ms)"
Compressor.OutputGain="輸出增益 (dB)"
Compressor.SidechainSource="側鏈/回避源"
Limiter="限制器"
Limiter.Threshold="臨界值 (dB)"
Limiter.ReleaseTime="釋放時間 (ms)"
Expander="展開特效"
Expander.Ratio="比例 (X:1)"
Expander.Threshold="閾值 (dB)"
Expander.AttackTime="起始時間 (ms)"
Expander.ReleaseTime="釋放時間 (ms)"
Expander.OutputGain="輸出增益 (dB)"
Expander.Detector="偵測"
Expander.RMS="方均根"
Expander.Peak="峰值"
Expander.None="無"
Expander.Presets="預先設定"
Expander.Presets.Expander="展開特效"
Expander.Presets.Gate="開門特效"
LumaKeyFilter="亮度鍵"
Luma.LumaMax="亮度最大值"
Luma.LumaMin="亮度最小值"
Luma.LumaMaxSmooth="亮度最大平滑度"
Luma.LumaMinSmooth="亮度最小平滑度"

View file

@ -0,0 +1,51 @@
uniform float4x4 ViewProj;
uniform texture2d image;
uniform float lumaMax;
uniform float lumaMin;
uniform float lumaMaxSmooth;
uniform float lumaMinSmooth;
sampler_state textureSampler {
Filter = Linear;
AddressU = Clamp;
AddressV = Clamp;
};
struct VertData {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
VertData VSDefault(VertData v_in)
{
VertData vert_out;
vert_out.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj);
vert_out.uv = v_in.uv;
return vert_out;
}
float4 PSALumaKeyRGBA(VertData v_in) : TARGET
{
float4 rgba = image.Sample(textureSampler, v_in.uv);
float4 lumaCoef = float4(0.2989, 0.5870, 0.1140, 0.0);
float luminance = dot(rgba, lumaCoef);
float clo = smoothstep(lumaMin, lumaMin + lumaMinSmooth, luminance);
float chi = 1. - smoothstep(lumaMax - lumaMaxSmooth, lumaMax, luminance);
float amask = clo * chi;
return float4(rgba.rgb, amask);
}
technique Draw
{
pass
{
vertex_shader = VSDefault(v_in);
pixel_shader = PSALumaKeyRGBA(v_in);
}
}

View file

@ -5,7 +5,6 @@ uniform float4x4 ViewProj;
uniform texture2d image;
uniform texture2d target;
uniform float4 color = {1.0, 1.0, 1.0, 1.0};
uniform float sharpness;
uniform float texture_width;
@ -24,7 +23,6 @@ struct VertInOut {
struct VertOut {
float4 pos : POSITION;
float4 col : COLOR;
float2 uv : TEXCOORD0;
float4 t1 : TEXCOORD1;
float4 t2 : TEXCOORD2;
@ -36,7 +34,6 @@ VertOut VSDefault(VertInOut vert_in)
VertOut vert_out;
vert_out.pos = mul(float4(vert_in.pos.xyz, 1.0), ViewProj);
vert_out.uv = vert_in.uv;
vert_out.col = color;
float2 ps = float2(1.0/texture_width, 1.0/texture_height);
float dx = ps.x;
@ -52,23 +49,23 @@ float4 PSDrawBare(VertOut vert_in) : TARGET
{
float4 E = image.Sample(def_sampler, vert_in.uv);
float4 colorx = 8*E;
float4 color = 8*E;
float4 B = image.Sample(def_sampler, vert_in.t1.yw);
float4 D = image.Sample(def_sampler, vert_in.t2.xw);
float4 F = image.Sample(def_sampler, vert_in.t2.zw);
float4 H = image.Sample(def_sampler, vert_in.t3.yw);
colorx -= image.Sample(def_sampler, vert_in.t1.xw);
colorx -= B;
colorx -= image.Sample(def_sampler, vert_in.t1.zw);
colorx -= D;
colorx -= F;
colorx -= image.Sample(def_sampler, vert_in.t3.xw);
colorx -= H;
colorx -= image.Sample(def_sampler, vert_in.t3.zw);
color -= image.Sample(def_sampler, vert_in.t1.xw);
color -= B;
color -= image.Sample(def_sampler, vert_in.t1.zw);
color -= D;
color -= F;
color -= image.Sample(def_sampler, vert_in.t3.xw);
color -= H;
color -= image.Sample(def_sampler, vert_in.t3.zw);
colorx = ((E!=F && E!=D) || (E!=B && E!=H)) ? saturate(E + colorx*sharpness) : E;
color = ((E!=F && E!=D) || (E!=B && E!=H)) ? saturate(E + color*sharpness) : E;
return colorx;
return color;
}
technique Draw

View file

@ -0,0 +1,419 @@
#include <stdint.h>
#include <inttypes.h>
#include <math.h>
#include <obs-module.h>
#include <media-io/audio-math.h>
#include <util/platform.h>
#include <util/circlebuf.h>
#include <util/threading.h>
/* -------------------------------------------------------- */
#define do_log(level, format, ...) \
blog(level, "[expander: '%s'] " format, \
obs_source_get_name(cd->context), ##__VA_ARGS__)
#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
#ifdef _DEBUG
#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__)
#else
#define debug(format, ...)
#endif
/* -------------------------------------------------------- */
#define S_RATIO "ratio"
#define S_THRESHOLD "threshold"
#define S_ATTACK_TIME "attack_time"
#define S_RELEASE_TIME "release_time"
#define S_OUTPUT_GAIN "output_gain"
#define S_DETECTOR "detector"
#define S_PRESETS "presets"
#define MT_ obs_module_text
#define TEXT_RATIO MT_("expander.Ratio")
#define TEXT_THRESHOLD MT_("expander.Threshold")
#define TEXT_ATTACK_TIME MT_("expander.AttackTime")
#define TEXT_RELEASE_TIME MT_("expander.ReleaseTime")
#define TEXT_OUTPUT_GAIN MT_("expander.OutputGain")
#define TEXT_DETECTOR MT_("expander.Detector")
#define TEXT_PEAK MT_("expander.Peak")
#define TEXT_RMS MT_("expander.RMS")
#define TEXT_NONE MT_("expander.None")
#define TEXT_PRESETS MT_("expander.Presets")
#define TEXT_PRESETS_EXP MT_("expander.Presets.Expander")
#define TEXT_PRESETS_GATE MT_("expander.Presets.Gate")
#define MIN_RATIO 1.0f
#define MAX_RATIO 20.0f
#define MIN_THRESHOLD_DB -60.0f
#define MAX_THRESHOLD_DB 0.0f
#define MIN_OUTPUT_GAIN_DB -32.0f
#define MAX_OUTPUT_GAIN_DB 32.0f
#define MIN_ATK_RLS_MS 1
#define MAX_RLS_MS 1000
#define MAX_ATK_MS 100
#define DEFAULT_AUDIO_BUF_MS 10
#define MS_IN_S 1000
#define MS_IN_S_F ((float)MS_IN_S)
/* -------------------------------------------------------- */
struct expander_data {
obs_source_t *context;
float *envelope_buf[MAX_AUDIO_CHANNELS];
size_t envelope_buf_len;
float ratio;
float threshold;
float attack_gain;
float release_gain;
float output_gain;
size_t num_channels;
size_t sample_rate;
float envelope[MAX_AUDIO_CHANNELS];
float slope;
int detector;
float runave[MAX_AUDIO_CHANNELS];
bool is_gate;
float *runaverage[MAX_AUDIO_CHANNELS];
size_t runaverage_len;
float *gaindB[MAX_AUDIO_CHANNELS];
size_t gaindB_len;
float gaindB_buf[MAX_AUDIO_CHANNELS];
float *env_in;
size_t env_in_len;
};
enum {
RMS_DETECT,
RMS_STILLWELL_DETECT,
PEAK_DETECT,
NO_DETECT,
};
/* -------------------------------------------------------- */
static void resize_env_buffer(struct expander_data *cd, size_t len)
{
cd->envelope_buf_len = len;
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
cd->envelope_buf[i] = brealloc(cd->envelope_buf[i],
cd->envelope_buf_len * sizeof(float));
}
static void resize_runaverage_buffer(struct expander_data *cd, size_t len)
{
cd->runaverage_len = len;
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
cd->runaverage[i] = brealloc(cd->runaverage[i],
cd->runaverage_len * sizeof(float));
}
static void resize_env_in_buffer(struct expander_data *cd, size_t len)
{
cd->env_in_len = len;
cd->env_in = brealloc(cd->env_in, cd->env_in_len * sizeof(float));
}
static void resize_gaindB_buffer(struct expander_data *cd, size_t len)
{
cd->gaindB_len = len;
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
cd->gaindB[i] = brealloc(cd->gaindB[i],
cd->gaindB_len * sizeof(float));
}
static inline float gain_coefficient(uint32_t sample_rate, float time)
{
return expf(-1.0f / (sample_rate * time));
}
static const char *expander_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("Expander");
}
static void expander_defaults(obs_data_t *s)
{
const char *presets = obs_data_get_string(s, S_PRESETS);
bool is_expander_preset = true;
if (strcmp(presets, "gate") == 0)
is_expander_preset = false;
obs_data_set_default_string(s, S_PRESETS, is_expander_preset ?
"expander" : "gate");
obs_data_set_default_double(s, S_RATIO, is_expander_preset ?
2.0 : 10.0);
obs_data_set_default_double(s, S_THRESHOLD, -40.0f);
obs_data_set_default_int(s, S_ATTACK_TIME, 10);
obs_data_set_default_int(s, S_RELEASE_TIME, is_expander_preset ?
50 : 125);
obs_data_set_default_double(s, S_OUTPUT_GAIN, 0.0);
obs_data_set_default_string(s, S_DETECTOR, "RMS");
}
static void expander_update(void *data, obs_data_t *s)
{
struct expander_data *cd = data;
const char *presets = obs_data_get_string(s, S_PRESETS);
if (strcmp(presets, "expander") == 0 && cd->is_gate) {
obs_data_clear(s);
obs_data_set_string(s, S_PRESETS, "expander");
expander_defaults(s);
cd->is_gate = false;
}
if (strcmp(presets, "gate") == 0 && !cd->is_gate) {
obs_data_clear(s);
obs_data_set_string(s, S_PRESETS, "gate");
expander_defaults(s);
cd->is_gate = true;
}
const uint32_t sample_rate =
audio_output_get_sample_rate(obs_get_audio());
const size_t num_channels =
audio_output_get_channels(obs_get_audio());
const float attack_time_ms =
(float)obs_data_get_int(s, S_ATTACK_TIME);
const float release_time_ms =
(float)obs_data_get_int(s, S_RELEASE_TIME);
const float output_gain_db =
(float)obs_data_get_double(s, S_OUTPUT_GAIN);
cd->ratio = (float)obs_data_get_double(s, S_RATIO);
cd->threshold = (float)obs_data_get_double(s, S_THRESHOLD);
cd->attack_gain = gain_coefficient(sample_rate,
attack_time_ms / MS_IN_S_F);
cd->release_gain = gain_coefficient(sample_rate,
release_time_ms / MS_IN_S_F);
cd->output_gain = db_to_mul(output_gain_db);
cd->num_channels = num_channels;
cd->sample_rate = sample_rate;
cd->slope = 1.0f - cd->ratio;
const char *detect_mode = obs_data_get_string(s, S_DETECTOR);
if (strcmp(detect_mode, "RMS") == 0)
cd->detector = RMS_DETECT;
if (strcmp(detect_mode, "peak") == 0)
cd->detector = PEAK_DETECT;
size_t sample_len = sample_rate * DEFAULT_AUDIO_BUF_MS / MS_IN_S;
if (cd->envelope_buf_len == 0)
resize_env_buffer(cd, sample_len);
if (cd->runaverage_len == 0)
resize_runaverage_buffer(cd, sample_len);
if (cd->env_in_len == 0)
resize_env_in_buffer(cd, sample_len);
if (cd->gaindB_len == 0)
resize_gaindB_buffer(cd, sample_len);
}
static void *expander_create(obs_data_t *settings, obs_source_t *filter)
{
struct expander_data *cd = bzalloc(sizeof(struct expander_data));
cd->context = filter;
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
cd->runave[i] = 0;
cd->envelope[i] = 0;
cd->gaindB_buf[i] = 0;
}
cd->is_gate = false;
const char *presets = obs_data_get_string(settings, S_PRESETS);
if (strcmp(presets, "gate") == 0)
cd->is_gate = true;
expander_update(cd, settings);
return cd;
}
static void expander_destroy(void *data)
{
struct expander_data *cd = data;
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
bfree(cd->envelope_buf[i]);
bfree(cd->runaverage[i]);
bfree(cd->gaindB[i]);
}
bfree(cd->env_in);
bfree(cd);
}
// detection stage
static void analyze_envelope(struct expander_data *cd,
float **samples, const uint32_t num_samples)
{
if (cd->envelope_buf_len < num_samples)
resize_env_buffer(cd, num_samples);
if (cd->runaverage_len < num_samples)
resize_runaverage_buffer(cd, num_samples);
if (cd->env_in_len < num_samples)
resize_env_in_buffer(cd, num_samples);
// 10 ms RMS window
const float rmscoef = exp2f(-100.0f / cd->sample_rate);
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++) {
memset(cd->envelope_buf[i], 0,
num_samples * sizeof(cd->envelope_buf[i][0]));
memset(cd->runaverage[i], 0,
num_samples * sizeof(cd->runaverage[i][0]));
}
memset(cd->env_in, 0, num_samples * sizeof(cd->env_in[0]));
for (size_t chan = 0; chan < cd->num_channels; ++chan) {
if (!samples[chan])
continue;
float *envelope_buf = cd->envelope_buf[chan];
float *runave = cd->runaverage[chan];
float *env_in = cd->env_in;
if (cd->detector == RMS_DETECT) {
runave[0] = rmscoef * cd->runave[chan] +
(1 - rmscoef) * powf(samples[chan][0], 2.0f);
env_in[0] = sqrtf(fmaxf(runave[0], 0));
for (uint32_t i = 1; i < num_samples; ++i) {
runave[i] = rmscoef * runave[i - 1] +
(1 - rmscoef) *
powf(samples[chan][i], 2.0f);
env_in[i] = sqrtf(runave[i]);
}
} else if (cd->detector == PEAK_DETECT) {
for (uint32_t i = 0; i < num_samples; ++i) {
runave[i] = powf(samples[chan][i], 2);
env_in[i] = fabsf(samples[chan][i]);
}
}
cd->runave[chan] = runave[num_samples-1];
for (uint32_t i = 0; i < num_samples; ++i)
envelope_buf[i] = fmaxf(envelope_buf[i], env_in[i]);
cd->envelope[chan] = cd->envelope_buf[chan][num_samples - 1];
}
}
// gain stage and ballistics in dB domain
static inline void process_expansion(struct expander_data *cd,
float **samples, uint32_t num_samples)
{
const float attack_gain = cd->attack_gain;
const float release_gain = cd->release_gain;
if (cd->gaindB_len < num_samples)
resize_gaindB_buffer(cd, num_samples);
for (int i = 0; i < MAX_AUDIO_CHANNELS; i++)
memset(cd->gaindB[i], 0, num_samples * sizeof(cd->gaindB[i][0]));
for (size_t chan = 0; chan < cd->num_channels; chan++) {
for (size_t i = 0; i < num_samples; ++i) {
// gain stage of expansion
float env_db = mul_to_db(cd->envelope_buf[chan][i]);
float gain = cd->threshold - env_db > 0.0f ?
fmaxf(cd->slope *
(cd->threshold - env_db), -60.0f) :
0.0f;
// ballistics (attack/release)
if (i > 0) {
if (gain > cd->gaindB[chan][i - 1])
cd->gaindB[chan][i] = attack_gain *
cd->gaindB[chan][i - 1] +
(1.0f - attack_gain) * gain;
else
cd->gaindB[chan][i] = release_gain *
cd->gaindB[chan][i - 1] +
(1.0f - release_gain) * gain;
} else {
if (gain > cd->gaindB_buf[chan])
cd->gaindB[chan][i] = attack_gain *
cd->gaindB_buf[chan] +
(1.0f - attack_gain) * gain;
else
cd->gaindB[chan][i] = release_gain *
cd->gaindB_buf[chan] +
(1.0f - release_gain) * gain;
}
gain = db_to_mul(fminf(0, cd->gaindB[chan][i]));
if (samples[chan])
samples[chan][i] *= gain * cd->output_gain;
}
cd->gaindB_buf[chan] = cd->gaindB[chan][num_samples - 1];
}
}
static struct obs_audio_data *expander_filter_audio(void *data,
struct obs_audio_data *audio)
{
struct expander_data *cd = data;
const uint32_t num_samples = audio->frames;
if (num_samples == 0)
return audio;
float **samples = (float**)audio->data;
analyze_envelope(cd, samples, num_samples);
process_expansion(cd, samples, num_samples);
return audio;
}
static bool presets_changed(obs_properties_t *props, obs_property_t *prop,
obs_data_t *settings)
{
UNUSED_PARAMETER(props);
UNUSED_PARAMETER(prop);
UNUSED_PARAMETER(settings);
return true;
}
static obs_properties_t *expander_properties(void *data)
{
obs_properties_t *props = obs_properties_create();
obs_property_t *presets = obs_properties_add_list(props, S_PRESETS,
TEXT_PRESETS, OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_STRING);
obs_property_list_add_string(presets, TEXT_PRESETS_EXP, "expander");
obs_property_list_add_string(presets, TEXT_PRESETS_GATE, "gate");
obs_property_set_modified_callback(presets, presets_changed);
obs_properties_add_float_slider(props, S_RATIO,
TEXT_RATIO, MIN_RATIO, MAX_RATIO, 0.1);
obs_properties_add_float_slider(props, S_THRESHOLD,
TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
0.1);
obs_properties_add_int_slider(props, S_ATTACK_TIME,
TEXT_ATTACK_TIME, MIN_ATK_RLS_MS, MAX_ATK_MS, 1);
obs_properties_add_int_slider(props, S_RELEASE_TIME,
TEXT_RELEASE_TIME, MIN_ATK_RLS_MS, MAX_RLS_MS, 1);
obs_properties_add_float_slider(props, S_OUTPUT_GAIN,
TEXT_OUTPUT_GAIN, MIN_OUTPUT_GAIN_DB,
MAX_OUTPUT_GAIN_DB, 0.1);
obs_property_t *detect = obs_properties_add_list(props, S_DETECTOR,
TEXT_DETECTOR, OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_STRING);
obs_property_list_add_string(detect, TEXT_RMS, "RMS");
obs_property_list_add_string(detect, TEXT_PEAK, "peak");
UNUSED_PARAMETER(data);
return props;
}
struct obs_source_info expander_filter = {
.id = "expander_filter",
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_AUDIO,
.get_name = expander_name,
.create = expander_create,
.destroy = expander_destroy,
.update = expander_update,
.filter_audio = expander_filter_audio,
.get_defaults = expander_defaults,
.get_properties = expander_properties,
};

View file

@ -0,0 +1,49 @@
#include <obs-module.h>
static const char *invert_polarity_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("InvertPolarity");
}
static void invert_polarity_destroy(void *data)
{
UNUSED_PARAMETER(data);
}
static void *invert_polarity_create(obs_data_t *settings, obs_source_t *filter)
{
UNUSED_PARAMETER(settings);
return filter;
}
static struct obs_audio_data *invert_polarity_filter_audio(void *unused,
struct obs_audio_data *audio)
{
float **adata = (float**)audio->data;
for (size_t c = 0; c < MAX_AV_PLANES; c++) {
register float *channel_data = adata[c];
register float *channel_end = channel_data + audio->frames;
if (!channel_data)
break;
while (channel_data < channel_end) {
*(channel_data++) *= -1.0f;
}
}
UNUSED_PARAMETER(unused);
return audio;
}
struct obs_source_info invert_polarity_filter = {
.id = "invert_polarity_filter",
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_AUDIO,
.get_name = invert_polarity_name,
.create = invert_polarity_create,
.destroy = invert_polarity_destroy,
.filter_audio = invert_polarity_filter_audio,
};

View file

@ -0,0 +1,215 @@
#include <stdint.h>
#include <inttypes.h>
#include <math.h>
#include <obs-module.h>
#include <media-io/audio-math.h>
#include <util/platform.h>
/* -------------------------------------------------------- */
#define do_log(level, format, ...) \
blog(level, "[limiter: '%s'] " format, \
obs_source_get_name(cd->context), ##__VA_ARGS__)
#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
#ifdef _DEBUG
#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__)
#else
#define debug(format, ...)
#endif
/* -------------------------------------------------------- */
#define S_THRESHOLD "threshold"
#define S_RELEASE_TIME "release_time"
#define MT_ obs_module_text
#define TEXT_THRESHOLD MT_("Limiter.Threshold")
#define TEXT_RELEASE_TIME MT_("Limiter.ReleaseTime")
#define MIN_THRESHOLD_DB -60.0
#define MAX_THRESHOLD_DB 0.0f
#define MIN_ATK_RLS_MS 1
#define MAX_RLS_MS 1000
#define DEFAULT_AUDIO_BUF_MS 10
#define ATK_TIME 0.001f
#define MS_IN_S 1000
#define MS_IN_S_F ((float)MS_IN_S)
/* -------------------------------------------------------- */
struct limiter_data {
obs_source_t *context;
float *envelope_buf;
size_t envelope_buf_len;
float threshold;
float attack_gain;
float release_gain;
float output_gain;
size_t num_channels;
size_t sample_rate;
float envelope;
float slope;
};
/* -------------------------------------------------------- */
static void resize_env_buffer(struct limiter_data *cd, size_t len)
{
cd->envelope_buf_len = len;
cd->envelope_buf = brealloc(cd->envelope_buf, len * sizeof(float));
}
static inline float gain_coefficient(uint32_t sample_rate, float time)
{
return (float)exp(-1.0f / (sample_rate * time));
}
static const char *limiter_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("Limiter");
}
static void limiter_update(void *data, obs_data_t *s)
{
struct limiter_data *cd = data;
const uint32_t sample_rate =
audio_output_get_sample_rate(obs_get_audio());
const size_t num_channels =
audio_output_get_channels(obs_get_audio());
float attack_time_ms = ATK_TIME;
const float release_time_ms =
(float)obs_data_get_int(s, S_RELEASE_TIME);
const float output_gain_db = 0;
cd->threshold = (float)obs_data_get_double(s, S_THRESHOLD);
cd->attack_gain = gain_coefficient(sample_rate,
attack_time_ms / MS_IN_S_F);
cd->release_gain = gain_coefficient(sample_rate,
release_time_ms / MS_IN_S_F);
cd->output_gain = db_to_mul(output_gain_db);
cd->num_channels = num_channels;
cd->sample_rate = sample_rate;
cd->slope = 1.0f;
size_t sample_len = sample_rate * DEFAULT_AUDIO_BUF_MS / MS_IN_S;
if (cd->envelope_buf_len == 0)
resize_env_buffer(cd, sample_len);
}
static void *limiter_create(obs_data_t *settings, obs_source_t *filter)
{
struct limiter_data *cd = bzalloc(sizeof(struct limiter_data));
cd->context = filter;
limiter_update(cd, settings);
return cd;
}
static void limiter_destroy(void *data)
{
struct limiter_data *cd = data;
bfree(cd->envelope_buf);
bfree(cd);
}
static void analyze_envelope(struct limiter_data *cd,
float **samples, const uint32_t num_samples)
{
if (cd->envelope_buf_len < num_samples) {
resize_env_buffer(cd, num_samples);
}
const float attack_gain = cd->attack_gain;
const float release_gain = cd->release_gain;
memset(cd->envelope_buf, 0, num_samples * sizeof(cd->envelope_buf[0]));
for (size_t chan = 0; chan < cd->num_channels; ++chan) {
if (!samples[chan])
continue;
float *envelope_buf = cd->envelope_buf;
float env = cd->envelope;
for (uint32_t i = 0; i < num_samples; ++i) {
const float env_in = fabsf(samples[chan][i]);
if (env < env_in) {
env = env_in + attack_gain * (env - env_in);
} else {
env = env_in + release_gain * (env - env_in);
}
envelope_buf[i] = fmaxf(envelope_buf[i], env);
}
}
cd->envelope = cd->envelope_buf[num_samples - 1];
}
static inline void process_compression(const struct limiter_data *cd,
float **samples, uint32_t num_samples)
{
for (size_t i = 0; i < num_samples; ++i) {
const float env_db = mul_to_db(cd->envelope_buf[i]);
float gain = cd->slope * (cd->threshold - env_db);
gain = db_to_mul(fminf(0, gain));
for (size_t c = 0; c < cd->num_channels; ++c) {
if (samples[c]) {
samples[c][i] *= gain * cd->output_gain;
}
}
}
}
static struct obs_audio_data *limiter_filter_audio(void *data,
struct obs_audio_data *audio)
{
struct limiter_data *cd = data;
const uint32_t num_samples = audio->frames;
if (num_samples == 0)
return audio;
float **samples = (float**)audio->data;
analyze_envelope(cd, samples, num_samples);
process_compression(cd, samples, num_samples);
return audio;
}
static void limiter_defaults(obs_data_t *s)
{
obs_data_set_default_double(s, S_THRESHOLD, -6.0f);
obs_data_set_default_int(s, S_RELEASE_TIME, 60);
}
static obs_properties_t *limiter_properties(void *data)
{
obs_properties_t *props = obs_properties_create();
obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB, 0.1);
obs_properties_add_int_slider(props, S_RELEASE_TIME, TEXT_RELEASE_TIME, MIN_ATK_RLS_MS, MAX_RLS_MS, 1);
UNUSED_PARAMETER(data);
return props;
}
struct obs_source_info limiter_filter = {
.id = "limiter_filter",
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_AUDIO,
.get_name = limiter_name,
.create = limiter_create,
.destroy = limiter_destroy,
.update = limiter_update,
.filter_audio = limiter_filter_audio,
.get_defaults = limiter_defaults,
.get_properties = limiter_properties,
};

View file

@ -0,0 +1,153 @@
#include <obs-module.h>
#define SETTING_LUMA_MAX "luma_max"
#define SETTING_LUMA_MIN "luma_min"
#define SETTING_LUMA_MAX_SMOOTH "luma_max_smooth"
#define SETTING_LUMA_MIN_SMOOTH "luma_min_smooth"
#define TEXT_LUMA_MAX obs_module_text("Luma.LumaMax")
#define TEXT_LUMA_MIN obs_module_text("Luma.LumaMin")
#define TEXT_LUMA_MAX_SMOOTH obs_module_text("Luma.LumaMaxSmooth")
#define TEXT_LUMA_MIN_SMOOTH obs_module_text("Luma.LumaMinSmooth")
struct luma_key_filter_data {
obs_source_t *context;
gs_effect_t *effect;
gs_eparam_t *luma_max_param;
gs_eparam_t *luma_min_param;
gs_eparam_t *luma_max_smooth_param;
gs_eparam_t *luma_min_smooth_param;
float luma_max;
float luma_min;
float luma_max_smooth;
float luma_min_smooth;
};
static const char *luma_key_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("LumaKeyFilter");
}
static void luma_key_update(void *data, obs_data_t *settings)
{
struct luma_key_filter_data *filter = data;
double lumaMax = obs_data_get_double(settings, SETTING_LUMA_MAX);
double lumaMin = obs_data_get_double(settings, SETTING_LUMA_MIN);
double lumaMaxSmooth = obs_data_get_double(settings, SETTING_LUMA_MAX_SMOOTH);
double lumaMinSmooth = obs_data_get_double(settings, SETTING_LUMA_MIN_SMOOTH);
filter->luma_max = (float)lumaMax;
filter->luma_min = (float)lumaMin;
filter->luma_max_smooth = (float)lumaMaxSmooth;
filter->luma_min_smooth = (float)lumaMinSmooth;
}
static void luma_key_destroy(void *data)
{
struct luma_key_filter_data *filter = data;
if (filter->effect) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
obs_leave_graphics();
}
bfree(data);
}
static void *luma_key_create(obs_data_t *settings, obs_source_t *context)
{
struct luma_key_filter_data *filter =
bzalloc(sizeof(struct luma_key_filter_data));
char *effect_path = obs_module_file("luma_key_filter.effect");
filter->context = context;
obs_enter_graphics();
filter->effect = gs_effect_create_from_file(effect_path, NULL);
if (filter->effect) {
filter->luma_max_param = gs_effect_get_param_by_name(
filter->effect, "lumaMax");
filter->luma_min_param = gs_effect_get_param_by_name(
filter->effect, "lumaMin");
filter->luma_max_smooth_param = gs_effect_get_param_by_name(
filter->effect, "lumaMaxSmooth");
filter->luma_min_smooth_param = gs_effect_get_param_by_name(
filter->effect, "lumaMinSmooth");
}
obs_leave_graphics();
bfree(effect_path);
if (!filter->effect) {
luma_key_destroy(filter);
return NULL;
}
luma_key_update(filter, settings);
return filter;
}
static void luma_key_render(void *data, gs_effect_t *effect)
{
struct luma_key_filter_data *filter = data;
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
gs_effect_set_float(filter->luma_max_param, filter->luma_max);
gs_effect_set_float(filter->luma_min_param, filter->luma_min);
gs_effect_set_float(filter->luma_max_smooth_param, filter->luma_max_smooth);
gs_effect_set_float(filter->luma_min_smooth_param, filter->luma_min_smooth);
obs_source_process_filter_end(filter->context, filter->effect, 0, 0);
UNUSED_PARAMETER(effect);
}
static obs_properties_t *luma_key_properties(void *data)
{
obs_properties_t *props = obs_properties_create();
obs_properties_add_float_slider(props, SETTING_LUMA_MAX,
TEXT_LUMA_MAX, 0, 1, 0.01);
obs_properties_add_float_slider(props, SETTING_LUMA_MAX_SMOOTH,
TEXT_LUMA_MAX_SMOOTH, 0, 1, 0.01);
obs_properties_add_float_slider(props, SETTING_LUMA_MIN,
TEXT_LUMA_MIN, 0, 1, 0.01);
obs_properties_add_float_slider(props, SETTING_LUMA_MIN_SMOOTH,
TEXT_LUMA_MIN_SMOOTH, 0, 1, 0.01);
UNUSED_PARAMETER(data);
return props;
}
static void luma_key_defaults(obs_data_t *settings)
{
obs_data_set_default_double(settings, SETTING_LUMA_MAX, 1.0);
obs_data_set_default_double(settings, SETTING_LUMA_MIN, 0.0);
obs_data_set_default_double(settings, SETTING_LUMA_MAX_SMOOTH, 0.0);
obs_data_set_default_double(settings, SETTING_LUMA_MIN_SMOOTH, 0.0);
}
struct obs_source_info luma_key_filter = {
.id = "luma_key_filter",
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_VIDEO,
.get_name = luma_key_name,
.create = luma_key_create,
.destroy = luma_key_destroy,
.video_render = luma_key_render,
.update = luma_key_update,
.get_properties = luma_key_properties,
.get_defaults = luma_key_defaults
};

View file

@ -46,6 +46,7 @@ static void mask_filter_update(void *data, obs_data_t *settings)
int opacity = (int)obs_data_get_int(settings, SETTING_OPACITY);
char *effect_path;
color &= 0xFFFFFF;
color |= (uint32_t)(((double)opacity) * 2.55) << 24;
vec4_from_rgba(&filter->color, color);
@ -115,7 +116,8 @@ static obs_properties_t *mask_filter_properties(void *data)
obs_properties_add_path(props, SETTING_IMAGE_PATH, TEXT_IMAGE_PATH,
OBS_PATH_FILE, filter_str.array, NULL);
obs_properties_add_color(props, SETTING_COLOR, TEXT_COLOR);
obs_properties_add_int(props, SETTING_OPACITY, TEXT_OPACITY, 0, 100, 1);
obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY,
0, 100, 1);
obs_properties_add_bool(props, SETTING_STRETCH, TEXT_STRETCH);
dstr_free(&filter_str);

View file

@ -2,8 +2,11 @@
#include "obs-filters-config.h"
OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("obs-filters", "en-US")
MODULE_EXPORT const char *obs_module_description(void)
{
return "OBS core filters";
}
extern struct obs_source_info mask_filter;
extern struct obs_source_info crop_filter;
@ -20,8 +23,12 @@ extern struct obs_source_info async_delay_filter;
#if SPEEXDSP_ENABLED
extern struct obs_source_info noise_suppress_filter;
#endif
extern struct obs_source_info invert_polarity_filter;
extern struct obs_source_info noise_gate_filter;
extern struct obs_source_info compressor_filter;
extern struct obs_source_info limiter_filter;
extern struct obs_source_info expander_filter;
extern struct obs_source_info luma_key_filter;
bool obs_module_load(void)
{
@ -40,7 +47,11 @@ bool obs_module_load(void)
#if SPEEXDSP_ENABLED
obs_register_source(&noise_suppress_filter);
#endif
obs_register_source(&invert_polarity_filter);
obs_register_source(&noise_gate_filter);
obs_register_source(&compressor_filter);
obs_register_source(&limiter_filter);
obs_register_source(&expander_filter);
obs_register_source(&luma_key_filter);
return true;
}

View file

@ -17,12 +17,15 @@
#define T_SAMPLING_BILINEAR obs_module_text("ScaleFiltering.Bilinear")
#define T_SAMPLING_BICUBIC obs_module_text("ScaleFiltering.Bicubic")
#define T_SAMPLING_LANCZOS obs_module_text("ScaleFiltering.Lanczos")
#define T_SAMPLING_AREA obs_module_text("ScaleFiltering.Area")
#define T_UNDISTORT obs_module_text("UndistortCenter")
#define T_BASE obs_module_text("Base.Canvas")
#define S_SAMPLING_POINT "point"
#define S_SAMPLING_BILINEAR "bilinear"
#define S_SAMPLING_BICUBIC "bicubic"
#define S_SAMPLING_LANCZOS "lanczos"
#define S_SAMPLING_AREA "area"
struct scale_filter_data {
obs_source_t *context;
@ -42,6 +45,7 @@ struct scale_filter_data {
bool target_valid;
bool valid;
bool undistort;
bool base_canvas_resolution;
};
static const char *scale_filter_name(void *unused)
@ -59,18 +63,29 @@ static void scale_filter_update(void *data, obs_data_t *settings)
const char *sampling = obs_data_get_string(settings, S_SAMPLING);
filter->valid = true;
filter->base_canvas_resolution = false;
ret = sscanf(res_str, "%dx%d", &filter->cx_in, &filter->cy_in);
if (ret == 2) {
if (strcmp(res_str, T_BASE) == 0) {
struct obs_video_info ovi;
obs_get_video_info(&ovi);
filter->aspect_ratio_only = false;
filter->base_canvas_resolution = true;
filter->cx_in = ovi.base_width;
filter->cy_in = ovi.base_height;
} else {
ret = sscanf(res_str, "%d:%d", &filter->cx_in, &filter->cy_in);
if (ret != 2) {
filter->valid = false;
return;
}
ret = sscanf(res_str, "%dx%d", &filter->cx_in, &filter->cy_in);
if (ret == 2) {
filter->aspect_ratio_only = false;
} else {
ret = sscanf(res_str, "%d:%d", &filter->cx_in,
&filter->cy_in);
if (ret != 2) {
filter->valid = false;
return;
}
filter->aspect_ratio_only = true;
filter->aspect_ratio_only = true;
}
}
if (astrcmpi(sampling, S_SAMPLING_POINT) == 0) {
@ -82,6 +97,9 @@ static void scale_filter_update(void *data, obs_data_t *settings)
} else if (astrcmpi(sampling, S_SAMPLING_LANCZOS) == 0) {
filter->sampling = OBS_SCALE_LANCZOS;
} else if (astrcmpi(sampling, S_SAMPLING_AREA) == 0) {
filter->sampling = OBS_SCALE_AREA;
} else { /* S_SAMPLING_BICUBIC */
filter->sampling = OBS_SCALE_BICUBIC;
}
@ -126,6 +144,13 @@ static void scale_filter_tick(void *data, float seconds)
int cx;
int cy;
if (filter->base_canvas_resolution) {
struct obs_video_info ovi;
obs_get_video_info(&ovi);
filter->cx_in = ovi.base_width;
filter->cy_in = ovi.base_height;
}
target = obs_filter_get_target(filter->context);
filter->cx_out = 0;
filter->cy_out = 0;
@ -198,6 +223,7 @@ static void scale_filter_tick(void *data, float seconds)
case OBS_SCALE_BILINEAR: type = OBS_EFFECT_DEFAULT; break;
case OBS_SCALE_BICUBIC: type = OBS_EFFECT_BICUBIC; break;
case OBS_SCALE_LANCZOS: type = OBS_EFFECT_LANCZOS; break;
case OBS_SCALE_AREA: type = OBS_EFFECT_AREA; break;
}
}
@ -289,15 +315,15 @@ static bool sampling_modified(obs_properties_t *props, obs_property_t *p,
bool has_undistort;
if (astrcmpi(sampling, S_SAMPLING_POINT) == 0) {
has_undistort = false;
}
else if (astrcmpi(sampling, S_SAMPLING_BILINEAR) == 0) {
has_undistort = false;
}
else if (astrcmpi(sampling, S_SAMPLING_LANCZOS) == 0) {
has_undistort = true;
}
else if (astrcmpi(sampling, S_SAMPLING_AREA) == 0) {
has_undistort = false;
}
else { /* S_SAMPLING_BICUBIC */
has_undistort = true;
@ -340,6 +366,7 @@ static obs_properties_t *scale_filter_properties(void *data)
obs_property_list_add_string(p, T_SAMPLING_BILINEAR, S_SAMPLING_BILINEAR);
obs_property_list_add_string(p, T_SAMPLING_BICUBIC, S_SAMPLING_BICUBIC);
obs_property_list_add_string(p, T_SAMPLING_LANCZOS, S_SAMPLING_LANCZOS);
obs_property_list_add_string(p, T_SAMPLING_AREA, S_SAMPLING_AREA);
/* ----------------- */
@ -347,6 +374,7 @@ static obs_properties_t *scale_filter_properties(void *data)
OBS_COMBO_TYPE_EDITABLE, OBS_COMBO_FORMAT_STRING);
obs_property_list_add_string(p, T_NONE, T_NONE);
obs_property_list_add_string(p, T_BASE, T_BASE);
for (size_t i = 0; i < NUM_ASPECTS; i++)
obs_property_list_add_string(p, aspects[i], aspects[i]);