Сохранение рассчитанного видео

Top  Previous  Next

Мощности компьютера может не хватить для работы алгоритма повышения плавности на лету, особенно для видео высокого разрешения (подробнее см. результаты теста MVFlow HD Test - отражает производительность с настройками: "Качественный / Удвоение / До пиксела / 16x16 / Простое"). В таком случае можно сохранить видео с повышенной плавностью для последующего просмотра.

 

Ниже описывается порядок сохранения видео с повышенной плавностью с использованием программ:

Haali Muxer
MediaCoder
VirtualDub
XviD4PSP

 

 

С использованием Haali Muxer

 

Потребуется: 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

 

Потребуется: 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)

 

 

С использованием VirtualDub (Предложил 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 (сохраняем)

 

 

С использованием XviD4PSP (Предложил djonline)

 

Первичные действия:

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)

Hosted by uCoz