Статьи 

Paper

Нарезка, или как сделать правильный AVI из MKV/MP4

Четверг, 27 Ноябрь 2008

Вступление

Процесс создания любого клипа включает в себя конвертирование исходного материала в формат, пригодный для использования в редакторе, или попросту "нарезку". Несколько лет назад, в эпоху avi и divx, все было предельно просто, т.к. Virtual Dub без особых проблем мог открыть практически любой файл, но с появлением mkv и mp4 этот процесс оброс дополнительными ньюансами, о которых я и собираюсь здесь рассказать. Моя цель- описать универсальный и простой в использовании способ нарезки современных исходников. DVD-исходники (*.VOB) в рамках данной статьи рассматриваться не будут - читайте статьи по DVD-rip'у.


Инструментарий

Нам понадобится 4 инструмента: Virtual Dub, AviSynth, Haali Media Splitter (известный также как Matroska Splitter) и MediaInfo. Инсталляция всех перечисленных приложений делается с настройками по умолчанию, т.е. по схеме "Next->Next->Next". После установки находим файлик "avss.dll" (он устанавливается с Haali Media Splitter и по умолчанию находится в "C:/Program Files/HaaliMatroskaSplitter/avss.dll") и копируем его в папку плагинов ависинта (по умолчанию "C:/Program Files/AviSynth 2.5/plugins").

Скрипт

Допустим, у нас есть исходный файл в матрешке с именем Ishodnik.mkv. Создайте текстовый файл и впишите туда следующие строки, подкорректировав путь при необходимости:

DSS2("D://Ishodnik.mkv")
ConvertToRGB24

Комментарий для продвинутых пользователей. Почему не DirectShowSource? А потому, что DirectShowSource не является frame accurate, т.е. после загрузки скрипта в даб и разметки границ желаемого фрагмента эти самые границы вполне могут съехать на несколько (иногда десятков) фреймов, бывают и более серьезные глюки вроде изменения последовательности кадров при сикинге. DSS2 лишен всех этих недостатков.

Сохраните файл с расширением *.avs. Запустите Virtual Dub, зайдите в меню Video и выберите режим Direct Stream Copy. Теперь откройте в дабе созданный *.avs-файл. Если все сделано правильно, то вы увидите там свой исходник. Но не спешите приступать к нарезке- самое интересное только начинается.

Черные полосы.

Бывает, в исходном файле с какой-то или сразу с нескольких сторон изображения присутствуют черные полоски шириной в несколько пикселей. Черные полосы в клипе значительно расходуют драгоценный битрейт и смотрятся неэстетично, к тому же на них вылезают эффекты, поэтому мы будем от них избавляться. Посмотрите на картинку в Virtual Dub'е, выбрав светлую сцену. Если видите полоски, то редактируйте свой *.avs-файлик, добавив в конец скрипта такую строку:

Crop(a,b,-c,-d)

где a - количество обрезаемых пикселей слева, b - сверху, c - справа и d - снизу. После этих манипуляций скрипт, срезающий, например, 1 пиксель черных полос слева и 2 справа, должен выглядеть так:

DSS2("D://Ishodnik.mkv")
ConvertToRGB24
Crop(1,0,-2,-0)

Разрешение.

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

Чтобы посмотреть разрешение исходника, воспользуйтесь утилитой MediaInfo (рис. 1). Главное правило - никогда не делайте ваш клип с бОльшим разрешением, чем разрешение исходника (исключение - анаморф, об этом ниже). Это же касается миксов. При наличии исходников разного разрешения за разрешение клипа принимайте наименьшее из разрешений исходников.
Зато если качество исходника оставляет желать лучшего, либо у вас сильно ограничено свободное место, либо размер клипа должен вписаться в жесткие рамки, либо вы обрезали черные полосы- во всех этих случаях разрешение можно и нужно уменьшать. Следует помнить, что изменять разрешение нужно пропорционально, а лучше выбирать из таких стандартных вариантов (для исходника с соотношением сторон 16х9): 640х360; 704х400; 768х432; 848х480; 1024х576; 1280х720. Если же ваш исходник имеет соотношение сторон 4х3, то вряд ли вы найдете что-то более подходящее, чем 640х480. Соотношение сторон смотрим рядом с разрешением в MediaInfo (рис. 1)
Для изменения разрешения добавьте в ваш скрипт строчку:

Spline36Resize(x,y)

где х - новое разрешение по горизонтали, а y- по вертикали. Использование алгоритма сплайнов при уменьшении разрешения позволит скрыть мелкие артефакты исходника, но сохранит четкость картинки. Например, вы остановились на разрешении 768х432. Тогда ваш скрипт должен выглядеть так:

DSS2("D://Ishodnik.mkv")
ConvertToRGB24
Crop(1,0,-2,-0)
Spline36Resize(768,432)


Анаморф

Если вы- счастливый обладатель DVD-rip'а, то ему наверняка присуща анаморфность. Анаморф- видео с неправильным аспектом и метаданными, позволяющими плееру восстанавливать правильный аспект при проигрывании. Откройте исходник в MediaInfo, в настройках поставьте Output format - HTML. В окне информации о видео (рис. 1) можно увидеть исходное разрешение и cоотношение сторон при показе. Если вы просто откроете в дабе наш скрипт без операций ресайза, то он будет как раз в исходном разрешении и у видео будут неправильные пропорции. Поэтому при анаморфе обязательно приведите соотношение сторон нарезки к указанному (используйте стандартные разрешения, указанные выше). На рисунке разрешение 704х480, а соотношение 16/9. Высчитываем горизонталь с нужным соотношением, взяв за основу разрешение по вертикали:

480*16/9=853.(3)

и берем ближайшее из стандартных разрешений (848х480) или меньшее. В нашем примере мы уже изменили разрешение на 768х432, вернув таким образом потенциально анаморфному исходнику правильный аспект, поэтому скрипт модифицировать не надо.

Частота кадров

Бывают случаи, когда разные серии одного релизера выходят с разным fps (frames per second), к тому же не совсем стандартным. Не стоит забывать и про VFR (variable frame rate или переменный fps). Задача клипмейкера- привести все исходники к выбранному фрейм рейту, избежав при этом дерганий, смазываний и существенных изменений скорости нарезки по сравнению с оригиналом.

Фреймрейт смотрим в MediaInfo (рис. 2). Если вы видите там одну строку с числом кадров в секунду, то все просто и эту частоту кадров можно брать для клипа. В любом другом случае лучше всего будет модифицировать функцию DSS2 специальным параметром, возвращающим фрейм рейт к нужному занчению.

Если имеем что-то похожее на рис 3, рис. 4 или рис. 5, то у нас переменный fps и наша задача определить, какой же именно фреймрейт 23.976 или 29.97 у интересующего нас куска. Для этого создадим отдельный скриптик с единственной строкой:

DSS2("D://Ishodnik.mkv", fps=29.97)

Откроем его в отдельном Дабе и пролистаем покадрово десяток фреймов на какой-нибудь динамичной сцене или сцене панорамирования (движения камеры). Если движение есть четко в каждом кадре значит, фреймрейт 29.97. Если каждые несколько кадров имеем один без движения значит, 23.976.

Допустим, в нашем примере движение было не в каждом кадре, поэтому скрипт должен выглядеть так:

DSS2("D://Ishodnik.mkv",fps=23.976)
ConvertToRGB24
Crop(1,0,-2,-0)
Spline36Resize(768,432)

Теперь последний штрих, улучшающий совместимость нарезки с редакторами. 23.976 по стандарту NTSC - бесконечная дробь (24000/1001), которую редакторы понимают далеко не всегда. То же относится к 29.97. Поэтому приведем наш фреймрейт к округленному значению. Делается это добавлением в скрипт строки

AssumeFPS("ntsc_round_film")

для 23.976 или строки

AssumeFPS("ntsc_round_video")

для 29.97.

В нашем примере скрипт будет выглядеть так:

DSS2("D://Ishodnik.mkv",fps=23.976)
ConvertToRGB24
Crop(1,0,-2,-0)
Spline36Resize(768,432)
AssumeFPS("ntsc_round_film")

Фильтры

Дополнительным преимуществом использования ависинта в нарезке является возможность подключать качественные фильтры для визуального повышения качества видео. Однако использование фильтров на исходнках-релизах хороших групп может даже слегка ухудшить качество нарезки, т.к. эти же фильтры уже были использованы самими релизерами. Самые полезные для клипмейкера фильтры - это шумодавы, убирающие зерно/шумы и повышающие сжимаемость клипа (например, FFT3Dfilter, для которого так же есть GPU-версия), шарперы, делающие изображение более четким (например, warpsharp) и градиентные выравниватели, убирающие видимые переходы полутонов градиента (например, gradfun2db). Тонкости использования фильтров тянут на отдельную статью, поэтому здесь их рассматривать не будем. При желании можно легко найти всю информацию в интернете, к тому же никакие фильтры не заменят качественный исходник.

Кодирование нарезки

Сохраните изменения, внесенные в скрипт. Перечитайте скрипт в Virtual Dub'е, нажав F2 или открыв его заново. Можно приступать к нарезке, получая на выходе несжатый RGB24 - самый безглючный формат видео с точки зрения редакторов. Но у него есть существенный недостаток - он требует очень много свободного места на вашем диске.

Объем дискового пространства на секунду нарезки рассчитывается по формуле:

Vol(MB/sec)=(ResX * ResY * 24 * fps /(1024*1024*8))

где
Vol(MB/sec) - вес одной секунды нарезки в мегабайтах,
ResX - разрешение по горизонтали,
ResY - разрешение по вертикали,
fps - фреймрейт (кадров в секунду).
Т.е. если вы делаете нарезку в разрешении 768х432@23.976fps, то одна секунда будет весить 768*432*24*23.976/(1024*1024*8) = примерно 23 мегабайта. Не трудно посчитать, что 30 минут нарезки будут весить около 40 гигабайт. Много? Тогда будем кодировать нашу нарезку без потери качества, чтобы она занимала примерно в 10 раз меньше места.

Нам понадобится установленный Lagarith. Теперь модифицируйте скрипт нарезки, удалив оттуда строку

ConvertToRGB24

и исправив значения в строке Crop на ближайшие кратные двум. Скрипт должен выглядеть так:

DSS2("D://Ishodnik.mkv",fps=23.976)
Crop(2,0,-2,-0)
Spline36Resize(768,432)
AssumeFPS("ntsc_round_film")

В дабе зайдите в меню Video и выберите режим Fast Recompress, чтобы избежать преобразований цветового пространства. Потом зайдите в меню Video, пункт Compression, выберите в списке кодеков Lagarith lossless codec, нажмите Configure, установите mode в YV12 и отметьте чекбоксы Enable Null Frames и Use Multithreading. Перечитайте ваш скрипт, нажав F2. Теперь можно делать нарезку, не так сильно беспокоясь за свободное место. Успехов в творчестве!

Автор: Aggressor


Прочитана: 277574 раза
Распечатать

Комментарии (309)
Вы не авторизованы! Комментарии могут оставлять только зарегистрированные и авторизованные пользователи!


-=[Hikari]=-   User profile
  30.11.2008 02:13
Aggressor, при том, что некоторые плееры любят автоматически определять соотношение сторон, и при неправильном разрешении иногда определяют его неправильно. То же самое в случае, когда при создании файла был указан неправильный PAR.
Aggressor   User profile  Video channel
  30.11.2008 00:52
-=[Hikari]=-, не совсем понял, причем тут сбитый аспект к кратности 16. А вообще в статье есть список стандартных разрешений. Горизонталь в них всегда кратна, а о вертикали в одном исключительном случае (640х360) позаботится АМВсимпл )
-=[Hikari]=-   User profile
  30.11.2008 00:42
О, ещё одно дополнение придумал:

Следите за тем, чтобы значения высоты и ширины вашего видео были кратны 16, т.е. делились без остатка на 16. Если это будет не так, у вас большие шансы получить видео с искажённым соотношением сторон (или, как принято говорить, сбитым аспектом) и/или плохой сжимаемостью, а отсюда - увеличенным размером файла.
-=[Hikari]=-   User profile
  30.11.2008 00:21
Aggressor VDM мне не нравится- слишком он нестабильный по сравнению с VD
ага, кроме того, последняя версия вышла аж в 2005 году, и он не умеет ничего такого, что не умели бы VD + AviSynth + mkvmerge + ещё пара-тройка совсем не сложных в употреблении программ

puni puni, самый главный фактор - кривые руки
самое главное - если ты действительно хочешь их выпрямить, у тебя это обязательно получится. Чего-то не знать - не стыдно, стыдно не хотеть что-то знать
Почему-то слэши в комментарий упорно не проставляются, но они есть
я ж говорю - нужно писать вместо слешей &_#92, только знак "_" убрать
puni puni   User profile
  29.11.2008 22:46
Aggressor, угу, +самый главный фактор - кривые руки... За статью еще раз спасибо, очень полезной оказалась)
Aggressor   User profile  Video channel
  29.11.2008 22:28
trampler, название фильтров я дал, а вот параметры и правда надо подбирать индивидуально для каждого исходника. Если интересно- мои фильры для Акроссовского конкурсника:
FFT3DGPU(sigma=2, plane=4, bt=3, sharpen=0.5, mode=1, precision=2)
gradfun2db
FFT3DGPU- это пространственно-временной шумодав, сигма- сила шумодава, шарпен- увеличение резкозти, остальное- настройки максимального качества.
А VDM мне не нравится- слишком он нестабильный по сравнению с VD. У меня вылетает каждые 10 минут или при каждой минимизации его окна )

puni puni, периодически у разных программ вылезают несовместимости с символами кириллицы и пробелами. Или ограничение по длинне, как -=[Hikari]=- написал. Думаю, дело все-таки в какой-то комбинации этих факторов.
puni puni   User profile
  29.11.2008 22:24
-=[Hikari]=-, не исключено, что я не сделала что-нибудь очень очевидное) Мне теперь и самой интересно, почему исходник только из этой папки не воспринимается. Это может быть связано с тем, что торрент использует этот файл для раздачи? Но тогда почему скрипт и исходник одновременно из этой папки virtual dub открывает нормально?
-=[Hikari]=-   User profile
  29.11.2008 21:57
puni puni, мистика прямо какая-то... и там, и там пробелы есть в пути, сам путь не больше 256 символов...

P.S. Для того, чтобы здесь отображался символ "\" нужно вместо него писать вот это: &_#_92 (без знаков "_")
puni puni   User profile
  29.11.2008 21:50
Aggressor, вот, если интересно
C:Documents and SettingsAdminМои документыDownloadsSoul_Eater_-_27[h264][1280x720][Aero].mkv
Вот так, например, E:Video 2Soul EaterSoul_Eater_-_27[h264][1280x720][Aero].mkv уже делает. И при копировании исходника в любое другое место тоже делает.
А скрипт avs на рабочем столе. Может, ему папка загрузок торрентов не нравится?
Почему-то слэши в комментарий упорно не проставляются, но они есть
trampler   User profile
  29.11.2008 21:56
Aggressor, точно, спасибо. жаль тока про фильтры ничего толком не написано, уже час безуспешно пытаюсь хоть какой-то шумодав окромя SpatialSoften применить.. кстати можно добавить, что в VDM удобнее через редактор скриптов работать.
Aggressor   User profile  Video channel
  29.11.2008 21:00
trampler, небось, на несжатое видео его напустил? Для несжатого используй AviSource.
trampler   User profile
  29.11.2008 20:09
DSS2 почемуто перевернутое изображение даёт.. через DirectShowSource всё ок. в чем прикол?
Aggressor   User profile  Video channel
  29.11.2008 19:11
k1d, лучше пусть люди радуют меня клипами в хорошем качестве :)
k1d   User profile
  29.11.2008 13:14
Фуф... Спасибо. Теперь все работает. Я думаю, надо ввести рейтинг, чтоб люди могли ставить +, вот таким людям)
Aggressor   User profile  Video channel
  29.11.2008 13:05
k1d, установи нормально Matroska Splitter... яойные плееры- не показатель, потому что у них собственные сплиттеры.
k1d   User profile
  29.11.2008 12:58
Попробовал черз пуск, вылезла ошибка, что mkunicode.dll не найден. Чо с этим делать? ffdshow у меня самый последний установлен. Но эта mkv`шка, у меня через Gom плеер проигрывается...
Aggressor   User profile  Video channel
  29.11.2008 12:18
В принципе такая ошибка может быть по нескольким причинам. Я бы для начала убедился, что эта MKVшка проигрывается у меня в плеере (пуск-выполнить-mplayer2, и открыть ее там). Если не проигрывается- понятно, дело в кодеках, ставь ffdshow. Если проигрывается- остается переустановить ависинт...
k1d   User profile
  29.11.2008 12:07
Епт... НО, даже поменяв, ошибка все равно вылезает. Точно такая же, но с правильными слешами(
Aggressor   User profile  Video channel
  29.11.2008 11:04
k1d, слэшы поменяй на обратные, ё-моё
k1d   User profile
  29.11.2008 11:00
Просто, используя твой метод, Вегас не видит фрагменты, которые я нарез. Для работы с несжатым, нет места. А изменив VFW, у меня вылезает вот такая ошибка. Как можно кодировать, чтоб Вегас видел файлы? И чо с ошибкой делать?(она вылезает, при открытии скрипта для mkv)
http://xs433.xs.to/xs433/08486/________-1851.jpg
Turbo   User profile  Video channel
  29.11.2008 10:11
Заменил слеши на правильные.
-=[Hikari]=-   User profile
  29.11.2008 02:56
Aggressor, предпочитаю с бетами не связываться
а, ну да. логично...
Lanczos4 давал абсолютно идентичные Spline36 результаты
я их тоже сравнивал - на аниме разницы не заметил, на live video тёмные сцены лучше у Lanczos4 получаются. Это я так, вдруг кто заинтересуется и что-нибудь интересное найдёт.
Aggressor   User profile  Video channel
  29.11.2008 02:49
-=[Hikari]=-, Spline64Resize доступен только в бетке новой версии ависинта, я предпочитаю с бетами не связываться. А Lanczos4 по моим личным тестам давал абсолютно идентичные Spline36 результаты, поэтому выбор в пользу Spline36 я сделал исключительно из-за того, что его название проще запомнить и написать

puni puni, я тут попытался поназывать папки даже символами кириллицы с пробелами- все равно открывает. Можешь написать полный путь, при котором не хочет открывать? Мне любопытно )
-=[Hikari]=-   User profile
  29.11.2008 02:43
Aggressor, респект! Статья супер!
Для ресайза неплохой результат дают ещё Spline64Resize и Lanczos4Resize, но нупам лучше не экспериментировать - юзайте Spline36

Всем желающим делать нормальные материалы будет полезно почитать вот это: http://avisynth.org/mediawiki/Main_Page/ru

k1d, от себя ещё добавлю: никогда, никогда не пользуйся сжатым с потерями видео при монтаже клипов! В результате получишь замусоренный артефактами и потерявший чёткость клип и кучу тапков от критиков. Пользуйся тем, что написал Aggressor, а если вдруг у тебя мощный комп с шустрым винчестером и свободного места гигов 150 есть - то используй несжатое видео.
А вот когда клип уже готов - H264 - как раз то, что нужно. Только не забудь настроить использование B-frames и включить все прелести H264 (такие как CABAC, Trellis, RDO), а то лажа получится В-)

puni puni, да и не проблема это, исходник перекинуть
ага, намного проще, чем "D:/Ishodnik.mkv" заменить на "c:\Мойо папко\Куча\вложенных\папок\Исходник.mkv"
puni puni   User profile
  29.11.2008 02:10
Aggressor, угу, попробовала, но Virtual Dub воспринял avs только когда я иходник кинула на D (раньше был на С в куче вложенных папок). А, у меня просто руки не оттуда, да и не проблема это, исходник перекинуть)
Спасибо.
Aggressor   User profile  Video channel
  29.11.2008 01:46
k1d, читай внимательнее. Я способы с потерей качества не рассматриваю принципиально- нас и так не балуют исходниками отличного качества, чтобы позволить себе терять его еще дважды- при нарезке и при кодировании финальной версии. Если лень настраивать VFW-интерфейсы, всегда можешь остановиться на способе без кодирования нарезки, т.е. сделать все, что описано до слова "Много?".
puni puni, на счет "в ту папку"- почему-то в статье в примерах скрипта все слэшы заменены на обратные. Попробуй поменять на нормальные, тогда будет срабатывать из любой папки.
puni puni   User profile
  29.11.2008 01:37
Aggressor, спасибо за статью. Очень внятно написано, даже такой нуб как я поняла сразу)))
Почему-то срабатывает, только если сам файл.avs помещать именно в ту папку, где исходник.mkv. Слегка мешает)
k1d   User profile
  29.11.2008 01:19
Ну хотел в Вегасе и АЕ. Вегас вроде норм читает, АЕ еще не пробовал. Т.е. наименьшая потеря кач-ва идет с HuffYUV? Просто, все что я нарезал с HuffYUV Вегас не видит. А х264 все норм видит, лишь поэтому возник вопрос. Почему такое происходит?
Aggressor   User profile  Video channel
  29.11.2008 00:26
k1d, и в каком редакторе ты собрался работать с таким видео без глюков? К тому же скорость обработки сильно пострадает. К тому же потери качества все равно есть. Нет, я не рекомендую так делать.
k1d   User profile
  28.11.2008 23:35
Огромное спасибо. Вот только вопрос, сильно ли пострадает видео, если я в VirtualDumMod->Video->Encoder поставил H264? И видео получаются оч маленького размера и каких либо потерь качества не видно было.


 Случайная цитата