L-SMASH Works: инструкция от гика, декодирование, индексация и точный доступ к кадрам

L-SMASH Works — не самостоятельный видеоредактор и не конвертер, а набор входных плагинов, который передаёт декодированные кадры и звук в AviSynth+, VapourSynth и AviUtl2. Проект сочетает демультиплексирование через L-SMASH или libavformat с декодированием через библиотеки FFmpeg, умеет строить индекс для точного позиционирования и даёт скриптам доступ к отдельным потокам, частоте кадров, формату пикселей, аудиоканалам и аппаратному декодированию. Поэтому его разумно оценивать не по привычным критериям настольной программы с таймлайном и кнопкой Export, а по совместимости с исходниками, точности seek, качеству индексации, управляемости декодера и тому, насколько предсказуемо он отдаёт данные хосту.

Что такое L-SMASH Works и чем он не является

Название L-SMASH Works связано с проектом L-SMASH, но это разные сущности. L-SMASH — мультимедийная библиотека, ориентированная прежде всего на контейнеры семейства ISO Base Media и QuickTime. L-SMASH Works использует её как одну из основ и добавляет source-фильтры для видеоскриптов и входной модуль для AviUtl. В актуальной ветке рядом с L-SMASH применяется libavformat, поэтому пользователь получает два принципиально разных пути чтения: через L-SMASH и через более широкий набор демультиплексоров FFmpeg.

Исходный L-SMASH Works создал Yusuke Nakamura, известный как VFR-maniac. Сейчас наиболее актуальная публичная ветка развивается в организации HomeOfAviSynthPlusEvolution и объединяет изменения нескольких последующих форков. Такой контекст важен: старые инструкции нередко ссылаются на исходный репозиторий или прежние сборки, тогда как текущие релизы содержат новые функции, включая поддержку AviUtl2, VapourSynth API v4, современные режимы аппаратного декодирования и аудиофильтры VapourSynth.

По назначению L-SMASH Works ближе к инфраструктурному компоненту медиапайплайна. Он не монтирует ролики, не рисует титры, не управляет проектами и не кодирует готовое видео сам по себе. Для этих задач нужен хост, фильтры обработки и отдельный энкодер. Если задача состоит именно в перекодировании готового файла, полезнее начать с программ для конвертирования видео; L-SMASH Works решает более ранний этап — корректно открыть исходник и отдать его кадры или аудиосэмплы последующей обработке.

Основные параметры

Параметр Значение
Официальное название L-SMASH Works
Тип Набор source/input-плагинов для чтения и декодирования медиа
Исходный автор Yusuke Nakamura (VFR-maniac)
Актуальная поддержка HomeOfAviSynthPlusEvolution и участники объединённых форков
Текущая ветка релизов Активная; на 4 сентября 2026 года последним опубликован релиз 20260824 1310.0.0.0, выпущенный в августе 2026 года
Поддерживаемые хосты в актуальных сборках AviSynth+, VapourSynth, AviUtl2
Основные входные функции LSMASHVideoSource, LSMASHAudioSource, LWLibavVideoSource, LWLibavAudioSource, lsmas.LibavSMASHSource, lsmas.LWLibavSource и аудиофункции VapourSynth
Демультиплексирование L-SMASH либо libavformat в зависимости от выбранного source-фильтра
Декодирование libavcodec с выбором предпочтительного декодера и аппаратного режима
Индексация Формат .lwi для LWLibav-пути; индекс ускоряет повторное открытие и обеспечивает адресный доступ к кадрам
VFR и CFR Чтение исходного тайминга и принудительное преобразование в заданную частоту через fpsnum/fpsden
Аппаратное декодирование CUVID, QSV, DXVA2, D3D11, D3D12 и Vulkan через параметр prefer_hw; доступность зависит от сборки, оборудования и кодека
Регистрация и облако Аккаунт и облачная обработка не требуются
Цена Бесплатный открытый проект без платной редакции и пробного периода

Актуальный статус, платформы и распространение

На дату подготовки обзора L-SMASH Works не является заброшенным наследием старого AviUtl. Активная ветка HomeOfAviSynthPlusEvolution выпускает готовые сборки и регулярно подтягивает изменения FFmpeg, L-SMASH и связанных библиотек. Релиз 1310, опубликованный в августе 2026 года, исправил обработку частичных аудиопровалов, скорректировал координаты разрывов после ресемплинга и синхронизации, добавил аудиоисточники для VapourSynth и доработал pre-roll для сжатого звука рядом с синтетическими паузами.

Поддержка AviUtl2 появилась в ветке релизов летом 2026 года. В сборках присутствует соответствующий входной модуль; для AviUtl2 бинарный файл должен иметь имя lwinput.aui2. Тогда хост распознаёт его как L-SMASH Works File Reader for AviUtl2. Это отдельная практическая деталь, которая отличает современную интеграцию от старого AviUtl, где входной модуль традиционно назывался lwinput.aui.

Готовые релизные архивы ориентированы на Windows и различают x86 и x64. В описании актуальной сборки отдельно оговорено, что x86-вариант собран без Vulkan. Поэтому для современного сценария с аппаратным декодированием и 64-битным хостом логичен x64-пакет. Сам исходный код открыт, но наличие исходников не превращает проект в готовое приложение для macOS, Linux, Android или iOS: пользователю нужен совместимый хост и подходящая сборка плагина.

Модель распространения проста: нет аккаунта, лицензии по подписке, платного расширения, веб-кабинета или мобильного клиента. Функции выполняются локально. Интернет нужен для получения архива, обновлений и сопутствующей документации, но обычное чтение локального файла не требует обращения к серверу разработчика.

В состав проекта не входят облачная обработка, мобильное приложение или ИИ-инструменты. Автоматизация строится средствами хоста: скрипты AviSynth+/VapourSynth можно использовать как воспроизводимые шаблоны для нескольких файлов, но отдельного графического менеджера пакетной очереди L-SMASH Works не предоставляет.

Интерфейс и рабочая модель

У L-SMASH Works нет единого главного окна. Интерфейс определяется способом использования. В AviSynth+ и VapourSynth пользователь работает с функциями и параметрами в скрипте; в AviUtl2 доступен графический диалог File Reader. Поэтому привычные элементы вроде медиатеки, таймлайна и отдельного окна экспорта здесь отсутствуют. Вместо них центральными объектами становятся путь к файлу, номер потока, индекс, параметры seek, формат вывода, частота кадров и выбранный декодер.

Список входных плагинов AviUtl2 с L-SMASH Works File Reader
Интеграция L-SMASH Works с AviUtl2 в 2025 году: File Reader отображается отдельным входным плагином. В активную основную ветку поддержка AviUtl2 вошла в релизах 2026 года.

В графической интеграции AviUtl2 настройки сгруппированы вокруг четырёх задач. Первая — приоритет способов чтения, включая Libav+L-SMASH и LW-Libav. Вторая — позиционирование и тайминг: Forward threshold, Seek mode, VFR→CFR, повтор кадров и доминирование полей. Третья — звук: частота дискретизации, раскладка каналов, микширование и A/V sync correction. Четвёртая — индекс и декодер: Create Index file, каталог кэша и Preferred decoders.

Диалог настроек L-SMASH Works File Reader в AviUtl2
Диалог интеграции L-SMASH Works с AviUtl2, опубликованный в 2025 году: режимы чтения, seek, VFR→CFR, аудио, индекс и Preferred decoders. Состав полей продолжал меняться в последующих релизах.

Собственного языкового пакета у L-SMASH Works нет: имена функций и параметров в скриптах англоязычные, а язык меню AviUtl2 задаётся самим хостом. В скриптовых хостах та же логика выражена именованными аргументами. Например, stream_index или track выбирает медиапоток, cache и cachefile управляют индексом, fpsnum/fpsden меняют временную сетку, format задаёт формат пикселей, decoder меняет приоритет декодеров, а prefer_hw определяет аппаратный путь. Плюс такого интерфейса — воспроизводимость: параметры остаются в текстовом файле рядом с остальной обработкой. Минус — порог входа выше, чем у GUI-программы, потому что ошибка в имени функции или аргументе останавливает загрузку скрипта.

Основные функции и связь между ними

Два пути чтения: L-SMASH и LWLibav

Главное архитектурное различие проходит между LSMASHSource/LibavSMASHSource и LWLibavSource. Первый путь использует L-SMASH как демультиплексор и libavcodec как декодер. Он естественно связан с контейнерами семейства MP4/MOV и подходит для прямого чтения поддерживаемых L-SMASH структур. Второй путь использует libavformat, поэтому охватывает существенно более широкий спектр контейнеров и строит индекс .lwi.

Для полноценной обработки LWLibav-вариант предпочтительнее: за пределами простого предварительного просмотра L-SMASH-путь имеет менее выгодный профиль производительности. Причина не в «качестве картинки», а в способе доступа к структуре файла и повторному позиционированию. Когда проекту нужен произвольный доступ к тысячам кадров, заранее созданный индекс обычно важнее минимальной подготовки первого открытия.

Видеоисточники в AviSynth+

LSMASHVideoSource и LWLibavVideoSource возвращают видеоклип AviSynth+. Оба используют libavcodec для декодирования, но различаются демультиплексором и механизмом индекса. В LSMASHVideoSource параметр track=0 означает первый обнаруженный видеотрек. В LWLibavVideoSource stream_index=-1 автоматически выбирает видеопоток с наибольшим разрешением. Для файлов с обложкой, несколькими ракурсами или служебными дорожками это различие важно: автоматический выбор удобен, но при неоднозначном контейнере лучше фиксировать нужный поток явно.

Параметр threads=0 оставляет число потоков декодирования на автоматике; документация ограничивает автоматический выбор максимумом 16 потоков. seek_mode управляет стратегией позиционирования, а seek_threshold задаёт порог прямого продвижения перед более дорогим seek. format позволяет принудительно выбрать формат пикселей — от распространённых YUV 4:2:0/4:2:2/4:4:4 разной битности до RGB, GBR и вариантов с альфа-каналом. Принудительный format нужен не всегда: лишняя конверсия до фильтров может усложнить цепочку и изменить требования к памяти.

Аудиоисточники и синхронизация

Для AviSynth+ доступны LSMASHAudioSource и LWLibavAudioSource. Они возвращают звук из выбранного трека или потока, поддерживают переопределение channel layout, частоты дискретизации и предпочтительного декодера. skip_priming в LSMASHAudioSource управляет начальными priming samples, которые встречаются у некоторых кодеков и важны для точной длины аудиодорожки.

LWLibavAudioSource умеет учитывать индекс и параметр av_sync. Когда он активирован, аудио выравнивается относительно первого активного видеокадра, записанного в индексе. Отдельная рекомендация документации касается совместного чтения видео и аудио из одного файла: аудиоисточник следует создать раньше видеоисточника. В таком порядке индекс подготавливается один раз и затем используется видеочастью, а обратный порядок способен привести к повторному сканированию.

Аудио в VapourSynth

Релиз 1310 добавил полноценные аудиоисточники VapourSynth: lsmas.LibavSMASHAudioSource и lsmas.LWLibavAudioSource. Для второго доступны индекс .lwi, выбор потока, ресемплинг, channel layout, A/V sync и fill_agaps. Последний параметр предназначен не для обычного файла без ошибок таймлайна, а для случаев, когда в последовательности аудиопакетов есть пропуски: фильтр вставляет цифровую тишину и сохраняет временную непрерывность вместо искусственного сжатия шкалы времени.

Индекс .lwi и точный доступ

Индекс — одна из причин выбирать LWLibav-путь. При первом анализе L-SMASH Works собирает сведения о пакетах, кадрах и временных метках и записывает их в .lwi. Повторное открытие может использовать готовые данные и не повторять полный анализ. Это особенно заметно в длинных файлах и скриптах, где хост неоднократно обращается к несоседним кадрам.

Индекс привязан к исходнику и настройкам индексации. После замены исходного файла под тем же именем или изменения режима rap_verification старый .lwi не следует считать нейтральным кэшем: его нужно пересоздать, иначе источник и индекс могут описывать разные структуры. cachedir позволяет вынести такие файлы в отдельный каталог; при этом имя строится с учётом полного пути, чтобы одноимённые исходники из разных папок не конфликтовали.

Позиционирование и seek

seek_mode задаёт компромисс между осторожностью и скоростью. Нормальный режим повторяет попытку, если декодирование не пришло к нужной точке. Unsafe и Aggressive уменьшают объём проверок и используют более агрессивное позиционирование, повышая требования к корректности структуры и индекса. Для монтажа, фильтрации с произвольным обращением к кадрам и кадрового анализа базовый режим безопаснее, потому что главная ценность source-плагина — именно адресный доступ.

Перевод переменной частоты кадров в постоянную

fpsnum и fpsden задают принудительную частоту кадров. Когда она отличается от исходного VFR-тайминга, L-SMASH Works формирует CFR-последовательность за счёт повторения или пропуска кадров. Это не «исправление» исходного видео и не интерполяция движения: содержимое подгоняется к новой временной сетке. Поэтому менять частоту стоит только тогда, когда следующий этап действительно требует CFR.

Параметр VFR to CFR в старом диалоге L-SMASH Works File Reader
Старое окно File Reader показывает отдельный блок VFR→CFR. Состав диалога менялся между ревизиями, но сама модель принудительной временной сетки сохранилась.

Декодер и аппаратное ускорение

decoder задаёт приоритет кандидатов декодера, а prefer_hw переключает тип аппаратного пути. Значение 0 оставляет программное декодирование. Отдельные значения выбирают NVIDIA CUVID, Intel QSV, DXVA2, D3D11, D3D12 или Vulkan; режим 3 пробует несколько аппаратных механизмов по очереди и в конце откатывается на программный декодер. Такая схема удобна для эксперимента с поддерживаемым кодеком, но не отменяет ограничений драйвера, видеокарты и конкретного профиля.

Аппаратное декодирование не нужно воспринимать как автоматическое улучшение результата. Оно меняет путь получения кадров, а доступность определяется форматом, битностью, профилем и архитектурой сборки. В частности, актуальный x86-пакет не включает Vulkan. Для воспроизводимой диагностики программный режим остаётся полезной точкой сравнения.

Логи FFmpeg и дополнительные опции

ff_loglevel регулирует детализацию сообщений FFmpeg, а ff_options передаёт дополнительные пары параметров декодеру. Это технические инструменты для совместимости и диагностики нестандартных потоков, а не обычные настройки качества. Повышение уровня логов помогает увидеть, какой декодер выбран и на каком этапе возникает ошибка, но не исправляет повреждённый контейнер само по себе.

Задача → инструмент → результат → что проверить

Задача Инструмент Результат Что проверить
Открыть распространённый контейнер в AviSynth+ LWLibavVideoSource Видеоклип с адресным доступом к кадрам Выбран правильный stream_index, индекс создан и кадры доступны при seek
Открыть MP4/MOV через L-SMASH LSMASHVideoSource Декодированный видеотрек без .lwi-пути track указывает на нужный видеотрек и контейнер корректно разбирается L-SMASH
Получить звук в AviSynth+ LWLibavAudioSource или LSMASHAudioSource Аудиоклип с выбранной раскладкой и частотой Нет смещения старта, выбран нужный поток, длительность согласована с видео
Получить видео в VapourSynth lsmas.LWLibavSource VideoNode для дальнейших фильтров Функция зарегистрирована в хосте, индекс соответствует исходнику
Получить звук в VapourSynth lsmas.LWLibavAudioSource AudioNode с индексом, синхронизацией и обработкой пропусков Используется релиз с аудиофункциями, параметры av_sync/fill_agaps включены только по необходимости
Сделать CFR-последовательность fpsnum и fpsden Клип с фиксированной временной сеткой Итоговая длительность и число кадров соответствуют цели, повтор/пропуск кадров приемлем
Снизить повторный анализ длинного файла .lwi, cache, cachedir Повторное открытие использует готовый индекс Индекс не устарел и записывается в доступный каталог
Попробовать GPU-декодирование prefer_hw и decoder Декодирование через поддерживаемый аппаратный backend Нет ошибок драйвера и расхождений формата; программный режим остаётся рабочим резервом

Карта форматов и совместимости

У L-SMASH Works нет единого короткого списка «поддерживаемых расширений», который одинаково описывал бы обе ветки чтения. Реальная совместимость складывается из демультиплексора и декодера. L-SMASH-путь естественно ориентирован на ISO Base Media/QuickTime-производные контейнеры, а LWLibav-путь наследует более широкий набор демультиплексоров libavformat. Кодеки внутри контейнера затем декодируются libavcodec.

Уровень Что принимает или выдаёт Редактируемость Потери и ограничения Переносимость
LSMASHVideoSource / LibavSMASHSource Контейнеры, которые разбирает L-SMASH; типичный сценарий — MP4/MOV-семейство Исходник не меняется; хост получает декодированные кадры Не является универсальным демультиплексором для всех контейнеров Скрипт переносим только вместе с совместимым хостом и плагином
LWLibavVideoSource / LWLibavSource Контейнеры, поддерживаемые libavformat и конкретной сборкой FFmpeg Исходник не меняется; доступ к кадрам строится через индекс Первое открытие требует анализа; повреждённый или необычный файл может индексироваться с ошибкой .lwi — служебный индекс, а не самостоятельный медиарезультат
Аудиоисточники Аудиопотоки, для которых в сборке доступен декодер libavcodec Хост получает сэмплы и может менять layout/rate Ресемплинг и перестройка каналов меняют представление аудио, а не исходный файл Сохранение готового звука выполняет хост или отдельный энкодер
format для видео YUV, YUVA, RGB, GBR и другие документированные pixel formats разных битностей Меняется формат кадров, отданных фильтрам Принудительное преобразование может добавить ненужный этап и требования к памяти Дальнейшая совместимость зависит от фильтров хоста
fpsnum/fpsden Временная сетка CFR Скрипт хранит правило преобразования, исходник остаётся прежним Кадры могут повторяться или пропускаться Фактический медиофайл появится только после кодирования в другой программе

Входной модуль AviUtl2 показывает расширения как часть ассоциации File Reader, но расширение само по себе не гарантирует успешное декодирование: контейнер может содержать поток, для которого нет подходящего декодера или аппаратного пути. И наоборот, один и тот же кодек встречается в разных контейнерах, поэтому диагностику нужно вести по связке контейнер → поток → декодер, а не только по имени файла.

Параметр Sampling rate в старом окне L-SMASH Works File Reader
Аудиоблок старого File Reader иллюстрирует отдельное управление Sampling rate; в современных source-функциях ту же роль выполняет параметр rate.

Производительность и системные требования

L-SMASH Works не публикует универсальный минимальный процессор или объём оперативной памяти, потому что нагрузка определяется кодеком, разрешением, битностью, фильтрами и хостом. Практически значимы три требования: совместимая разрядность хоста и DLL, рабочая версия AviSynth+/VapourSynth/AviUtl2 и достаточные ресурсы для декодирования конкретного медиа. 8K HEVC, например, предъявляет иные требования, чем SD MPEG-2, даже если оба файла открываются одной функцией.

Производительность управляется механизмами, а не обещанной цифрой. threads=0 отдаёт выбор числа потоков декодеру, индекс сокращает повторный анализ, seek_threshold уменьшает лишнее repositioning при коротком продвижении, а аппаратные backend могут перенести часть декодирования на GPU. При этом документация прямо отделяет L-SMASH-путь от LWLibav и предупреждает, что первый обычно менее выгоден для обработки, когда нужен не только предварительный просмотр.

Индекс занимает дополнительное место на диске. Сам .lwi заметно меньше исходного видео, но при большом архиве служебных файлов становится много. cachedir помогает собрать их в одном месте и не засорять каталоги исходников. Это также упрощает обслуживание: после смены исходников можно чистить индексный каталог независимо от медиатеки.

Разрядность критична для загрузки DLL: 32-битный процесс не загрузит 64-битный бинарный модуль и наоборот. Отдельно стоит помнить о Vulkan: в актуальном x86-релизе он отсутствует, поэтому такой режим нельзя получить одной сменой prefer_hw внутри 32-битного хоста.

Безопасность, приватность и зависимость от интернета

При обычной работе L-SMASH Works читает локальный файл и передаёт данные локальному хосту. Регистрация, облачный проект и отправка медиаданных на сервер для декодирования не нужны. Для материала, который нельзя загружать в сторонние веб-сервисы, это принципиально отличается от онлайн-конвертеров: исходник остаётся в локальном пайплайне.

Локальная работа не означает отсутствия технического риска. Плагин разбирает недоверенные контейнеры и запускает код демультиплексоров и декодеров FFmpeg/L-SMASH внутри процесса хоста. Поэтому для файлов неизвестного происхождения разумнее использовать актуальную сборку, а не старый архив из случайного зеркала. Обновления L-SMASH Works регулярно включают новые ревизии зависимостей и исправления конкретных ошибок декодирования и индексации.

Приватность также определяется окружением. Сам source-фильтр не требует аккаунта, но хост, пакет фильтров или сторонняя сборка могут иметь собственные правила. Если медиаматериал чувствительный, безопаснее получать бинарники из актуального репозитория проекта и хранить .lwi в контролируемом локальном каталоге. Индекс не заменяет видео, но содержит структурные сведения о нём и остаётся побочным файлом до удаления.

Цена и лицензирование

L-SMASH Works распространяется бесплатно как проект с открытым исходным кодом. У него нет разделения на Free и Pro, платной подписки, лимита длительности, водяного знака, обязательной регистрации или пробного периода. Ограничения определяются совместимостью плагина, форматами, хостом и выбранными библиотеками, а не тарифом.

При обычном личном использовании это означает нулевую цену самого source-плагина. Для разработчиков и тех, кто перераспространяет бинарные сборки, важнее лицензии компонентов: исходные части проекта содержат разрешительные лицензии, но готовые пакеты связываются с библиотеками FFmpeg и другими зависимостями, у которых есть собственные условия LGPL/GPL и уведомления. Поэтому бинарный архив следует рассматривать вместе с прилагаемыми license-файлами, а не сводить весь комплект к одной короткой лицензии.

Что перестанет работать первым

Несовместимая разрядность. Самый прямой отказ — хост не загрузит DLL другой архитектуры. В такой ситуации не появится функция в скрипте или File Reader в списке плагинов, и такая ошибка сама по себе не свидетельствует о неисправности медиофайла.

Несовместимый API хоста. Активная ветка перешла на современную поддержку VapourSynth API v4 и добавила AviUtl2. Старая версия хоста или устаревший бинарный модуль способны не совпасть по ABI. Это проблема слоя интеграции, а не контейнера.

Устаревший индекс. LWLibav-путь зависит от соответствия .lwi исходному файлу. Если содержимое под тем же именем изменилось, seek и временные метки перестают быть надёжными до пересоздания индекса.

Недоступный аппаратный backend. prefer_hw не создаёт поддержку, которой нет у драйвера или сборки. На x86 отсутствует Vulkan, а конкретный GPU может не поддерживать профиль кодека. В таком случае рабочим резервом остаётся программное декодирование.

Неподдерживаемый контейнер или поток. L-SMASH и libavformat имеют разный охват, а кодек должен дополнительно поддерживаться libavcodec. Файл с привычным расширением способен не открыться из-за содержимого, а не из-за самого суффикса имени.

Права на запись. Если включён кэш, но каталог исходника или cachedir недоступен для записи, индекс не сможет сохраняться. Тогда исчезает одно из главных преимуществ LWLibav — повторное использование анализа.

Матрица сохранности результата

Действие Что сохраняется Что теряется или меняется Обратимость Открытие в другом ПО
Создание .lwi Исходный медиафайл остаётся без изменений; рядом или в cachedir появляется индекс Ничего в исходнике не переписывается Полностью обратимо удалением индекса .lwi полезен L-SMASH Works, но не является универсальным медиоформатом
Принудительный format Исходник и его кодек не меняются Внутри текущего скрипта кадры имеют другой pixel format Обратимо удалением параметра Другой хост увидит исходный файл, а не преобразованный поток, пока результат не закодирован
VFR→CFR через fpsnum/fpsden Исходный VFR-файл сохраняется В скрипте меняется временная сетка, возможны повторы или пропуски кадров Обратимо возвратом к исходной частоте Сохранённый скрипт требует L-SMASH Works; готовый файл зависит от последующего энкодера
Ресемплинг rate Исходная аудиодорожка остаётся нетронутой Сэмплы, отданные хосту, имеют заданную частоту Обратимо удалением переопределения Другие программы не увидят изменение без отдельного экспорта
fill_agaps Таймлайн аудио сохраняет длительность и позиции пакетов Разрывы заменяются цифровой тишиной в выходе фильтра Обратимо отключением параметра и пересозданием цепочки Сам исходник остаётся прежним; изменение существует только в обработанном потоке
Выбор другого stream_index Контейнер и все его дорожки остаются на месте Хост получает другой поток Полностью обратимо сменой номера Номер потока имеет смысл только в контексте конкретного контейнера

Как пользоваться программой — советы гика

Рабочая последовательность зависит от хоста, но принцип одинаков: подключить подходящий бинарный модуль, выбрать source-функцию, явно задать нестандартные параметры только там, где они нужны, проверить кадры и звук, а затем сохранить скрипт или продолжить обработку в AviUtl2. L-SMASH Works не создаёт финальный MP4/MKV сам по себе, поэтому последним шагом его части пайплайна считается корректно открытый источник, который можно передать фильтрам и энкодеру.

Установить актуальный модуль под разрядность хоста

Цель. Добиться того, чтобы AviSynth+, VapourSynth или AviUtl2 увидел L-SMASH Works и зарегистрировал его функции или File Reader.

Подготовка. Определите разрядность запущенного хоста и возьмите соответствующий x86 или x64 архив актуальной ветки. Для Vulkan нужен x64-вариант, поскольку актуальная x86-сборка выпускается без этой поддержки. Перед заменой старого плагина закройте хост, чтобы DLL не оставалась загруженной процессом.

  1. Распакуйте релизный архив в отдельную папку и выберите файлы для своего хоста.
  2. Для AviSynth+ поместите LSMASHSource.dll в каталог автозагрузки плагинов, который используется вашей установкой AviSynth+.
  3. Для VapourSynth установите LSMASHSource.dll в каталог плагинов VapourSynth либо загрузите его способом, который предусмотрен конфигурацией хоста.
  4. Для AviUtl2 поместите входной модуль в C:\ProgramData\aviutl2\Plugin и убедитесь, что файл называется lwinput.aui2.
  5. Запустите хост заново. В AviUtl2 откройте 設定 → 入力プラグインの設定 и найдите L-SMASH Works File Reader for AviUtl2. В скриптовом хосте проверьте регистрацию одной из source-функций коротким тестовым скриптом.

Важные параметры. На этом этапе параметров декодирования ещё нет; критичны архитектура DLL, правильный хост и имя lwinput.aui2 для AviUtl2.

Проверка результата. AviUtl2 показывает File Reader в списке, а AviSynth+/VapourSynth перестаёт сообщать о неизвестной функции L-SMASH Works.

Типичная ошибка. Плагин отсутствует в хосте при физически скопированном файле. Чаще всего это несоответствие x86/x64, неподходящая версия API или неправильная папка.

Безопасный откат. Закройте хост, удалите новые файлы и верните предыдущий комплект плагина из резервной папки. Исходные медиа и .lwi при таком откате не изменяются.

Открыть видео через LWLibavVideoSource в AviSynth+

Цель. Получить видеоклип с индексом и точным доступом к кадрам для дальнейшей фильтрации в AviSynth+.

Подготовка. Плагин должен быть загружен AviSynth+, а исходный файл доступен на чтение. Для первого знакомства не задавайте аппаратный декодер, принудительную частоту кадров и format.

  1. Создайте текстовый файл с расширением .avs.
  2. Добавьте строку LWLibavVideoSource(«D:\Video\input.mkv»).
  3. Сохраните .avs в UTF-8, особенно если путь содержит нелатинские символы.
  4. Откройте скрипт в совместимом просмотрщике или редакторе AviSynth+.
  5. Дождитесь завершения первичной индексации. По умолчанию рядом с исходником используется файл input.mkv.lwi, если не задан другой cachefile или cachedir.

Важные параметры. stream_index=-1 выбирает видеопоток с наибольшим разрешением, cache=true разрешает индекс, threads=0 оставляет число потоков на автоматике. seek_mode=0 — базовый режим позиционирования.

Проверка результата. Скрипт показывает ожидаемое видео, переход к произвольным кадрам не меняет их содержимое, а повторное открытие использует существующий .lwi.

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

Безопасный откат. Верните stream_index=-1 и базовые значения, удалите созданный .lwi при подозрении на повреждённый индекс и откройте скрипт заново. Исходный медиофайл не переписывается.

Открыть MP4/MOV через L-SMASH-путь

Цель. Использовать L-SMASH как демультиплексор для совместимого контейнера семейства ISO Base Media/QuickTime без LWLibav-индекса.

Подготовка. Этот путь выбирайте для файла, который корректно разбирается L-SMASH. Для произвольных контейнеров и обработки с интенсивным seek основной альтернативой остаётся LWLibav.

  1. В AviSynth+ создайте видео строкой video = LSMASHVideoSource(«D:\Video\input.mp4», track=0).
  2. Для звука добавьте audio = LSMASHAudioSource(«D:\Video\input.mp4», track=0) и объедините его с видео через AudioDub(video, audio).
  3. Если автоматический track=0 выбрал не ту дорожку, укажите номер требуемого трека явно.
  4. В VapourSynth для видео используйте core.lsmas.LibavSMASHSource(source=»D:/Video/input.mp4″). В релизе 1310 для звука доступен core.lsmas.LibavSMASHAudioSource(source=»D:/Video/input.mp4″).
  5. Проверьте начало и несколько удалённых точек клипа до добавления фильтров.

Важные параметры. skip_priming у аудио управляет начальными priming samples, track выбирает дорожку, а fpsnum/fpsden и format работают по той же логике принудительного тайминга и формата кадров, что и в других video source.

Проверка результата. Нужные video/audio tracks декодируются без .lwi, длительность соответствует контейнеру, а хост получает ожидаемые кадры и звук.

Типичная ошибка. L-SMASH-путь применяют к контейнеру, для которого его демультиплексор не предназначен, и трактуют отказ как отсутствие кодека.

Безопасный откат. Замените LSMASHVideoSource/LibavSMASHSource на соответствующий LWLibav source и верните автоматический выбор потока. Исходный файл остаётся неизменным.

Открыть видео и звук одним индексом в AviSynth+

Цель. Получить синхронный видеоклип с аудио, не заставляя L-SMASH Works дважды анализировать один и тот же файл.

Подготовка. Используйте LWLibavAudioSource и LWLibavVideoSource с одним source. Документация проекта рекомендует создавать аудио раньше видео.

  1. В .avs первой строкой создайте аудио: audio = LWLibavAudioSource(«D:\Video\input.mkv»).
  2. Следующей строкой создайте видео: video = LWLibavVideoSource(«D:\Video\input.mkv»).
  3. Объедините дорожки: AudioDub(video, audio).
  4. Если контейнер содержит несколько аудиопотоков, задайте stream_index у аудио явно.
  5. Сохраните скрипт в UTF-8 и откройте его в хосте.

Важные параметры. av_sync в LWLibavAudioSource включается, когда требуется выравнивание начала звука по первому активному видеокадру индекса. rate=0 сохраняет исходную частоту дискретизации, а layout=»» оставляет исходную раскладку каналов.

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

Типичная ошибка. Видео создаётся раньше аудио, и скрипт тратит лишнее время на повторное сканирование. Другой частый случай — автоматически выбран не тот аудиопоток.

Безопасный откат. Оставьте только видеостроку, чтобы отделить аудиопроблему от видеодекодирования, затем верните аудио с явным stream_index. Это не затрагивает контейнер.

Открыть видео через lsmas.LWLibavSource в VapourSynth

Цель. Получить VideoNode VapourSynth через libavformat и индекс L-SMASH Works.

Подготовка. Нужны актуальный VapourSynth и сборка L-SMASH Works, совместимая с его API. Имя пространства плагина — lsmas.

  1. Создайте файл .vpy и импортируйте vapoursynth.
  2. Получите объект core штатным способом вашей версии VapourSynth.
  3. Создайте источник вызовом core.lsmas.LWLibavSource(source=»D:/Video/input.mkv»).
  4. Для контейнера с несколькими видеопотоками добавьте stream_index с нужным номером.
  5. Передайте полученный VideoNode следующим фильтрам или в механизм вывода используемого фронтенда.

Важные параметры. cache=1 включает индекс, cachedir переносит его в отдельный каталог, threads=0 оставляет автоматический выбор потоков, repeat управляет применением repeat flags, dominance задаёт трактовку порядка полей.

Проверка результата. Фронтенд VapourSynth получает клип, может читать произвольные кадры, а при повторном запуске использует готовый индекс.

Типичная ошибка. core.lsmas отсутствует. Это указывает не на проблему файла, а на то, что DLL не загрузилась, несовместима с API или размещена не в том каталоге.

Безопасный откат. Уберите дополнительные аргументы, оставив только source, и временно верните программное декодирование. Если функция всё равно не существует, восстановите рабочую версию плагина.

Подключить аудио в VapourSynth 1310 и обработать реальные пропуски

Цель. Получить аудио из того же контейнера и при необходимости сохранить таймлайн при отсутствующих пакетах.

Подготовка. Аудиоисточники VapourSynth появились в релизе 1310, поэтому более старая сборка не подходит для этого раздела.

  1. Создайте аудио вызовом core.lsmas.LWLibavAudioSource(source=»D:/Video/input.mkv»).
  2. При нескольких дорожках задайте stream_index явно.
  3. Оставьте rate=0 и layout=»», если нет задачи пересэмплировать звук или изменить схему каналов.
  4. Включите av_sync=1 только при необходимости учесть контейнерное смещение старта аудио относительно видео.
  5. Включите fill_agaps=1 только для источника, где подтверждены пропуски аудиопакетов и требуется заполнить интервалы цифровой тишиной.

Важные параметры. fill_agaps не восстанавливает потерянный звук, а сохраняет временную позицию оставшихся пакетов. drc_scale управляет применением Dynamic Range Compression там, где декодер поддерживает DRC.

Проверка результата. Длина и временное положение аудио не схлопываются в месте разрыва; при обычном исправном файле отключение fill_agaps не должно менять структуру без причины.

Типичная ошибка. Пользователь ищет аудиофункцию в сборке до 1310 или включает fill_agaps как универсальный «улучшатель» звука.

Безопасный откат. Верните fill_agaps=0 и av_sync=0, затем сравните временные метки. Исходная дорожка остаётся неизменной при любом значении этих аргументов.

Выбрать конкретный видеотрек или аудиопоток

Цель. Исключить автоматический выбор неверной дорожки в контейнере с несколькими потоками.

Подготовка. Сначала определите, используете ли L-SMASH-путь или LWLibav. В первом случае применяется track, во втором — stream_index.

  1. Для LSMASHVideoSource или LSMASHAudioSource задайте track с номером нужного трека; значение 0 оставляет автоматический выбор первого подходящего.
  2. Для LWLibavVideoSource, LWLibavAudioSource и VapourSynth LWLibav-функций задайте stream_index.
  3. Не переносите номер track напрямую в stream_index: это разные системы нумерации, связанные с разными демультиплексорами.
  4. Откройте короткий участок и сопоставьте изображение, язык дорожки и число каналов с ожидаемым содержимым.

Важные параметры. У LWLibavVideoSource значение -1 выбирает видеопоток с наибольшим разрешением; у аудио автоматический выбор ориентирован на подходящий аудиопоток. Явный номер надёжнее, когда контейнер неоднозначен.

Проверка результата. Появляется нужный ракурс или видеоряд, а звук соответствует требуемой языковой/канальной дорожке.

Типичная ошибка. Номер взят из другой утилиты без учёта того, как конкретный демультиплексор нумерует потоки.

Безопасный откат. Верните автоматическое значение 0 или -1 и снова отделите видео от аудио, чтобы определить, какая часть выбрана неправильно.

Преобразовать VFR в заданный CFR

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

Подготовка. Определите целевую дробь частоты, например 30000/1001 для приблизительно 29,97 кадра/с. Преобразование имеет смысл только при понятной причине, поскольку оно изменяет представление времени в скрипте.

  1. Откройте исходник без принудительной частоты и зафиксируйте его длительность и поведение тайминга.
  2. В source-функции задайте fpsnum=30000 и fpsden=1001 либо другую требуемую дробь.
  3. Перезагрузите скрипт.
  4. Проверьте начало, середину и конец клипа, а также участок с заметным движением.
  5. Сопоставьте длительность со звуком перед дальнейшим кодированием.

Важные параметры. fpsnum/fpsden не создают новые промежуточные изображения. Для попадания на CFR-сетку исходные кадры повторяются или отбрасываются.

Проверка результата. Хост сообщает фиксированную частоту кадров, длительность остаётся ожидаемой, а звук не приобретает систематическое рассогласование.

Типичная ошибка. CFR включают для уже подходящего источника и затем считают изменившееся число кадров повреждением. Это следствие самой операции временного преобразования.

Безопасный откат. Удалите fpsnum/fpsden или верните нефорсированный режим. Исходник не был изменён, поэтому восстановление мгновенное.

Управлять .lwi и вынести индексы в отдельный каталог

Цель. Сохранить преимущества индексации и не разбрасывать служебные файлы рядом с медиатекой.

Подготовка. Создайте локальный каталог с правами записи, например D:\LSMASH-Cache, и убедитесь, что на диске достаточно места для индексов всего рабочего набора.

  1. Оставьте cache=true или cache=1.
  2. Задайте cachedir=»D:\LSMASH-Cache» в AviSynth+ либо соответствующую строку пути в VapourSynth.
  3. Откройте исходник и дождитесь построения индекса.
  4. Закройте и повторно откройте скрипт, чтобы убедиться, что индекс используется повторно.
  5. После замены исходного файла под тем же именем удалите относящийся к нему .lwi и разрешите L-SMASH Works построить новый.
  6. При переключении rap_verification также пересоздайте индекс, поскольку документация требует удалить прежний .lwi.

Важные параметры. cachefile задаёт конкретный файл индекса, cachedir — общий каталог. Централизованный cachedir кодирует полный путь исходника в имени, уменьшая риск столкновения одноимённых файлов.

Проверка результата. После первого анализа повторное открытие не создаёт новый индекс, а .lwi находится в выбранном каталоге.

Типичная ошибка. Кэш вынесен в каталог без прав записи или пользователь копирует старый .lwi вместе с заменённым исходником.

Безопасный откат. Уберите cachedir и вернитесь к стандартному cachefile рядом с source. Удаление .lwi безопасно: он будет построен заново.

Выбрать декодер и аппаратный режим

Цель. Проверить совместимый аппаратный backend либо зафиксировать конкретный декодер, не превращая настройку в источник нестабильности.

Подготовка. Начните с prefer_hw=0. Сначала убедитесь, что файл корректно декодируется программно; это создаёт контрольную точку для сравнения.

  1. Откройте источник в программном режиме и проверьте несколько несоседних кадров.
  2. Для конкретной технологии задайте prefer_hw: 1 для CUVID, 2 для QSV, 4 для DXVA2, 5 для D3D11, 6 для D3D12 или 7 для Vulkan.
  3. Для автоматической последовательности аппаратных вариантов с программным резервом используйте prefer_hw=3.
  4. Если требуется приоритет конкретного декодера, задайте decoder списком кандидатов через запятую.
  5. Перезагрузите скрипт и проверьте те же участки, при необходимости повысив ff_loglevel для диагностических сообщений.

Важные параметры. x86-сборка 1310 не имеет Vulkan. Наличие пункта prefer_hw не гарантирует поддержку конкретным GPU или кодеком.

Проверка результата. Источник открывается без новых декодерных ошибок, seek остаётся точным, формат кадров подходит следующему фильтру.

Типичная ошибка. После выбора GPU-пути появляется ошибка и делается вывод, что повреждён файл. Если программный режим работает, причина находится в аппаратной совместимости или драйвере.

Безопасный откат. Верните prefer_hw=0 и удалите принудительный decoder. Это базовый программный путь без зависимости от аппаратного backend.

Настроить File Reader в AviUtl2

Цель. Управлять теми же механизмами через графический интерфейс без ручного source-скрипта.

Подготовка. lwinput.aui2 должен быть установлен и виден как L-SMASH Works File Reader for AviUtl2.

  1. Откройте 設定 → 入力プラグインの設定.
  2. Найдите L-SMASH Works File Reader for AviUtl2.
  3. Откройте его настройки через контекстное действие плагина.
  4. Не меняйте весь диалог сразу. Для широкого libavformat-чтения используйте LW-Libav; параметры Seek mode и Forward threshold оставьте базовыми до появления конкретной проблемы.
  5. Включайте VFR→CFR только при необходимости фиксированной частоты, а Sampling rate и Channel layout — только когда хост должен получить заранее нормализованный звук.
  6. Для повторной работы с длинными файлами оставьте Create Index file и при необходимости укажите Cache directory path.
  7. Preferred decoders меняйте после того, как источник успешно открылся с базовой конфигурацией.
  8. Подтвердите окно кнопкой OK и заново откройте тестовый файл.

Важные параметры. В диалоге объединены функции чтения, seek, тайминга, аудио, индекса и декодера. Их эффект аналогичен аргументам скриптовых source-функций, но названия и доступный набор полей зависят от ревизии.

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

Типичная ошибка. Пользователь меняет одновременно приоритет reader, VFR→CFR, аудио и декодер и после сбоя не может определить причину.

Безопасный откат. Закройте диалог без сохранения либо верните изменённые пункты к исходным значениям по одному. Медиафайл не меняется.

Сквозной сценарий: от исходного файла до сохранённого скрипта

Цель. Получить воспроизводимый AviSynth+-источник с видео и звуком, который можно открыть позже или передать энкодеру без изменения оригинала.

Подготовка. Пусть исходник называется D:\Project\input.mkv, а L-SMASH Works уже загружен в AviSynth+.

  1. Создайте D:\Project\input.avs.
  2. Первой строкой добавьте audio = LWLibavAudioSource(«D:\Project\input.mkv»).
  3. Второй строкой добавьте video = LWLibavVideoSource(«D:\Project\input.mkv»).
  4. Третьей строкой добавьте AudioDub(video, audio).
  5. Сохраните input.avs в UTF-8.
  6. Откройте скрипт в совместимом просмотрщике, проверьте начало, середину и конец, наличие звука и корректный переход к несоседним кадрам.
  7. Если проверка успешна, закройте просмотрщик и откройте input.avs уже в том приложении или энкодере, который будет выполнять фильтрацию и финальное кодирование.
  8. Не удаляйте .lwi до завершения работы, если хотите сохранить быстрый повторный доступ.

Важные параметры. В базовом сценарии не форсируются FPS, pixel format и аппаратный декодер. Это сохраняет минимальное число вмешательств между исходником и фильтрами.

Проверка результата. Повторное открытие input.avs даёт тот же видеоряд и звук, а индекс используется повторно. Сам input.mkv остаётся неизменным.

Типичная ошибка. Скрипт воспринимают как готовый экспортируемый ролик. .avs описывает источник и обработку; медиофайл создаёт следующий инструмент цепочки.

Безопасный откат. Сохраните резервную копию .avs перед добавлением фильтров. Если последующие операции ломают цепочку, вернитесь к трём базовым строкам source + AudioDub и пересоздайте только служебный индекс при необходимости.

Плюсы

  • Два демультиплексирующих пути. L-SMASH подходит для своей области контейнеров, а LWLibav через libavformat расширяет охват и добавляет индексированное чтение.
  • Кадровый доступ через .lwi. Индекс ускоряет повторное открытие и делает LWLibav удобным для фильтров, которые обращаются к несоседним кадрам.
  • Отдельное управление видео и аудио. Можно явно выбирать потоки, частоту дискретизации, channel layout, синхронизацию и с релиза 1310 — аудио в VapourSynth.
  • Управляемый тайминг. VFR можно оставить исходным либо привести к заданной CFR-сетке через fpsnum/fpsden.
  • Современные аппаратные backend. Активная ветка поддерживает CUVID, QSV, DXVA2, D3D11, D3D12 и Vulkan в совместимых сборках.
  • Локальная работа без аккаунта. Исходники не требуется отправлять в облако для обычного декодирования.
  • Актуальная поддержка нескольких хостов. Современные релизы охватывают AviSynth+, VapourSynth и AviUtl2, а не только исторический AviUtl.
  • Нет коммерческих лимитов. Плагин не ограничивает длительность или число файлов тарифом и не добавляет водяной знак.

Минусы

  • Это не самостоятельное приложение. Без AviSynth+, VapourSynth или AviUtl2 L-SMASH Works не даёт привычного рабочего окружения.
  • Высокий порог освоения скриптовой части. Пользователю приходится понимать потоки контейнера, индексы, тайминг и параметры декодера.
  • Первое индексирование требует времени. LWLibav должен проанализировать файл до того, как повторное чтение станет быстрым.
  • Служебные .lwi нужно обслуживать. После замены исходника или изменения некоторых настроек старый индекс требуется пересоздать.
  • Аппаратное ускорение зависит от внешней совместимости. Доступность backend определяется архитектурой сборки, драйвером, GPU и кодеком; x86 не включает Vulkan.
  • Нет встроенного финального экспорта. Кодирование результата выполняет хост или отдельный энкодер.
  • Старые руководства быстро устаревают. Набор функций и интеграция заметно изменились: например, AviUtl2 и аудио VapourSynth появились только в свежих релизах.

Кому подойдёт

  • пользователям AviSynth+, которым нужен индексированный source-фильтр с широким libavformat-чтением;
  • пользователям VapourSynth, которым требуется доступ к видео, а в актуальной ветке — и к аудио через один проект L-SMASH Works;
  • пользователям AviUtl2, которым нужен современный File Reader с настройками seek, VFR→CFR, индекса и декодеров;
  • тем, кто строит воспроизводимые локальные медиапайплайны и предпочитает хранить параметры открытия в скрипте;
  • сценариям с произвольным кадровым доступом, где индекс и корректное позиционирование важнее мгновенного первого запуска.

Кому не подойдёт

  • тем, кому нужен готовый GUI-редактор с таймлайном, титрами, эффектами и встроенной кнопкой экспорта; для такой задачи уместнее сравнить ПО для редактирования видео;
  • пользователям, которые не работают с AviSynth+, VapourSynth или AviUtl2 и не хотят добавлять такой хост в процесс;
  • тем, кому требуется мобильное приложение или браузерная обработка без локальной установки;
  • сценариям, где единственная цель — воспроизвести ролик: source-плагин не заменяет видеоплеер для Windows;
  • пользователям, которым критична простая кроссплатформенная установка готового бинарника на macOS/Linux: актуальные релизные пакеты L-SMASH Works ориентированы на Windows-хосты.

Сравнение с другими аналогами

Сравнивать L-SMASH Works корректнее не с монтажными редакторами, а с source-фильтрами, которые решают ту же задачу: открыть медиа, обеспечить позиционирование и передать кадры или звук скриптовому хосту. Ниже критерии одинаковы для всех вариантов.

Решение Задача Платформа Порог освоения Форматы Автоматизация Модель оплаты Ограничения Подходящий сценарий
L-SMASH Works Source/input для AviSynth+, VapourSynth и AviUtl2 Готовые актуальные сборки ориентированы на Windows; x86/x64 Средний или высокий: потоки, индексы и скриптовые аргументы L-SMASH для своей группы контейнеров; LWLibav наследует широкий demux-охват FFmpeg Высокая в скриптах; параметры открытия воспроизводимы Бесплатный открытый проект Нет собственного энкодера/таймлайна; .lwi требует актуальности; аппаратные backend зависят от системы Windows-пайплайн, где нужны AviUtl2 или одновременно AviSynth+/VapourSynth и контролируемая индексация
FFMS2 Frame/sample access через FFmpeg для AviSynth/VapourSynth Кроссплатформенный проект; официальные Windows-сборки также доступны Средний: требуется индекс и понимание source-функций Широкий набор контейнеров и кодеков через FFmpeg Высокая: индекс и скриптовые функции хорошо подходят пакетным цепочкам Открытый проект; лицензия исходников MIT, бинарники зависят от конфигурации FFmpeg В VapourSynth официальная документация FFMS2 не предоставляет аудиовыход; формат индекса свой Классический FFmpegSource-пайплайн и проекты, где уже используется экосистема FFMS2
BestSource Точное извлечение видео и аудио через FFmpeg с упором на seek Кроссплатформенный; проект заявляет Windows, macOS и POSIX/Unix-системы Средний: интерфейс source-плагина проще полной ручной работы с FFmpeg, но остаётся скриптовым Широкий охват FFmpeg Высокая в AviSynth+ и VapourSynth Бесплатный проект под MIT Не предназначен для AviUtl2; точность некоторых lossy-аудиоформатов имеет технические оговорки проекта Кроссплатформенный скриптовый пайплайн, особенно когда важны и видео, и аудио в одном современном source-проекте
DirectShowSource Открытие медиа в AviSynth через системный DirectShow Windows и AviSynth+ Низкий или средний, если в системе уже настроены DirectShow-фильтры Зависит от установленных системных splitter/decoder-фильтров Скриптовая, но воспроизводимость зависит от конфигурации Windows Часть бесплатного AviSynth+ Frame-accurate seek не гарантирован; результат зависит от DirectShow-графа и установленных фильтров Наследуемый Windows-процесс, где нужный формат уже стабильно открывается системными DirectShow-компонентами

DirectShowSource сильнее зависит от состояния системы, поэтому два компьютера способны построить разные графы для одного файла. Это обратная сторона подхода «использовать установленные кодеки». При разборе такого окружения полезно понимать, чем отличаются наборы кодеков для Windows от source-плагина с собственным комплектом библиотек. L-SMASH Works и FFMS2 уменьшают эту зависимость, потому что основная демультиплексирующая/декодирующая цепочка поставляется вместе с ними.

BestSource особенно интересен тем, кто не привязан к AviUtl2 и хочет кроссплатформенный source для современных AviSynth+/VapourSynth. FFMS2 остаётся зрелым вариантом с собственной индексной моделью. L-SMASH Works выделяется сочетанием L-SMASH и LWLibav, актуальной интеграцией AviUtl2 и единым проектом, где в релизе 1310 появились также аудиоисточники VapourSynth.

Типичные проблемы и диагностика

Хост сообщает, что функция L-SMASH Works не существует

Симптом. AviSynth+ или VapourSynth останавливает скрипт на вызове source-функции, либо namespace lsmas отсутствует.

Возможная причина. DLL не загрузилась из-за неправильной папки, несовпадающей разрядности или несовместимого API.

Диагностика. Сначала отделите загрузку плагина от медиофайла: ошибка «неизвестная функция» возникает до разбора контейнера. Сверьте x86/x64 хоста и модуля, затем наличие DLL в реальном каталоге плагинов.

Исправление. Замените бинарник на сборку той же архитектуры и актуального API, перезапустите процесс хоста.

Проверка результата. Функция регистрируется и ошибка смещается либо исчезает; после этого можно диагностировать уже сам файл.

В AviUtl2 виден неправильный или старый L-SMASH File Reader

Симптом. В списке входных модулей нет обозначения for AviUtl2, либо современный host не распознаёт reader как ожидается.

Возможная причина. Установлен старый lwinput.aui для прежнего AviUtl или файл современной сборки не переименован в lwinput.aui2.

Диагностика. Проверьте имя файла в C:\ProgramData\aviutl2\Plugin и строку, которую показывает список input plugins.

Исправление. Уберите устаревший модуль из каталога AviUtl2 и используйте актуальный reader с именем lwinput.aui2.

Проверка результата. В списке появляется L-SMASH Works File Reader for AviUtl2, а его диалог настроек открывается из самого AviUtl2.

.lwi пересоздаётся при каждом запуске

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

Возможная причина. Нет прав записи/чтения к cachefile, кэш отключён, индекс удаляет сторонняя очистка либо cachedir меняется между запусками.

Диагностика. Сверьте фактический путь .lwi, дату изменения и права пользователя. Проверьте, что source указывает на один и тот же файл и каталог.

Исправление. Выберите постоянный доступный cachedir и исключите его из автоматической очистки на время проекта.

Проверка результата. Дата .lwi не меняется без причины, а повторный запуск читает готовый индекс.

После замены исходника seek стал неверным

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

Возможная причина. Старый .lwi описывает предыдущую версию файла, которая имела то же имя.

Диагностика. Сопоставьте время изменения исходника и индекса. Если медиа новее .lwi или было заменено после создания индекса, соответствие нарушено.

Исправление. Удалите только относящийся к этому source индекс и разрешите L-SMASH Works построить его заново.

Проверка результата. Новый .lwi создаётся после анализа, а переходы по кадрам снова соответствуют содержимому.

Открывается не тот видеоряд или не та аудиодорожка

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

Возможная причина. Автоматический выбор track/stream_index не совпал с задачей контейнера с несколькими потоками.

Диагностика. Определите, какая source-ветка используется: L-SMASH работает с track, LWLibav — со stream_index. Не считайте эти номера взаимозаменяемыми.

Исправление. Задайте нужный номер потока явно в соответствующем параметре.

Проверка результата. Язык, изображение, разрешение и число аудиоканалов совпадают с требуемой дорожкой.

Путь с кириллицей ломает AviSynth-скрипт

Симптом. Файл существует, но source-функция сообщает об ошибке открытия пути с нелатинскими символами.

Возможная причина. .avs сохранён не в UTF-8 и строка пути передаётся в другой кодировке.

Диагностика. Скопируйте тот же файл во временный каталог с латинским именем. Если там он открывается, проблема связана с кодировкой пути, а не с кодеком.

Исправление. Сохраните .avs как UTF-8. Это основной рекомендованный способом проекта для Windows-путей с Unicode.

Проверка результата. Исходный путь с кириллицей открывается без переименования медиа.

Звук постепенно или скачком расходится с видео

Симптом. Начало совпадает, но после участка с пропущенными пакетами возникает сдвиг либо старт аудио имеет контейнерное смещение.

Возможная причина. В источнике есть реальный аудиопровал, неверно учтён старт дорожки или используется старая ревизия до исправлений обработки gap.

Диагностика. Разделите проблему старта и проблему внутри таймлайна. Для старта сопоставьте первое активное видео и первую аудиометку. Для внутреннего разрыва найдите точку, после которой смещение появляется сразу.

Исправление. Используйте актуальную ветку. В VapourSynth 1310 применяйте av_sync для контейнерного смещения и fill_agaps только при подтверждённых пропусках. В AviSynth+ актуальные релизы содержат отдельные исправления расчёта gap и синхронизации.

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

Transport Stream плохо позиционируется после обновления старой сборки

Симптом. На MPEG-TS появляются регрессии seek или ухудшается доступ к кадрам по сравнению с предыдущим рабочим релизом.

Возможная причина. В истории активной ветки была неудачная оптимизация seek для transport stream, которую позднее откатили.

Диагностика. Зафиксируйте номер используемого релиза и воспроизведите проблему на текущей сборке, не меняя остальные параметры.

Исправление. Перейдите на актуальный релиз, где регрессионное изменение уже отменено, и пересоздайте индекс проблемного TS.

Проверка результата. Seek возвращает ожидаемые кадры на нескольких удалённых точках файла и не повторяет старый сбой.

Аппаратное декодирование не запускается

Симптом. prefer_hw приводит к ошибке, чёрному кадру или отказу декодера, хотя программный режим открывает тот же файл.

Возможная причина. GPU, драйвер, профиль кодека или архитектура сборки не поддерживает выбранный backend. Для x86 отдельно исключён Vulkan.

Диагностика. Сравните с prefer_hw=0 и повысьте ff_loglevel. Если программный путь стабилен, контейнер и основной decoder способны работать, а проблема локализуется в аппаратной ветке.

Исправление. Верните программное декодирование или выберите другой поддерживаемый backend. Для Vulkan используйте x64-среду.

Проверка результата. Клип снова открывается, а seek и формат кадров остаются корректными.

Обработка через LSMASHVideoSource заметно тяжелее ожидаемого

Симптом. Простое открытие работает, но сложная обработка с частым seek проходит хуже, чем через LWLibav.

Возможная причина. LibavSMASH/LSMASHVideoSource рассчитан прежде всего на прямое чтение через L-SMASH; для обработки с частым seek LWLibav-путь с индексом имеет более подходящую модель доступа.

Диагностика. На одном и том же исходнике сравните структуру пайплайна с LWLibavVideoSource, не меняя фильтры после source.

Исправление. Для общего монтажа/фильтрации используйте LWLibav-путь с индексом, если контейнер нормально разбирается libavformat.

Проверка результата. Повторный доступ использует .lwi, а работа с несоседними кадрами становится предсказуемее без изменения последующих фильтров.

После VFR→CFR изменилось число кадров

Симптом. Хост показывает больше или меньше кадров, чем при исходном тайминге, хотя длительность близка.

Возможная причина. fpsnum/fpsden перестраивают временную сетку и для попадания на неё повторяют или пропускают исходные кадры.

Диагностика. Откройте тот же source без принудительного FPS и сравните число кадров. Если различие появляется только при fpsnum/fpsden, это ожидаемый эффект преобразования.

Исправление. Не форсируйте CFR без требования следующего этапа либо выберите корректную целевую дробь частоты.

Проверка результата. При отключённом преобразовании возвращается исходная временная модель; при включённом — число кадров соответствует новой CFR-сетке.

Видео и аудио заставляют индексироваться один файл дважды

Симптом. Скрипт с двумя source-функциями долго анализирует один и тот же container два раза.

Возможная причина. Видеоисточник создан раньше аудиоисточника, поэтому индексная информация не переиспользуется оптимальным порядком.

Диагностика. Проверьте порядок строк в AviSynth+-скрипте и время построения .lwi.

Исправление. Создавайте LWLibavAudioSource раньше LWLibavVideoSource, как рекомендует документация проекта.

Проверка результата. Один индекс обслуживает обе части, повторный полный scan не выполняется.

FAQ

L-SMASH Works кодирует H.264, HEVC или AV1?

Нет. Его роль — демультиплексировать контейнер, декодировать выбранный поток и отдать кадры/аудио хосту. Кодирование H.264, HEVC, AV1 или другого выходного формата выполняет отдельный энкодер или функция экспорта хоста. Наличие декодера конкретного кодека не означает наличие энкодера.

Нужен ли отдельно установленный FFmpeg?

Готовые релизы L-SMASH Works собираются с конкретными библиотеками FFmpeg и другими зависимостями, поэтому обычному пользователю не требуется устанавливать системный FFmpeg только ради source-фильтра. При самостоятельной сборке зависимости уже становятся частью build-конфигурации.

Что выбрать для MP4: LSMASHVideoSource или LWLibavVideoSource?

Оба пути могут быть уместны для MP4, но решают задачу разными механизмами. LSMASHVideoSource использует L-SMASH напрямую, а LWLibavVideoSource — libavformat и .lwi. Общая документация проекта рекомендует LWLibav для обработки, где важны производительность и многократный seek, оставляя L-SMASH-путь особенно понятным для прямого чтения контейнеров его семейства.

.lwi можно передать другому человеку вместо видео?

Нет. .lwi не содержит замену медиапотоку и не является прокси-видео. Это индекс, который описывает структуру конкретного source. Без исходного медиа он не даёт полноценного изображения или звука.

Меняет ли L-SMASH Works оригинальный файл?

Source-функции читают исходник. Индекс, скрипт и преобразования вроде format или fpsnum/fpsden существуют отдельно от него. Исторические сборки проекта имели дополнительные AviUtl-модули для других операций, но современный обзор относится к актуальной source/input-роли; она не требует переписывать исходное медиа.

Можно ли использовать один .lwi после перемещения файла?

Надёжнее дать L-SMASH Works построить индекс в новой рабочей конфигурации, особенно если cachedir кодирует полный путь source в имени. Индекс тесно связан с конкретным файлом и способом его идентификации. Это дешёвый служебный объект по сравнению с риском неверного seek.

Зачем нужен rap_verification?

Параметр управляет дополнительной проверкой random access points при индексации LWLibav. В активной ветке его значение по умолчанию было изменено на отключённое. При смене режима документация требует удалить прежний индекс и построить новый, потому что внутренние данные .lwi зависят от выбранной проверки.

Поддерживает ли плагин HDR?

L-SMASH Works способен декодировать форматы и битности, доступные соответствующим libavcodec-декодерам, а его video source поддерживает широкий набор высокобитных YUV/RGB/GBR pixel formats. Однако сохранение HDR как готового мастера зависит не только от source: метаданные, цветовая модель, фильтры и финальный энкодер должны корректно пройти всю дальнейшую цепочку. Поэтому наличие 10/12/16-битного формата кадров само по себе не гарантирует полноценный HDR-export.

Есть ли у L-SMASH Works пакетная обработка?

Отдельного менеджера очереди нет. Пакетность достигается на уровне хоста и скриптов: один шаблон AviSynth+/VapourSynth можно генерировать для набора source-файлов, а энкодер обрабатывает их последовательно или параллельно. Сам L-SMASH Works отвечает только за открытие каждого источника.

Можно ли работать полностью офлайн?

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

Почему в старых статьях встречаются lwmuxer.auf, lwdumper.auf и lwcolor.auc?

Это компоненты исторической AviUtl-линейки L-SMASH Works: muxer, дампер структуры и цветовой модуль. Они объясняют происхождение названия Works, но не должны автоматически переноситься на современную интеграцию AviUtl2. Текущие релизы прежде всего документируют source/input и поддержку современных хостов; старые .auf-модули относятся к прежней экосистеме.

Вывод

L-SMASH Works имеет смысл выбирать, когда задача начинается не с «смонтировать ролик», а с «предсказуемо открыть исходник в конкретном медиапайплайне». Для AviSynth+ сильная сторона проекта — LWLibav с .lwi, раздельные video/audio source и управляемые параметры seek, потока, формата и аппаратного декодера. Для VapourSynth актуальная ветка стала заметно целостнее после появления аудиофункций в релизе 1310. Для AviUtl2 ценность заключается в современном File Reader, который переносит эти же механизмы в графический диалог.

Если нужен простой просмотр или монтаж с таймлайном, L-SMASH Works добавит лишний технический слой. Если нужен кроссплатформенный source без привязки к AviUtl2, BestSource выглядит прямее; если пайплайн давно построен вокруг FFMS2, переход не обязателен. Но в Windows-среде, где одновременно важны AviSynth+/VapourSynth, индексированное чтение и AviUtl2, L-SMASH Works остаётся актуальным, активно поддерживаемым компонентом, а не реликтом старых кодек-паков.

Практический критерий выбора простой: источник должен стабильно индексироваться, произвольный seek — возвращать ожидаемые кадры, звук — сохранять временную согласованность, а параметры — воспроизводиться при следующем запуске. Если эти условия выполняются на базовой программной конфигурации, аппаратное декодирование, принудительный CFR и дополнительные FFmpeg-опции стоит добавлять только под конкретную задачу. Такой подход сохраняет главное достоинство L-SMASH Works — контролируемый и повторяемый доступ к медиаданным без изменения оригинала.