Статьи 

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


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

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


Rezus   User profile
  06.11.2010 06:35
Aggressor, Видимо я вообще еще не в теме, и пока даже основ не понял =)

хм в премьере нельзя делать нарезку? или у меня не правильное представление, слова нарезка сложилось =) В премьере ведь есть таймлайн, на котором можно обрезать видио на фрагменты и склеивать их Оо или это не то?
Aggressor   User profile  Video channel
  06.11.2010 00:36
Wuki, CS5 требует 64-разрядных кодеков. Самый простой вариант — использовать несжатое видео.
Rezus, а причём тут нарезка к прогам, в которых делаются клипы?
Rezus   User profile
  05.11.2010 20:01
Мучался, мучался но так и не справился с этой ошибкой 80040154 =( перечитал все 13 страниц.. решения этой проблемы писалось.. но он мне не помогло =) руки видимо кривые хд
Так как я новичек, хотел спросить, если нарезку делать в вегасе это геморное дело? Просто хочется начать учится делать клипы, уже сразу на прогах которые не придется потом менять.. =) скачал АЕ и примьеру, но я так понял это для склеивания и создания эффектов... а для нарезки все советуют, этот вариант предложенный Агрессором!..) в общем не знаю что лучше? мучатся дальше с этим вариантом или пользоваться вегасом ?)
Wuki   User profile
  03.11.2010 21:03
Default Avatar
У меня проблема когда после пункта "Кодирование нарезки" становится видео Format: Huffman,а видео до сжимания Format: RGB. Проблема в том что у меня превьер CS5 и он не пренимает Format: Huffman что делать??
feanor51   User profile
  29.10.2010 04:43
Default Avatar
разобрался, сделал
на выходе получил файл весом в 840 кб,
обуревают черт возьму дикие сомнения, что я накосячил в одном из пунктов нарезки
p.s. первый раз занимаюсь подобным
YDAp   User profile
  21.09.2010 14:57
zmaster написал(а):
начало и кончало


эпичная очепятка
zmaster   User profile
  21.09.2010 12:44
Default Avatar
p0mka написал(а):
получилось видео размером 7гб (в МКВ оно весило 600мб).
Это нормально?

Ну да.
Лучше вырезать в VirtualDub'е только нужные отрезки (Нажатием на клавиши "Home" и "End" задается начало и кончало отрезка).
p0mka   User profile
  21.09.2010 11:01
Все прочитал, сделал как написано.
В результате получилось видео размером 7гб (в МКВ оно весило 600мб).
Это нормально? и теперь мне в Вегасе работать с этим видео?
P.S я абсолютный новичек, раньше просто конвертил МКВ в AVI своим конвертером.
TERMIT   User profile
  07.09.2010 02:16
"После установки находим файлик "avss.dll" (он устанавливается с Haali Media Splitter и по умолчанию находится в "C:/Program Files/HaaliMatroskaSplitter/avss.dll")"

Почему-то упорно не желает ставится куда надо. Нашел в к-кодек пак папке Оо.
Файла avss.dll нет вообще... что можете посоветовать? ^^

З.Ы. Попробовал еще раз... после переустановки проги 4 раз стало то, что я хотел) извините за беспокойство.
zmaster   User profile
  06.09.2010 17:14
Default Avatar
Никто не побеспокоен. Если есть вопросы по статьям - смело обращайтесь. Авторы статей и сочувствующие попытаются помочь.
Pheeby   User profile
  06.09.2010 17:11
"Пуск" находится в левом нижнем углу экрана. :)

Да просто я сколько раз туда заходила, там проги не было. То ли комп тогда еще не понял, что она была уже установлена (на F только фтпклиент был). Вот только что зашла, нужная папка появилась... Так что и VFW configuration найдена. Видимо, всё же нормальная прога.

Зачем тебе вот это?
От безысходности X)

В общем, простите за беспокойство)))
zmaster   User profile
  06.09.2010 16:31
Default Avatar
Pheeby, вот же

Пуск - Программы - ffdshow - VFW configuration (Конфигурация VFW интерфейса).
"Пуск" находится в левом нижнем углу экрана. :)

Pheeby написал(а):
makeAVIS


Зачем тебе вот это?

Pheeby написал(а):
VFW configuration открыла только сразу после установки, после того, как я это окно закрыла, больше не нашла, как открыть.


Наводит на мысли. У тебя случаем не гамноffdshow?.. Ой, "ffdshow из кодек пака или чего-то подобного." :)
Pheeby   User profile
  06.09.2010 16:13
Нам понадобится установленный с VFW-интерфейсами ffdshow. Зайдите в Пуск-Программы - ffdshow - VFW configuration и на закладке Decoder поставьте libavcodec напротив Huffyuv.

Подскажите, пожалуйста, где эту закладку искать... Как выглядит открытая прога ffdshow? У меня при установке .exe файл зовется makeAVIS и выглядит открытым так: http://s54.radikal.ru/i145/1009/c6/16443f3d5aa3.jpg

VFW configuration открыла только сразу после установки, после того, как я это окно закрыла, больше не нашла, как открыть.

Aggressor   User profile  Video channel
  01.09.2010 20:03
oven666, читай статью заново. Особенно раздел «инструментарий».
zmaster   User profile
  29.08.2010 17:53
Default Avatar
oven666, попробуй переустановить AviSynth.
oven666   User profile
  28.08.2010 23:37
переустановил систему и теперь файл avs не открывается в VirtualDabe пишет ошибка скрипта there is no function named "DSS2"
Aggressor   User profile  Video channel
  28.08.2010 15:36
Ruzulko, сочувствую :(
Ruzulko   User profile
  28.08.2010 05:29
Default Avatar
Пуск-Программы - ffdshow - VFW configuration и на закладке Decoder поставьте libavcodec напротив Huffyuv
чет не могу найти :(
ALuCARcl   User profile
  04.08.2010 11:28
Turbo написал(а):
Ищите описания ошибок по коду в инете:
http://forum.doom9.org/showthread.php?t=151446#post1354617


Последовал ихнему совету и всё заработало. Благодарю за помощь.
Turbo   User profile  Video channel
  04.08.2010 11:22
Default Avatar
Ищите описания ошибок по коду в инете:
http://forum.doom9.org/showthread.php?t=151446#post1354617
ALuCARcl   User profile
  04.08.2010 11:04
Ещё грабли у меня. Даб не хочет открывать скрипт:
Can't open E:\b271.mkv: 80040154
(E:\ishodnik.avs. line1)
С чего бы?
welivetoday   User profile
  03.08.2010 21:29
avss.dll скопирован в папку плагинов AVISynth?

да


---------
Все, разобрался с проблемой... Полностью удалил ависинт, потом заново его установил, заработало
ALuCARcl   User profile
  03.08.2010 22:14
welivetoday, аналогичная проблема. Правда у меня ещё и DirectShowSource почему-то не работает.
---------
Turbo, я конечно не welivetoday, но avss.dll в папку плагинов скопировал и ничего ни Даб ни Windows Media не видят.
Turbo   User profile  Video channel
  03.08.2010 19:48
Default Avatar
welivetoday, avss.dll скопирован в папку плагинов AVISynth?
welivetoday   User profile
  03.08.2010 19:22
Не хочет окрывать скрипт, пишет: Avisynth open failure: Script error: there no function named "DSS2"
Меняю DSS2 на DirectShowSource - нормально открывает.

До этого вроде все нормально работало
Urchina   User profile
  30.07.2010 22:45
zmaster, Спасибки
Вы просто чудо !!!
zmaster   User profile
  17.08.2010 22:30
Default Avatar
Про звук.
Без дополнительных программ максимально качественно вырезать звук из MKV/MP4 затруднительно. Лучший способ – использовать ffms2 (Смотрите статью Сад камней (автор Aggressor) , раздел «Нарезка»). После установки этой штуки нужно создать .avs скрипт и написать в него следующее (Только это!):

Audio = FFAudioSource(X)
Video = FFVideoSource(X)
AudioDub(Video, Audio)

X здесь – путь к файлу. Например:

Audio = FFAudioSource("D:\Yourfile.mkv")
Video = FFVideoSource("D:\Yourfile.mkv")
AudioDub(Video, Audio)

Откройте скрипт в VirtualDub. Теперь вместе с видео в кусочке, который вы вырежете Vdub’ом, будет звук. Но! Необходимо проверять не разошелся ли звук с видео.
Если будут глюки, заменить FFVideo на dss2 с нужным параметром fps. Если они не прикратятся, заменить FFAudio на DirectShowSource. Например:

Audio = FFAudioSource("D:\Yourfile.mkv") # Или DirectShowSource("D:\Yourfile.mkv")
Video = dss2("D:\Yourfile.mkv", fps=23.976)
AudioDub(Video, Audio)

Вырезая таким образом не придется подгонять видео со звуком в редакторе.
Это если нужен фрагмент. Если нужна вся дорожка, тут лучше вытащить ее из контейнера и перекодить в .wav
Про особенности применения ffms2 читайте в Сад камней (автор Aggressor)

Urchina написал(а):
где искать:
"предиктор- plane, и чекбокс "Adaptive huffman tables"...
что-то я все во вкладке Decoder облазила но не нашла... у меня там на русском половина...


Идем в VirtualDub’е "Video" -> "Compression". В появившемся списке выбираем (выделяем) "ffdshow Video Codec". Жмем "Configure". В появившемся окне, сверху есть два раздела – "Encoder" и "Decoder". Жмем на "Encoder". Находим надпись "Сжатие:" (Прямо под "Encoder"), напротив которой есть выпадающий список, в котором есть следующие надписи (сверху вниз): MPEG-4, DivX 3, MS MPEG4 v2 и т.д.. Находим и выбираем "HuffYUV". В окне "Конфигурация видео декодера ffdshow" есть список разделов: "Общие", "Оценка движения" и т.д.. Выбираем "Общее". Выставляем следующие параметры:
Тип Цвета: YV12
Предиктор: Плоскость
Ставим галочку на Адаптивные таблицы Хаффмана.
Все жмем "Ок" и приступаем к нарезке.
Для нарезки можно воспользоваться кодеком Лагарит. (Даже лучше). Смотрите Сад камней (автор Aggressor)

Разумно будет вырезать только нужные сцены. В VirtualDub’е нажатие на клавишу "Home" – начало отрезка, клавишу "End" – конец, соответственно.

Успехов!
Urchina   User profile
  30.07.2010 21:49
zmaster, нет... в принципе не нужен в данном случае, но вдруг понадобится...
И еще, где искать:
"предиктор- plane, и чекбокс "Adaptive huffman tables"...
что-то я все во вкладке Decoder облазила но не нашла... у меня там на русском половина...
zmaster   User profile
  30.07.2010 20:26
Default Avatar
Urchina написал(а):
Когда воспроизвожу файл avs в проигрывателе, нет звука... это нормально или я опять где-то накасячила?



Это нормально. А у тебя тот случай, когда для клипа нужен звук из исходника?
Urchina   User profile
  30.07.2010 20:14
Можно еще нубский вопросик: Когда воспроизвожу файл avs в проигрывателе, нет звука... это нормально или я опять где-то накасячила?


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