Статьи 

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


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

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


Aggressor   User profile  Video channel
  06.08.2009 11:18
BesrezeN
Нужно, подойдет.
BesrezeN   User profile
  03.08.2009 19:00
Если используется несколько исходников с разной частотой кадров, нужно ли свести все к одному значению?
И подойдет ли для этого команда AssumeFPS("ntsc_round_film/video")?
Aggressor   User profile  Video channel
  24.07.2009 10:47
Holy Pervert, рассчет был на то, что раз ты можешь смотреть аниме, которое хочешь нарезать, то кодеки у тебя уже установлены.
Holy Pervert   User profile
  13.07.2009 09:51
Замечательная статья. ;) Открыл для себя новый способ конвертирования mp4 и mkv исходников. Спасибо. =)

Aggressor, мне кажется, стоит добавить для удобства ссылку на ffdshow. =)

Полагаю, это то, что нужно: http://sourceforge.net/projects/ffdshow-tryout/
Lusi_7   User profile
  22.06.2009 09:39
Нет. Разрешение как раз 1920х800.... оно там уже без чёрных полей сверху и снизу, а вот у второй части этого фильма как раз 1920х1080 , т.к. оно с чёрными полями, но вторую часть Вегас берёт просто так так что с ней проблем нету, кроме того что битрейт в ней 60 fps, жууутььь....
Aggressor   User profile  Video channel
  21.06.2009 09:57
Lusi_7, во-первых, разрешение странное. Может, 1920х1080, а не 1920х800?
В любом случае, вес вполне ожидаемый для такого разрешения и длительности. Благо, терабайтные винты уже доступны по нормальным ценам :)
Lusi_7   User profile
  13.06.2009 21:16
Ох... только 80% - а занимает уже 103 Гб жееесть...
Lusi_7   User profile
  13.06.2009 19:11
Спасибо! Большое! Вот что получилось:
Видео: Исходник - hdtv 1920 * 800 Весит 15Гб
На выходе - 1920 * 800, без звука, кусочек в 11 сек. весит 261 Мб. Если честно думала меньше будет, сделала всё как в статье до самого конца. Но наверное с таким разрешением невозможно добиться лучшего эффекта
SDemon   User profile
  09.04.2009 22:16
Домо аригатоу автору - а я на ночь комп оставлял с конвертором ) .... терь наверно не буду
Minako   User profile  Video channel
  10.03.2009 09:01
malix, почитай ниже комментарий Aggressorа
malix   User profile
  01.03.2009 08:28
Default Avatar
люди помогите, может что то не то делаю, сохраненный файл без звука, еще заметил после вставки скрипта и начала работы VD, в колонке аудиоданные ничего не происходит.
Kumiko-san   User profile
  26.02.2009 12:05
говорю свое НЯ аффтару) аригато)
Minako   User profile  Video channel
  23.02.2009 21:55
ооооо спасибо большое!!!Я как раз такой урок искала^___^
Aggressor   User profile  Video channel
  21.02.2009 21:07
Сорри, ребята, я сюда забываю заглядывать. Turbo обещал сделать все новые сообщения в одной ленте, но пока не сделал.

Lusi_7, пойдет для всего, что может проигрываться в твоей системе, в т.ч. и для WMV3.

DoXtor, идея в том, что для нарезки под клип оригинальный звук не нужен.

May be, на сорсфорже бывают зависаловки, но проходят сами.
May be   User profile
  12.02.2009 21:05
Все спасибо, помощь не нужна, уже пошло.
May be   User profile
  12.02.2009 21:03
Aggressor у меня проблемка MediaInfo не хочет загружаться, страница не открывается, что делать то?Подскажи, если не трудно.Заранее благодарю.
DoXtor   User profile
  03.02.2009 15:52
Default Avatar
Делал все как написано видео кодится, но без звука. Однако плеер без встроенных кодеков открывает эту мкв без труда и со звуком. При открытии в виртуал дабе звука тоже не наблюдается. Есть какие идеи?
Lusi_7   User profile
  27.01.2009 15:29
А это подойдёт для видео формата avi с кодеком WMV3 ?
Aggressor   User profile  Video channel
  24.01.2009 14:42
Lusi_7, а чем целый фильм принципиально отличается от кусочков, кроме размера? Тут уж кому как удобнее работать.
Lusi_7   User profile
  23.01.2009 14:33
Народ, я так понимаю под словом НАРЕЗКА подразумевается ЦЕЛЫЙ перекодированный фильм (аниме) готовый для работы с редактором, а не отдельные кусочки готовые для монтажа... ? Я права?
sparki   User profile
  19.01.2009 01:35
Default Avatar
Статью я читал внимательно ))

Проблема таки решилась переустановкой ffdshow с поддержкой avcx264.

Спасибо за помощь.
Aggressor   User profile  Video channel
  19.01.2009 00:36
Статью читать внимательно, от начала до конца, и делать все, что в ней написано.
sparki   User profile
  19.01.2009 00:55
Default Avatar
Да плеер не хочет проигрывать мкв. Только вот как Обучить ffdshow декодировать AVC-поток? Скачать кодеки чтоли?
Или нада рыться где-то в настройках?

В любом случае спасибо за помощь.
Aggressor   User profile  Video channel
  18.01.2009 12:48
sparki, чтобы это шаманство у тебя заработало, надо поставить декодер для х264 хотя бы. Пуск-выполнить- mplayer2. В открывшемся плеере попробуй проиграть МКВшку. Что, не играется? Тогда какие могут быть вопросы к нарезке, если твоя система не в состоянии просто проиграть МКВ без плеера со встроенными сплиттерами и декодерами?
1) Обучи ffdshow декодировать AVC-поток.
2) Добавь первой строкой в скрипт LoadPlugin("C:\Program Files\Haali\MatroskaSplitter\avss.dll")
3) Открывай avs-файл в дабе, без всяких лоадскриптов- просто перетащи файл туда, или через Ctrl+O.
Все.
sparki   User profile
  17.01.2009 21:18
Default Avatar
Итак после долгих мучений у меня появились некоторые результаты.

1)Если затаскивать скрипт:Directshowsource("ishodnik.mkv")
то он говорит что не найден видео поток.
2)Если же делать тоже самое с авишкой то он пашет )))

Следовательно возникает вопрос, а почему он не пашет с мквшкой?

ЗЫ: с DSS2 он не пашет вообще. Говорит что нет у меня такой функции...

Но на этом все не закончилось когда даб не находил видео поток то ругался на отсутствие какой то дллки. Я нашел ее скачал и тогда даб выдал мне следующее: Avisynth open failure: imagesequence has invalid parametr string (bug in filter)
Я вконец запутался...
sparki   User profile
  17.01.2009 20:00
Default Avatar
Ну расширение то я пробовал менять еще в самом начале )).

Попробовал тупо затащить скрипт в даб, вылазит такая хрень.

"Avisynth open failure
Script error: There is no function named "dss2"

Я понял что ничего не понял.


Вопрос. Как нада пихать скрипт в даб? Ран скрипт или просто затащить? В первом случае вылазиет первая табличка во втором вторая.
Sagingali   User profile
  17.01.2009 19:19
у блокнотовского файла окончание "*.txt"
при сохранении ты должен вместо "*" написать "имя", а вместо "txt" написать "avs".
и если путь и имя в скрипте верные, то должно запахать.

больше ничем помочь не могу.
sparki   User profile
  17.01.2009 18:48
Default Avatar
Да сделал. Там правда в папке PlugIns тока одна какаято папка находится... ну и терь еще avss.dll

пробовал так же пихать авишки и мпеги. Выдает тоже самое.
Sagingali   User profile
  17.01.2009 16:25
sparki

После установки находим файлик "avss.dll" (он устанавливается с Haali Media Splitter и по умолчанию находится в "C:/Program Files/HaaliMatroskaSplitter/avss.dll") и копируем его в папку плагинов ависинта (по умолчанию "C:/Program Files/AviSynth 2.5/plugins").

эту операцию не забыли сделать?
sparki   User profile
  17.01.2009 06:06
Default Avatar
У меня проблемы. Так как нуб в скриптах, не могу утверждать что проблемы не из-за рук.

Скопипастил скрипт в блокнотовский файл. Еснно поменял все и путь и имя. Кирилицы нет. Пробую скормить дабу пишет:"Error during script execution at line 1, column 5: variable dss2 not found
DSS2("ishodnik.mkv")"

Если я понимаю правильно то даб не может найти файл, хотя он есть там где я указал.

В любом случае надеюсь на вашу помощь и советы.


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