Поддержка чересстрочной развертки

Чтобы включить обработку чересстрочной развертки в vMix, установите для параметра Master Frame Rate одно из следующих значений. Это можно сделать из меню «Настройки» -> «Экран».

Основная частота кадров

50p, 59,94p, 60p, 50i, 59,94i, 60i

Источники с чересстрочной разверткой будут разделены на два отдельных кадра для кадров с частотой 50p и выше. Все остальные основные скорости кадров являются прогрессивными, и любые чересстрочные входы будут деинтерлейсированы автоматически.

Входы

Входы Поддержка чересстрочной развертки Замчания
Камера Да Выберите чересстрочную частоту кадров и поставьте отметку в поле «Чересстрочная развертка»
Видео MOV, MXF Чтобы включить дополнительные типы файлов для полной обработки чересстрочной развертки, добавьте их в раздел FFMPEG меню «Настройки» -> «Декодеры» Все остальные форматы будут преобразованы в прогрессивную с использованием деинтерлейсинга Blend
Плейлист То же, что и для видео выше Чересстрочная развертка может быть установлена для каждого видео независимо.
Секвенции изображений Да, одно изображение на кадр Каждое изображение в последовательности изображений обрабатывается как поле при использовании чересстрочного вывода. Например, 50 изображений необходимо для 1 секунды 50i видео.
Задержка видео Да, сохраненные клипы прогрессивны Сохраненные клипы сохраняются как чересстрочные, но воспроизводятся в vMix только как прогрессивные

Запись

ПРИМЕЧАНИЕ. Чересстрочную запись необходимо проверить в разделе «Настройки» -> «Запись»

Запись чересстрочной развертки поддерживается для форматов AVI и MPEG-2, устанавливая частоту кадров записи 50i, 59.94i или 60i

Все записи являются Верхним полем первого, за исключением NTSC 480i, которое является нижним полем First

MP4 и WMV поддерживают только прогрессивную запись.

Внешний выход

ПРИМЕЧАНИЕ. Чересстрочную запись необходимо проверить в разделе «Настройки» -> «Запись»

Запись чересстрочной развертки поддерживается установкой частоты кадров 50i, 59.94i или 60i на внешнем выходе

Полноэкранный дисплей

Окна полноэкранного просмотра и предварительного просмотра будут отображать первое поле только в том случае, если для основной частоты кадров установлено значение 50i, 59,94i или 60i

Для отображения в полноэкранном режиме установите для параметра Master Frame Rate значение 50p или выше.

Прогрессивный вывод от чересстрочного источника

В следующей таблице описывается, как обрабатывается каждая основная частота кадров при использовании прогрессивной частоты кадров для записи или внешнего вывода.

Основная частота кадров Частота кадров выхода Обработка
50p, 59.94p, 60p 25p, 29.97p, 30p Отбрасывает каждый второй кадр
50i, 59.94i, 60i 25p, 29.97p, 30p Отбрасывает каждое второе поле, превое используется для обработки
50i, 59.94i, 60i 50p, 59.94p, 60p Один кадр на поле

Статистика

Окно статистики можно отобразить, щелкнув значок в правом нижнем углу, как показано ниже.

Поддержка чересстрочной развертки - student2.ru

В этом окне отображается статистика в реальном времени каждого входа в реальном времени, включая пропущенные кадры и аудиосинхронизацию.

Каждый столбец подробно описан ниже:

Исключен источник

Это показывает количество сброшенных кадров в результате медленной работы карты захвата / камеры. Например, часы камеры могут быть медленнее, чем vMix, или карта захвата испытывает узкое место в пропускной способности.

Выведено средство рендеринга

Это показывает количество отброшенных кадров в результате медленной работы видеокарты.

Повторная синхронизация

Этот номер показывает количество сброшенных кадров в результате слишком быстрой загрузки карты захвата / камеры. Например, часы фотокамеры могут работать немного быстрее, чем vMix.

Видео

В этом столбце показана статистика времени, относящаяся к времени прибытия каждого кадра из источника.

Пример: 33 33 33 33 (49)

В приведенном выше примере четыре предыдущих кадра приходят друг за другом на 33 миллисекунды (что означает примерно 30 кадров в секунду)

Число в скобках показывает, сколько времени потребовалось для отображения кадра на экране. (В данном случае 1,5 кадра)

Эти числа будут совпадать с результатами, отмеченными в других удаленных столбцах.

Если 30p камера показывает 38 38 38 38 последовательно, это указывает на то, что она работает медленно. Это отобразится в столбце «Исключен источник».

Если камера 30p показывает 25 25 25 25 последовательно, это означает, что она работает быстро. Это отобразится в столбце Повторная синхронизация.

Аудио

В этом столбце показана временная статистика, относящаяся к времени прибытия каждого образца звука из источника.

Пример: 60/67 мс Выпало: 2/0 Повторно выбран: 0/40

Мс

Эти значения показывают полноту аудио буфера.

Выпало: 2/0

Количество прочитанных / записываемых аудиоданных.

Повторная выборка: 0/40

Количество миллисекунд аудио, которое было перевыбран для синхронизации.

Замок

Значок Замок в правом нижнем углу vMix можно использовать для блокировки определенных кнопок в vMix, чтобы они случайно не были нажаты.

Когда значок становится серым и открыт, все разблокируется, когда значок становится оранжевым и закрывается, следующие функции блокируются:

Кнопка закрытия vMix

Кнопка закрытия ввода

Открыть пресет

Последняя настройка

Остановка записи

Потоковая передача

Остановка внешнего выхода

Остановка MultiCorder

Сценарии и автоматизация

4K и Pro версии vMix включают мощные возможности программирования через функцию Scripting.

Считайте, что это очень продвинутая версия ярлыков, а не простая функция, назначенная клавише клавиатуры Вы можете назначить любой код, который вы можете придумать, включая задачи, такие как загрузка интернет-контента и присвоение его заголовку.

Процесс идет следующим образом:

1. Создайте сценарий на вкладке «Сценарии» в «Настройках» и назначьте ему уникальное Имя.

2. Создайте ярлык и выберите «ScriptStart» в качестве функции и введите имя сценария в поле «Имя скрипта».

Скриптинг поддерживает два разных языка при написании сценария:

Сценарии VB.NET

Веб-скрипты

Сценарии VB.NET

VMix Scripting поддерживает мощный и понятный язык VB.NET при написании сценария.

Пример Hello World

Рассмотрите следующий пример vMix, взяв на себя печально известное приложение «Hello World»:

Input.Find("NewsHD.xaml").Text("Headline") = "Hello World!"  

Или по-другому

dim i = Input.Find("NewsHD.xaml") i.Text("Headline") = "Hello World!"

Оба эти сценария делают то же самое, то есть, чтобы найти входной заголовок с именем «NewsHD.xaml» и присвоить поле «Заголовок» с текстом «Hello World!». Чтобы попробовать, добавьте шаблон заголовка NewsHD.xaml в vMix и запустите скрипт.

VB.NET

VMix Scripting поддерживает большинство VB.NET 2.0 кода, который будет работать в рамках одной подпрограммы или функции. Это означает, что пользовательские классы и структуры не поддерживаются, однако вы можете использовать подавляющее большинство встроенных базовых классов в .NET framework, включая удобный System.Net.WebClient для загрузки данных через Интернет.

Объекты vMix

Существует несколько встроенных объектов, которые можно использовать из сценариев vMix:

Входные данные

Общие свойства

Выходной сигнал

Предварительный просмотр как вход

Найти (inputNameNumberOrKey как строка) В качестве ввода

Пример:

Input.Preview.Function("Cut")  

Свойства экземпляра

Text(необязательное имя поля As String = "") As String

Измените текст поля в заголовке или прочитайте текущее значение.

Методы экземпляра

Функция (functionName As String, необязательное значение As String = "", необязательная длительность As Integer = 0, Optional selectedName As String = "", Optional selectedIndex As Integer = 0)

Функция может использоваться для вызова любой функции Shortcut в vMix

WaitForCompletion (timeoutMilliseconds As Integer) как логическое значение

Подождите, пока видео закончит воспроизведение и вернет True, в противном случае верните False, если истекло время ожидания.

Наложение

Общие свойства

Найти (число как целое) как наложение

Методы экземпляра

In (ввод как строка)

Вне

Прочь

Примеры:

Overlay.Find(1).In("NewsHD.xaml")  
For i As Integer = 1 to 4   Overlay.Find(i).Off Next

Консоль

Общие методы

WriteLine (сообщение как строка)

Введите строку сообщения в консоль скрипта vMix, доступную на вкладке «Сценарии» в «Настройках».

Это полезно для целей отладки

Примеры:

Console.WriteLine("Beginning Example Script") Overlay.Find(1).In("NewsHD.xaml") Console.WriteLine("Title should now appear in Overlay 1, now we wait 5 seconds") Sleep(5000) Console.WriteLine("Now we will transition out Overlay 1") Overlay.Find(1).Out Console.WriteLine("Finished!")

API

Общие методы

XML () As String

Возвращает XML-состояние vMix в соответствии с API vMix Web

Function(functionName As String, Optional input As String = "", Optional value As String = "", Optional duration As Integer = 0, Optional selectedName As String = "", Optional selectedIndex As Integer = 0)

Вызывает функцию API в соответствии с API vMix Web

Примеры:

API.Function("CubeZoom",,1000)  

Веб-скрипты

Web Scripting поддерживает базовый синтаксис URL-адресов для выполнения нескольких функций один за другим.

пример

Function=OverlayInput1In&Input=NewsHD.xaml Sleep 2000 Function=OverlayInput1Out  

Синтаксис

Синтаксис для каждой строки такой же, как строка запроса, используемая с API vMix Web без части URL

Например, http: // localhost: 8088 / API /? Function = Вырезать в веб-интерфейсе API было бы просто Function = Cut с помощью веб-сценариев

Все те же параметры применяются, например:

  Function=Slide&Input=NewsHD.xaml&Duration=1000 Function=SetText&Input=NewsHD.xaml&SelectedName=Description&Value=Hello World  

Единственное исключение - команда Sleep, которая уникальна для веб-сценариев и будет приостанавливаться на несколько миллисекунд между двумя функциями.

При использовании специальных символов в параметре Value может потребоваться кодировка URL.

Горячие клавиши

Следующие функции быстрого вызова можно вызвать либо через ярлык, либо через API.

Список функций постоянно растет, поэтому приведенные ниже функции представляют лишь небольшую часть того, что доступно.

Fade, Zoom, Cut Etc: Назначьте клавише клавиатуры эффект перехода. Можно также выбрать продолжительность

.

Наименование Действие Параметры
Основное
KeyPress Уровень = Key Уровень
Audio
Audio Toggle Audio Mute On/Off Включение
AudioAuto Включение
AudioAutoOff Включение
AudioAutoOn Включение
AudioBus Уровень = Bus M,A,B Уровень,Включение
AudioBusOff Уровень = Bus M,A,B Уровень,Включение
AudioBusOn Уровень = Bus M,A,B Уровень,Включение
AudioMixerShowHide Ничего
AudioOff Включение
AudioOn Включение
BusAAudio Ничего
BusAAudioOff Ничего
BusAAudioOn Ничего
BusBAudio Ничего
BusBAudioOff Ничего
BusBAudioOn Ничего
MasterAudio Ничего
MasterAudioOff Ничего
MasterAudioOn Ничего
SetBalance Уровень = Balance -1-1 Уровень,Включение
SetBusAVolume Уровень = Volume 0-100 Уровень
SetBusBVolume Уровень = Volume 0-100 Уровень
SetGain Уровень = Gain dB 0-24 Уровень,Включение
SetGainChannel1 Уровень = Gain dB 0-24 Уровень,Включение
SetGainChannel2 Уровень = Gain dB 0-24 Уровень,Включение
SetHeadphonesVolume Уровень = Volume 0-100 Уровень
SetMasterVolume Уровень = Volume 0-100 Уровень
SetVolume Уровень = Volume 0-100 Уровень,Включение
SetVolumeChannel1 When using SeparateMono on an Audio Включение, this can be used to set channel volumes independently. Уровень = Volume 0-100 Уровень,Включение
SetVolumeChannel2 When using SeparateMono on an Audio Включение, this can be used to set channel volumes independently. Уровень = Volume 0-100 Уровень,Включение
Solo Включение
SoloOff Включение
SoloOn Включение
Transition
CutDirect Cuts the Включение directly to Output without changing Preview Включение
FadeToBlack Toggle FTB On/Off Ничего
QuickPlay Включение
SetFader Set Master Fader T-Bar, 255 will cut to Preview Уровень = Fader 0-255 Уровень
Stinger1 Ничего
Stinger2 Ничего
Transition1 Clicks one of the four Transition buttons in the main vMix window. Ничего
Transition2 Ничего
Transition3 Ничего
Transition4 Ничего
Output
FullscreenOff Ничего
FullscreenOn Ничего
SetOutputExternal2 Change what is displayed on the External2 output. Output,Preview,MultiView,Включение Уровень = Output, Preview, MultiView, Включение Уровень,Включение
SetOutputFullscreen Change what is displayed on the Fullscreen output. Output,Preview,MultiView,Включение Уровень = Output, Preview, MultiView, Включение Уровень,Включение
SetOutputFullscreen2 Change what is displayed on the Fullscreen2 output. Output,Preview,MultiView,Включение Уровень = Output, Preview, MultiView, Включение Уровень,Включение
Snapshot Create a snapshot image of the current Output. Optional Уровень specifies save Filename, otherwise a save file window will appear. Filename can specify date, for example mysnapshot {0:dd MMM yyyy}.jpg Уровень = Уровень Уровень
StartExternal Ничего
StartMultiCorder Ничего
StartRecording Ничего
StartStopExternal Ничего
StartStopMultiCorder Ничего
StartStopRecording Ничего
StartStopStreaming Ничего
StartStreaming Ничего
StopExternal Ничего
StopMultiCorder Ничего
StopRecording Ничего
StopStreaming Ничего
WriteDurationToRecordingLog Write current recording duration to log file with optional tag text Уровень. Уровень = Tag Text Уровень
Title
AdjustCountdown Seconds to add or subtract from current Countdown time Уровень = Seconds Уровень,Включение
NextTitlePreset Включение
PauseCountdown Включение
PauseRender Freeze Title Включение while making multiple updates Включение
PreviousTitlePreset Включение
ResumeRender Resume Title Включение rendering after making multiple updates Включение
SelectTitlePreset Уровень = Preset Index Уровень,Включение
SetCountdown Set countdown duration according to Уровень as hh:mm:ss (00:00:00) Уровень = Duration 00:00:00 Уровень,Включение
SetImage Change Image in Title according to Filename or empty to clear. SelectedIndex or SelectedУровень can be used to select text field. Уровень = Filename Уровень,Включение
SetText Change Text in Title according to Уровень parameter. SelectedIndex or SelectedName can be used to select Text Field Уровень = Text Уровень,Включение
StartCountdown Включение
StopCountdown Stop and Reset Countdown Включение
Включение
ActiveВключение Send to Output the selected Включение Включение
AddВключение Create a new Включение based on information provided in Уровень. Video|c:\path\to\video.avi Image|c:\path\to\image.jpg Photos|c:\path\to\folder Xaml|c:\path\to\title.xaml VideoList|c:\path\to\playlist.m3u Colour|HTMLColor AudioFile|c:\path\to\audio.wav Flash|c:\path\to\flash.swf PowerPoint|c:\path\to\powerpoint.pptx Уровень = Type|Filename Уровень
AutoPauseOff Включение
AutoPauseOn Включение
AutoPlayOff Включение
AutoPlayOn Включение
AutoRestartOff Включение
AutoRestartOn Включение
CreateVirtualВключение Create a new Virtual Включение from the specified Включение. Включение
DeinterlaceOff Включение
DeinterlaceOn Включение
LoopOff Включение
LoopOn Включение
MarkIn Включение
MarkOut Включение
MarkReset Включение
MarkResetIn Включение
MarkResetOut Включение
MirrorOff Включение
MirrorOn Включение
MoveВключение Уровень = Number Уровень,Включение
NextItem Move to next item in List Включение
NextPicture Move to Next Picture for Photo and PowerPoint Включениеs Включение
Pause Включение
Play Включение
PlayPause Включение
PreviewВключение Send to Preview the selected Включение Включение
PreviewВключениеNext Send to Preview the next Включение Ничего
PreviewВключениеPrevious Send to Preview the previous Включение Ничего
PreviousItem Move to previous item in List Включение
PreviousPicture Move to Previous Picture for Photo and PowerPoint Включениеs Включение
RemoveВключение Включение
Restart Restart selected Включение Включение
SaveVideoDelay Save video clip from Video Delay according to Duration in milliseconds Включение,Duration
SelectCategory Change to Category according to Уровень (All,Red,Green,Orange,Purple,Aqua,Blue) Уровень = Category Уровень
SelectIndex Photos,List: Selects item in List according to Уровень starting from number 1 Virtual Set: Zooms to selected preset using the current speed settings Уровень = Index Уровень,Включение
SetAlpha Set Включение transparency according to Уровень. 0 is transparent, 255 is opaque Уровень = Alpha 0-255 Уровень,Включение
SetPanX Change current PanX Уровень of Включение. 0=centered, -2=100% to left, 2=100% to right Уровень = Уровень -2-2 Уровень,Включение
SetPanY Change current PanY Уровень of Включение. 0=centered, -2=100% to bottom, 2=100% to top Уровень = Уровень -2-2 Уровень,Включение
SetPictureEffect Set transition effect for Photos and PowerPoint Включениеs (Fade, Zoom, etc) Уровень = Transition Уровень,Включение
SetPictureEffectDuration Set duration of transition effect in Milliseconds Уровень = Duration MS Уровень,Включение
SetPictureTransition Set transition time between Photos and PowerPoint slides in Seconds Уровень = Seconds Уровень,Включение
SetPosition Set Position of selected Включение according to Уровень in Milliseconds Уровень = Milliseconds Уровень,Включение
SetRate Set Playback speed/rate for Videos and Video Delays 0.5=50%,1=100%,2=200% etc Уровень = Speed 0.1-4 Уровень,Включение
SetZoom Change current Zoom level of Включение. 1=100%, 0.5=50%, 2=200% Уровень = Уровень 0-5 Уровень,Включение
SharpenOff Включение
SharpenOn Включение
WaitForCompletion Wait for a Video Включение to reach the end of playback. Включение,Duration
Overlay
OverlayВключение1 Toggle Overlay1 On/Off with selected Включение using configured Transition Включение
OverlayВключение1In Transition Out to Overlay1 with selected Включение Включение
OverlayВключение1Off Immediately switch Overlay1 Off (Cut) Ничего
OverlayВключение1Out Transition Out Overlay1 Ничего
OverlayВключение1Zoom Zooms PIP Overlay to fill Fullscreen and vice versa Ничего
OverlayВключение2 Включение
OverlayВключение2In Включение
OverlayВключение2Off Ничего
OverlayВключение2Out Ничего
OverlayВключение2Zoom Ничего
OverlayВключение3 Включение
OverlayВключение3In Включение
OverlayВключение3Off Ничего
OverlayВключение3Out Ничего
OverlayВключение3Zoom Ничего
OverlayВключение4 Включение
OverlayВключение4In Включение
OverlayВключение4Off Ничего
OverlayВключение4Out Ничего
OverlayВключение4Zoom Ничего
OverlayВключениеAllOff Immediately switch all Overlays Off Ничего
PreviewOverlayВключение1 Preview Overlay1 using the selected Включение Включение
PreviewOverlayВключение2 Включение
PreviewOverlayВключение3 Включение
PreviewOverlayВключение4 Включение
SetMultiViewOverlay Change Overlay in Включение MultiView according to Уровень parameter. Example: 1,2 changes Overlay1 to Включение2 Уровень = Index,Включение Уровень,Включение
PlayList
NextPlayListEntry Move to Next Item in a running PlayList Ничего
PreviousPlayListEntry Move to Previous Item in a running PlayList Ничего
SelectPlayList Open PlayList with Name matching Уровень Уровень = PlayList Уровень
StartPlayList Ничего
StopPlayList Ничего
Scripting
ScriptStart Уровень = Script Name Уровень
ScriptStartDynamic Start a dynamic script using code specified as the Уровень. Уровень = Code Уровень
ScriptStop Уровень = Script Name Уровень
ScriptStopAll Ничего
ScriptStopDynamic Ничего
Replay
ReplayACamera1 Ничего
ReplayACamera2 Ничего
ReplayACamera3 Ничего
ReplayACamera4 Ничего
ReplayBCamera1 Ничего
ReplayBCamera2 Ничего
ReplayBCamera3 Ничего
ReplayBCamera4 Ничего
ReplayChangeDirection Ничего
ReplayChangeSpeed Уровень = Speed Уровень
ReplayExportLastEvent Уровень = Folder Уровень
ReplayJumpFrames Уровень = Frames Уровень
ReplayJumpToNow Ничего
ReplayLive Ничего
ReplayLiveToggle Ничего
ReplayMarkCancel Ничего
ReplayMarkIn Ничего
ReplayMarkInLive Ничего
ReplayMarkInOut Уровень = Уровень Уровень
ReplayMarkInOutLive Уровень = Уровень Уровень
ReplayMarkInOutRecorded Уровень = Уровень Уровень
ReplayMarkInRecorded Ничего
ReplayMarkInRecordedNow Ничего
ReplayMarkOut Ничего
ReplayMoveLastEvent Уровень = Event List 0-3 Уровень
ReplayMoveSelectedEvent Уровень = Event List 0-3 Уровень
ReplayMoveSelectedInPoint Уровень = Frames Уровень
ReplayMoveSelectedOutPoint Уровень = Frames Уровень
ReplayPlayEvent Уровень = Event Number 0-1000 Уровень
ReplayPlayEventToOutput Уровень = Event Number 0-1000 Уровень
ReplayPlayLastEvent Ничего
ReplayPlayLastEventToOutput Ничего
ReplayPlayNext Ничего
ReplayPlayPause Ничего
ReplayPlayPrevious Ничего
ReplayPlaySelectedEvent Ничего
ReplayPlaySelectedEventToOutput Ничего
ReplayRecorded Ничего
ReplaySelectEvents1 Ничего
ReplaySelectEvents2 Ничего
ReplaySelectEvents3 Ничего
ReplaySelectEvents4 Ничего
ReplaySelectNextEvent Ничего
ReplaySelectPreviousEvent Ничего
ReplaySetDirectionBackward Ничего
ReplaySetDirectionForward Ничего
ReplaySetLastEventText Уровень = Text Уровень
ReplaySetSelectedEventText Уровень = Text Уровень
ReplaySetSpeed Уровень = Speed Уровень
ReplayShowHide Ничего
ReplayStartRecording Ничего
ReplayStopEvents Ничего
ReplayStopRecording Ничего
ReplayToggleLastEventCamera1 Ничего
ReplayToggleLastEventCamera2 Ничего
ReplayToggleLastEventCamera3 Ничего
ReplayToggleLastEventCamera4 Ничего
ReplayToggleSelectedEventCamera1 Ничего
ReplayToggleSelectedEventCamera2 Ничего
ReplayToggleSelectedEventCamera3 Ничего
ReplayToggleSelectedEventCamera4 Ничего
NDI
NDISelectSourceByIndex Уровень = Index 0-100 Уровень,Включение
NDISelectSourceByName Уровень = Name Уровень,Включение
PTZ
PTZCreateVirtualВключение Creates a PTZ Virtual Включение with the current Position Включение
PTZHome Включение
PTZMoveDown Уровень = Speed 0-1 Уровень,Включение
PTZMoveDownLeft Уровень = Speed 0-1 Уровень,Включение
PTZMoveDownRight Уровень = Speed 0-1 Уровень,Включение
PTZMoveLeft Уровень = Speed 0-1 Уровень,Включение
PTZMoveRight Уровень = Speed 0-1 Уровень,Включение
PTZMoveStop Stop all PTZ movement Включение
PTZMoveToVirtualВключениеPosition Moves to the Position of the PTZ Virtual Включение without selecting it into Preview Включение
PTZMoveToVirtualВключениеPositionByIndex Moves to the Position of the PTZ Virtual Включение associated with this Включение. Index is first Включение found starting from 0 Уровень = Index 0-100 Уровень,Включение
PTZMoveUp Уровень = Speed 0-1 Уровень,Включение
PTZMoveUpLeft Уровень = Speed 0-1 Уровень,Включение
PTZMoveUpRight Уровень = Speed 0-1 Уровень,Включение
PTZUpdateVirtualВключение Updates selected PTZ Virtual Включение with current Position Включение
PTZZoomIn Уровень = Speed 0-1 Уровень,Включение
PTZZoomOut Уровень = Speed 0-1 Уровень,Включение
PTZZoomStop Включение
Preset
LastPreset Load the last preset. Ничего
OpenPreset Load preset from the specified Filename. Уровень = Filename Уровень
SavePreset Save preset to the specified Filename. Уровень = Filename  

Наши рекомендации