Сохранение рассчитанного видео |
Top Previous Next |
Мощности компьютера может не хватить для работы алгоритма повышения плавности на лету, особенно для видео высокого разрешения (подробнее см. результаты теста MVFlow HD Test - отражает производительность с настройками: "Качественный / Удвоение / До пиксела / 16x16 / Простое"). В таком случае можно сохранить видео с повышенной плавностью для последующего просмотра.
Ниже описывается порядок сохранения видео с повышенной плавностью с использованием программ:
Потребуется: x264vfw, Haali Muxer (Program Files\Haali\MatroskaSplitter\gdsmux.exe) - устанавливается вместе с Haali Matroska Media splitter'ом, входит в состав дистрибутивов пакета SVP. Порядок действий: 1. Сформировать скрипт: Запустить SVP менеджер; открыть требуемый видео-файл в плеере, выполнить необходимые настройки в профиле SVP; убедиться, что в иконке SVP менеджера появился зеленый треугольник; открыть созданный скрипт: Показать - AVS-скрипт; закрыть SVP и плеер (обновится файл AVS\ffdShow.avs в папке SVP). 2. Активировать скрипт на время перекодирования: Открыть окно настроек декодера ffdShow: Пуск -> Программы -> K-Lite Codec Pack -> Configuration -> ffdshow video decoder (откроется окно "ffdshow..."); в нем зайти на вкладку AviSynth, скопировать скрипт целиком из открытого окна ffdshow.avs; включить галку "Buffer back/ahead", указать в полях: 0 - в первом, 5 (цифру числа потоков + 1, число потоков см. в строке "SetMTMode(5,...)") - во втором поле, включить галку AviSynth (см. скриншот) - OK. 3. Открыть видео в Haali Muxer'е: Пуск -> Программы -> K-Lite Codec Pack -> Tools -> Haali Muxer (откроется окно "DS Mux"); В нем открыть требуемый видео-файл: правой кнопкой по центру окна -> Add Source... 3.1. Указать формат сжатия видео: Контекстное меню на видеодорожке: Encode -> x264vfw -> выбрать "Single pass - ratefactor-based (CRF)", указать Ratefactor:19 -> OK; 3.2. Указать имя создаваемого файла: Нажать "..." -> указать путь, набрать имя, указать расширение mp4 (например, "video.mp4") -> Сохранить; 3.3. Запустить процесс: Нажать кнопку Start. 4. Деактивировать скрипт: Открыть окно настроек декодера ffdShow: Пуск -> Программы -> K-Lite Codec Pack -> Configuration -> ffdshow video decoder (откроется окно "ffdshow..."); в нем зайти на вкладку AviSynth, очистить текст скрипта, снять галку с AviSynth - OK.
Потребуется: MediaCoder, x264vfw. MediaCoder имеет больше настроек, чем DS Mux, в добавок, он при открытии не использует ffdShow. Порядок действий в MediaCoder'е: 1. Сформировать скрипт: запустить SVP менеджер; открыть требуемый видео-файл в плеере, выполнить необходимые настройки в профиле SVP; убедиться, что в иконке SVP менеджера появился зеленый треугольник; закрыть SVP и плеер (обновится файл AVS\ffdShow.avs в папке SVP). 2. Отредактировать скрипт: открыть AVS\ffdshow.avs в текстовом редакторе; заменить строку ffdShow_source() на строку DirectShowSource("[имя Вашего файла]"), указав полный путь и имя видеофайла. 3. Открыть скрипт AVS\ffdshow.avs в MediaCoder'е. 3.1. Настроить формат сжатия, выбрать параметры сжатия для видео и звука, выбрать контейнер, путь сохранения. 3.2. Запустить процесс: Нажать кнопку Start.
Замечания: 1. Такой способ открытия видеофайла открывает и сразу распаковывает один видео- и один аудиопоток. Остальные данные исходного видеофайла, включая встроенные субтитры игнорируются. 2. За один проход оставить звук без перекодирования невозможно. Тем более две дорожки, тем более с субтитрами. Поэтому при таком сохранении лучше отключить галку Enable Audio, и добавить к полученной видео-дорожке недостающие аудиодорожки и субтитры из исходного файла уже в муксере.
Видеоинструкция: SVP_MediaCoder.AVI, 6.3 МБ (Подготовил DAAO)
Потребуется: Юшко-mod, VirtualDub, x264vfw, mkvtoolnix (извлечение звуковой дорожки), CoreAVC (по усмотрению, если нужна CUDA для разгрузки CPU)
1. avs-скрипт для Юшко - исправляем пути и открываем в VirtualDub через Ctrl+O (SVP должен быть выгружен) 2. Video - Fast recompress, Audio - No audio 3. Ctrl+P - меняем на x264vfw, в его настройках уменьшаем CRF с 26 до 19-20 4. Video - Select Range - в столбце Frames ставим: 0, ниже: 1000 (кусочек, чтобы проверить) 5. F7 (запускаем кодирование) Можно кодировать в несколько заходов: для следующего куска ставим: 1000, ниже: 9000 (например), тогда для следующего ставим: 10000, ниже: 40000 (и т.п.). Титры можно не кодить.
Куски, пронумерованные по порядку, можно объединить так: 1. в VirtualDub открываем первый 2. File - Append AVI segment - выбираем второй, остальные должны добавиться автоматом 3. Video - Direct Stream Copy (без перекодировки) 4. F7 (сохраняем)
Первичные действия: 1. Скачиваем XviD4PSP_5.0.37.8_r132.exe 2. Кладём svp-mvtools2-x2.avs в папку с установленным Xvid4PSP5 - \XviD4PSP5\presets\filtering\svp-mvtools2-x2.avs 3. Желательно обновить \XviD4PSP5\apps\x264\x264.exe до нового с сайта http://x264.nl 4. Скопировать новый mvtools2.dll (http://avisynth.org.ru/mvtools/mvtools-v2.5.10.zip) в \XviD4PSP5\dlls\AviSynth\plugins\mvtools2.dll и в %program files%\avisynth\plugins\
Теперь всё готово для создания плавной версии фильмов. 1. Запускаем Xvid4PSP5 2. Open - открываем нужный фильм 3. Выбираем слева в меню Filtering наш пресет svp-mvtools2-x2 (пресет запоминается, в дальнейшем выбирать не придётся) 4. Выставляем нужные параметры кодирования видео и звука, делаем при надобности 6ch->2ch. Если есть желание ограничить видео определённым размеров в настройках кодека, то необходимо ставить значение в половину от желаемого размера. 5. Меняем при желании параметры уплавнения, нажав на иконку шестерёнки рядом с меню Filtering. 6. Если нам нужно сжать FullHD до 720p или сделать кроп, то там же раскомментируем строки Resize & Crop перед уплавнением. 7. Если нужен PalSpeedup до 50fps, то в Video->Interlace/Framerate выбираем 50fps и AssumeFPS. Звук тоже автоматически ускорится на 4%, поэтому Audio:copy неприменимо. По поводу уплавнения до 60fps - не пробовал. В скрипте поменяем значения num и den до указанных рядом, в AssumeFPS в меню меняем до 60, но неясно что будет со звуком, он должен остаться без изменения (возможно потребуется выбрать Audio:copy). 8. Жмём Encode и ждём.
svp-mvtools2-x2.avs:
cpu=4 #количество ядер mask=1 #Подавление контурных артефактов (Contour artifacts suppression) #Простое маскирование (mask=0) #Простое + Статич. вектора (mask=1) #Простое + Вектора смежных кадров (mask=2)
ml=100 #Степень подавления артефактов (Artifact suppression level) #Легкая (ml=100) #Средняя (ml=500) #Высокая (ml=2500) #Нереальная (ml=10000)
spar=3 #Радиус поиска движения (Motion search radius) #1% кадра (spar=1) #3% кадра (spar=3) #10% кадра (spar=10) #30% кадра (spar=30) #100% кадра (spar=100)
pel=1 #Точность прогнозирования движения (Motion estimation accuracy), До пиксела (pel=1), До полу-пиксела (pel=2), до 1/4 пикселя (pel=4)
blkh=8 #Размер блоков (Block size):32x32, 32x16, 16x16, 16x8, 8x8, 8x4, 4x4 blkv=8
overlap=2 #Перекрытие блоков (Blocks overlapping): 0 x 0, blkh/2 x blkv/2, blkh/4 x blkv/4, overlapv=2
multinum=2 #Повышение плавности в n раз (Smooth playback parameters). 12:5 для результирующих 60fps. multiden=1
setmtmode(2,cpu*2+4)
#last.LanczosResize(1280,720) #last.crop(left,top,-right,-bottom)
source = last Width=source.width Height=source.height dist_h=int((0.01*spar*Width)/blkh) dist_v=int((0.01*spar*Height)/blkv) dist = dist_h>dist_v ? dist_h : dist_v dist = dist>0 ? dist : 1 super=MSuper(pel=pel, hpad=blkh, vpad=blkv) backward_vec1 = MAnalyse(super, isb=true, blksize=blkh*2, blksizev=blkv*2, overlap=overlap*2, overlapv=overlapv*2, searchparam=dist, plevel=2) forward_vec1 = MAnalyse(super, isb=false, blksize=blkh*2, blksizev=blkv*2, overlap=overlap*2, overlapv=overlapv*2, searchparam=dist, plevel=2)
MFlowFps(super, backward_vec1, forward_vec1, num=FramerateNumerator(last)*multinum,den=FramerateDenominator(last)*multiden, mask=mask, ml=ml)
#more quality (but not always) #forward_re = MRecalculate(super, forward_vec1, blksize=blkh, blksizev=blkv, overlap=overlap, overlapv=overlapv, thSAD=100, searchparam=dist) #backward_re = MRecalculate(super, backward_vec1, blksize=blkh, blksizev=blkv, overlap=overlap, overlapv=overlapv, thSAD=100, searchparam=dist) #MFlowFps(super,backward_re,forward_re,num=FramerateNumerator(source)*multinum,den=FramerateDenominator(source)*multiden,mask=mask,ml=ml) |