AviSynth — свободно распространяемая программа с открытым кодом, предназначенная для обработки видеоматериалов, в частности линейного и нелинейного монтажа. Простыми словами - мощный инструмент с множеством фильтров, которые в большинстве случаев доступны только в коммерческих продуктах, занимаемых много места на жестком диске. Использование этого инструмента не очень удобное, но результаты зачастую того стоят. Я решил использовать AviSynth из-за того, что он оказался самым простым вариантом для увеличения частоты кадров путем интерполяции, подобный метод есть в "Adobe After Effects" и в "Adobe Media Encoder", начиная с версии CS6, но это слишком тяжеловесный софт, да и настроек в нем маловато. Потом оказалось, что дефекты некоторых чересстрочных видео смог устранить только фильтр QTGMC, никакой другой, даже коммерческий исправить фильтр дефект не смог. Для удобства использования я сделал скрипт, который делает avs-скрипты по шаблону для отдельного файла или для директории. Эти скрипты можно открыть с помощью "FFMPEG" и в том числе пакетно сконвертировать в стандартный видеофайл.
УВЕЛИЧЕНИЕ ЧАСТОТЫ КАДРОВ ВИДЕО ПУТЕМ ИНТЕРПОЛЯЦИИАноним (Microsoft Windows 7: New Opera)05/04/19 Птн 10:14:14#2№2534195
Скрипт с плагинами - в прикрпленном файле avisynth.png (нужно открыть архиватором и распаковать). Для начала нужно установить сам AviSynth: https://github.com/pinterf/AviSynthPlus/releases/download/r2772-MT/AviSynthPlus-MT-r2772-with-vc_redist.exe . Проверить его можно путем создания файла "test.avs" со строкой: Version() , затем перетащить этот файл в плеер и если AviSynth установился правильно, то будет показана его версия. В распакованную директорию со скриптами нужно добавить бинарник "FFMPEG.EXE": https://ffmpeg.zeranoe.com/builds/ , если он не установлен в системе. Теперь нужно просто перетянуть видео файл (AVI, MP4) на скрипт "generate-avs.bat" и нажать ENTER. В директории GENERATED_SCRIPTS должен появится скрипт "название_видео_файла.avs". Затем нужно запустить скрипт "encode.bat", нажать ENTER и начнется кодировка в видео файл в директорию со скриптами с шаблоном по умолчанию для увеличения частоты кадров путем интерполяции.
Аноним (Microsoft Windows 10: Firefox based)05/04/19 Птн 10:17:46#3№2534197
Почему не VapourSynth? Я просто новичок, мне интересно с какого фреймворка желательно начать изучение?
Аноним (Microsoft Windows 7: New Opera)05/04/19 Птн 10:21:51#4№2534199
>>2534197 Под VapourSynth есть далеко не все плагины, которые писались только под AviSynth (NNEDI3, EEDI3, InterFrame).
Аноним (Microsoft Windows 10: Firefox based)05/04/19 Птн 14:14:19#5№2534364
>>2534984 AvxSynth сильно урезан. Тут, уж, лучше сразу VapourSynth пользовать. Или таки AviSynth+ под wine.
>>2535002 Скриптовый нелинейный видеоредактор. Нуфф сказал. Была бы под него нормальная IDE, был бы годнотой. Лютейшей годнотой. А в том виде, в котором есть с девяностых, оно употребимо только очень частно. Хотя я использую AviSynth как единственную NLE с этого вашего 1999 года. Но я и не клипы ваяю и не видеоблохер.
Аноним (Microsoft Windows 8: Firefox based)05/04/19 Птн 23:57:43#13№2535264
Как сделать ресайз, чтобы разрешение, допустим, по высоте? В ffmpeg, это делается одной командой - scale=640:-1, а как тут? И почему местная cut-команда, может вырезать только по кадрам(опция trim(100,200), а если я хочу по таймингу, как в ffmpeg(-ss 00:20 -to 00:30)?
Аноним (Microsoft Windows 10: Firefox based)06/04/19 Суб 07:55:24#14№2535332
>>2535231 > Но я и не клипы ваяю и не видеоблохер. А чем занимаешься?
>>2535332 Когда был школьником-студентом в 90-е и первой половине нулевых, рипал фильмы и аниме, оцифровывал и сводил любительские съёмки (репортажка; преимущественно детские праздники, прогулки и бытовуха) своих друзей и родственников. Там тоже есть всякое разное, от обратного телекино и реставрации, до авторинга DVD и сведения с титрами. Никогда никакой художки, т. к. не умею и не претендую — чисто техническая работа. В настоящее время очень плотно работаю по специальности (радиоинженерю) в интересах силовиков. Работа такая, что не заскучаешь. Одно время хотел видео кодеры с компенсацией движения исследовать, но сколько раз не принимался — так и бросал из-за работы.
>>2535264 > Как сделать ресайз, чтобы разрешение, допустим, по высоте? В ffmpeg, это делается одной командой - scale=640:-1, а как тут? Насколько помню, в Avisynth функции *resize() не допускают подобной нотации, и нужно выходной размер растра указывать явно. Но это не так критично, как невозможность указывать математические выражения и ссылаться на числовые переменные при записи аргументов функций. В функциях современного VapourSynth тоже указывать нужно явно, но там в основе Python, так что с математикой там без проблем.
> И почему местная cut-команда, может вырезать только по кадрам(опция trim(100,200), а если я хочу по таймингу, как в ffmpeg(-ss 00:20 -to 00:30)? Очевидно, чтобы не играть в эти игры с PTS и не проигрывать. FFmpeg вынужден работать с PTS, т. к. он работает с готовым к просмотру видео, а фреймсерверы могут и абстрагироваться от PTS и править видеоряд как дискретное множество данных безотносительно временных меток. Просто удобнее работать с видеорядом непосредственно, а время смены кадра — это дополнительная абстракция.
Аноним (Microsoft Windows 7: New Opera)OP07/04/19 Вск 12:20:12#16№2536338
Вы хоть отпишитесь, скрипты норм работают? А то долго мне пришлось допиливать, чтоб нормально воспринимались и файлы и директории.
Аноним (Microsoft Windows 7: Firefox based)07/04/19 Вск 12:37:26#17№2536383DELETED
Аноним (Microsoft Windows 7: Chromium based)07/04/19 Вск 13:08:39#23№2536456DELETED
>>2534963 A ты жoпу вытиpaешь или пoдмывaешь, пoсле тoгo, кaк пoсpaл?
Аноним (Microsoft Windows 8: Firefox based)07/04/19 Вск 14:53:25#24№2536630
>>2536338 > do ffmpeg -i "a" -b:v 3M -an "%OUTPUT_DIRECTORY%~na-ENCODED.mp4" Ну, хз. Можно было бы и получше команду для кодирования поставить. А почему без звука? Кстати, подскажи, как сделать простой батник, который бы просто запускал ffmpeg, потом .avs файл, а потом кодировал бы все в output файл. Как у тебя в батнике, но проще.Я просто не сильно разбираюсь в программировании.
>>2536630 > А почему без звука? Это я для себя выставлял, чтоб использовать модуль MPEG2Source для обработки контента с DVD, он предназначен только для видео. Убери параметр -an и будет со звуком. > Кстати, подскажи, как сделать простой батник, который бы просто запускал ffmpeg, потом .avs файл, а потом кодировал бы все в output файл. Как у тебя в батнике, но проще. Делать все одним скриптом не стоит. Лучше сгенерить avs-скрипты, а потом уже подгонять видео, проигрывая avs-скрипт в ffplay или каком-то плеере. AviSynth херит "Aspect Ratio", если оно было указано в контейнере, все равно его вручную надо выставлять. Если видео скачано с какого-то онлайн-сервиса, то этой проблемы не будет. Добавил скрипт в пикрелейтед, который генерит .avs, кодирует видео с помощью FFMPEG и удаляет .avs. Его нужно добавить в директорию к остальным скриптам. Нужно просто перетянуть на его видеофайл, нажать ENTER и он начнет кодировать видео. Проверь, работает у тебя или нет?
>>2536774 Заметил проёб при использовании названий файлов с пробелами, немного исправил.
Аноним (Microsoft Windows 8: Firefox based)07/04/19 Вск 17:18:29#46№2536956
>>2536931 Работает, вроде. И тот, что в шапке. Но хотелось бы узнать, что написать в батнике, чтобы при его открытие(батника), запускался бы ffmpeg, который бы выбирал мой avs скрипт, и делал двухпроходное кодирование видео, потом кодирование звука, а потом все это выводил в выходной файл.
Типа, как я думаю: ffmpeg -i "ссылка на мой avs.скрипт" (первый проход без звука)(второй проход без звука)(кодирование звука без видео)(объёдинение в выходной файл) out.mp4 Параметры проходов, кодирования звука я поставлю сам, мне просто нужен пример.
Объяснил, как ртом.
Аноним (Microsoft Windows 7: New Opera)07/04/19 Вск 18:38:29#47№2536978
>>2536956 generate-avs-encode-two-pass.bat: берет звук с .avs, работает с аудио-видео модулями. generate-avs-encode-two-pass-mux.bat: берет звук с исходного файла, конвертирует его в отдельный файл, затем объединяет с видео.
Аноним (Microsoft Windows 7: New Opera)07/04/19 Вск 18:46:04#48№2536982
for a in ("%INPUT_DIRECTORY%.avs") do ^ ffmpeg -i "a" "%FFMPEG_PARAMETERS_PASS-1%" & ^ ffmpeg -i "%%a" "%FFMPEG_PARAMETERS_PASS-2%" & ^ del ffmpeg2pass-0.log & ^
Файл .avs находиться в той же директории, где и батник.
Аноним (Microsoft Windows 7: Firefox based)07/04/19 Вск 23:26:31#55№2537076
>>2537064 >SET " Что ты мучаешься с батниками? Пиши на lua, у него интерпретатор крошечный и синтаксис приемлемый.
Аноним (Microsoft Windows 7: New Opera)08/04/19 Пнд 09:57:40#56№2537187
>>2537064 И если хочешь, чтоб все было в одной директории, то нужно менять и пути к плагинам в TEMPLATE-1.txt.
Аноним (Microsoft Windows 8: Firefox based)08/04/19 Пнд 13:41:31#58№2537247
>>2537199 Нет, ты все пытаешься написать код, основываясь на твоём batнике, с вопросом о выборе типа файла и прочее. Я же пытаюсь, на основе твоих команд сделать свой батник, в котором уже прописан путь к моему avs. Вот, например, @echo off -типа, я понял, это не показывать команды в командной строке SET "INPUT_DIRECTORY=c:\User\ffmpeg-20190403-ee16d14-win64-static\bin\" - это я понял, переменная, которая указывает путь для входной директории(опять же, что указывать файл или папку? SET "FFMPEG_PARAMETERS_PASS-1=-c:v libvpx -pix_fm бла-бла-бла - это переменная первого прохода(да?), ниже - для второго прохода .
PUSHD %~dp0 - что это я не понял.
for a in ("%INPUT_DIRECTORY%.avs") do ^ ffmpeg -i "a" "%FFMPEG_PARAMETERS_PASS-1%" & ^ - типа, выполнить "ffmpeg -i ПУТЬкAVS ПЕРЕМЕННАЯ1ПРОХОДА (да?), а что такое ("а")? Повторюсь, я в программирование полный ноль.
Аноним (Microsoft Windows 7: New Opera)08/04/19 Пнд 16:02:28#59№2537344
>>2537247 В этом посте >>2537187 я приложил скрипт без вопросов. Просто на него перетягивается видеофайл или папка с видеофайлами и начинается обработка. INPUT_DIRECTORY - входной файл или директория с файлом .avs, определяется далее и в зависимости от значения переменная меняется - для файла - file.ext, для директории - directory/. Если файл или папка перетягивается на скрипт, то становится INPUT_DIRECTORY. Можно убрать вторую часть скрипта и указывать вручную, но зачем? Я уже удалил все вопросы и оставил только возможность перетащить файл/папку на скрипт начинается обработка. PUSHD %~dp0 - установить текущей директорией директорию, где находится скрипт. > а что такое ("а")? Это переменная от выполнения "for %a", в которой записан сканируемый исходный файл или список файлов в директории. FFMPEG лучше прописать в системную переменную PATH в винде, чтоб всегда был доступен. Еще один скрпит с путем к FFMPEG в пикрилейтед.
Аноним (Microsoft Windows 8: Firefox based)08/04/19 Пнд 17:03:17#60№2537376
>>2537344 Работает, да,но..Типа, кодирует, применяя фильтры интерполяции, которые берет из сгенерированого .avs. А зачем "генерить" avs, чтобы потом его "автоматом" удалить? И потом, хотелось бы просто перетащить файл, запустить двухпроходное кодирование, которое бы подцепляло мой avs файл, предварительно расположенный в этой же папке, где и batник. ВоТъ..
Аноним (Microsoft Windows 8: Firefox based)08/04/19 Пнд 17:09:50#61№2537382
>>2537376 А, или можно просто заменить содержимое двух (кстати, почему два файла?) TEMPLATE.txt файлов, записав туда нужные команды для avs, которое генерит твой батник.. Хм.
Аноним (Microsoft Windows 7: New Opera)08/04/19 Пнд 17:12:42#62№2537384
>>2537382 Так это и есть главная особенность скрипта. Пришлось разбить на две части, чтоб быстрее происходила обработка. Работает так: Перенаправление первой части в скрипт > добавление модуля с именем файла > добавление второй части. Файл в скрипте должен указываться после загрузки всех плагинов, но до функций.
Аноним (Microsoft Windows 7: New Opera)08/04/19 Пнд 17:13:50#63№2537386
>>2537382 Главное оставить структуру нетронутой (пустые строки вначале и конце не убирать).
Аноним (Microsoft Windows 8: Firefox based)08/04/19 Пнд 17:38:26#64№2537394
>>2537384 >>2537386 Нет, правда, спасибо, что помогаешь дуракам с Двачей.. А вот это %%~na., это имя выходного файла? А расскажи, что эти символы означают?
Аноним (Microsoft Windows 7: New Opera)08/04/19 Пнд 17:45:31#65№2537397
>>2537394 Открываешь cmd.exe > for /?. Там все расписано:
Операции подстановки ссылок на переменные команды FOR также расширены. Допускается применение следующих синтаксических конструкций: %~I - из переменной %I удаляются обрамляющие кавычки (") %~fI - переменная %I расширяется до полного имени файла %~dI - из переменной %I выделяется только имя диска %~pI - из переменной %I выделяется только путь к файлу %~nI - из переменной %I выделяется только имя файла %~xI - из переменной %I выделяется расширение имени файла %~sI - полученный путь содержит только короткие имена %~aI - переменная %I расширяется до атрибутов файла %~tI - переменная %I расширяется до даты /времени файла %~zI - переменная %I расширяется до размера файла %~$ПУТЬ:I - проводится поиск по каталогам, заданным в переменной среды ПУТЬ, и переменная %I заменяется на полное имя первого найденного файла. Если переменная ПУТЬ не определена или в результате поиска не найден ни один файл, то этот модификатор заменяется на пустую строку.
Аноним (Microsoft Windows 8: Firefox based)08/04/19 Пнд 19:51:30#66№2537477
А можно вырезать несколько участков в видео? Например, trim (100,200) trim (500, 600) trim (800,1000)
>>2537477 Разумеется. Функция trim() возвращает переменную типа clip, значение которой можно присвоить поименованной переменной. Значение последнего определённого клипа хранится в специальной переменной last. Ключевое слово return принимает выражение, которое при выполнении должно вернуть тот самый клип, который весь скрипт даст на выход. Вот пример (cкрипт вернёт соединённые clip_a и clip_b, наложенные с прозрачностью 50% поверх clip_c): clip_l = last clip_a = clip_l.trim(100, 200) clip_b = clip_l.trim(500, 600) clip_c = clip_l.trim(800, 1000) return clip_c.Overlay(clip_a ++ clip_b, opacity=0.5, ignore_conditional=true, pc_range=true)
Аноним (Microsoft Windows 10: Chromium based)09/04/19 Втр 01:38:21#68№2537696
>>2534165 (OP) Я так и не понял, зачем это, когда есть ffmpeg,
Аноним (Microsoft Windows 7: New Opera)OP09/04/19 Втр 12:16:11#71№2537838
>>2537696 В FFMPEG есть далеко не все фильтры. Я бы очень хотел, чтоб все фильтры AviSynth были кроссплатформенными и доступными в FFMPEG. А нормально портировали в FFMPEG, начиная с 2010 года, только фильтры от MPlayer и еще некоторые. Не дождавшись, пришлось разбираться с AviSynth.
>>2537773 Ошибка синтаксическая у тебя. Идём и смотрим http://avisynth.nl/index.php/Trim Синтаксис такой: Trim(clip, int first_frame, int last_frame [, bool pad] ) Т. е. функция принимает как минимум три аргумента: - clip — имя переменной исходного видеоряда; - first_frame — целочисленное значение номера первого кадра; - last_frame — целочисленное значение номера последнего кадра. В моём примере в >>2537541 используется постфиксная (объектная) нотация. Форма записи, при которой опускается первый аргумент, а в качестве первого аргумента при вызове функции используется видеоряд, возвращаемый выражением, написанным до точки. Т. е. оператор «.» (точка) работает слева направо (исходное значение слева, функция-обработчик указывается справа и результат будет передан вправо до конца строки), а оператор «=» (присвоение, определение) — справа налево (выражение справа от оператора и до конца строки будет полностью вычислено, а результат будет передан в переменную слева от оператора). Такая форма записи нужна для компактного человекочитаемого способа изложения сценария, чтобы не теряться во вложенных скобках. Также форма такая очень полезна для записи выражения в несколько строк. Например (две последние строчки из >>2537541 можно записать так): (см. пикрел)
Аноним (Microsoft Windows 7: New Opera)08/05/19 Срд 21:17:08#73№2565578
Аноним (Microsoft Windows 7: New Opera)09/05/19 Чтв 18:10:42#74№2565977
Какой лучше всего использовать фильтр для деблокинга и для автоматической регулировки уровней?
Аноним (Microsoft Windows 8: Firefox based)19/05/19 Вск 21:28:18#75№2571642
>>2534195 Как заэнкодить без потери качества? Мне после интерполяции ещё обрабатывать и эффекты накладывать надо.
Аноним (Microsoft Windows 8: Firefox based)19/05/19 Вск 22:48:39#76№2573232
>>2571642 Сам спросил, сам нашёл. В encode.bat нужно так строчку изменить do ffmpeg -i "a" -c:v huffyuv "%OUTPUT_DIRECTORY%~na-ENCODED.avi" Если сравнивать с Adobe After Effects (с параметрами по умолчанию), то у AVISYNTH в среднем картинка чётче, но артефактов больше, иногда сильно зернистые промежуточные кадры получаются. Как, что и где можно подкрутить, чтобы улучшить результат?
Простыми словами - мощный инструмент с множеством фильтров, которые в большинстве случаев доступны только в коммерческих продуктах, занимаемых много места на жестком диске. Использование этого инструмента не очень удобное, но результаты зачастую того стоят. Я решил использовать AviSynth из-за того, что он оказался самым простым вариантом для увеличения частоты кадров путем интерполяции, подобный метод есть в "Adobe After Effects" и в "Adobe Media Encoder", начиная с версии CS6, но это слишком тяжеловесный софт, да и настроек в нем маловато. Потом оказалось, что дефекты некоторых чересстрочных видео смог устранить только фильтр QTGMC, никакой другой, даже коммерческий исправить фильтр дефект не смог.
Для удобства использования я сделал скрипт, который делает avs-скрипты по шаблону для отдельного файла или для директории. Эти скрипты можно открыть с помощью "FFMPEG" и в том числе пакетно сконвертировать в стандартный видеофайл.