Статьи 

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


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

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


Last Wolf   User profile
  05.08.2011 13:36
Извините, я всё сделала, у мну всё получилось. Одна перекодированная серия вышла на 2,47 Гб. Мне нужно сделать 82 серии (выборочные из аниме Реборн), и 200 гигов свободного пространства у меня, к сожалению, нет. С помощью какой программы можно существенно уменьшить вес файла без потери качества?
Aggressor   User profile  Video channel
  03.08.2011 22:47
altermann, можно. Рекомендация уменьшать разрешение применима тогда, когда его есть куда уменьшать.
vivan   User profile
  02.08.2011 22:09
video = DSS2 ("C:\Ishodnik.mp4")
audio = DirectShowSource ("C:\Ishodnik.mp4", video = false)
AudioDub (video, audio)
Carpet-man   User profile
  02.08.2011 00:14
Собственно, в Дабе не проигрывается музыка (Которая очень нужна). Через пуск-выполнить-мплэер2 музыка работает. В чём может быть проблема, и как её решить?
Carpet-man   User profile
  01.08.2011 22:48
Вопрос снят.
Carpet-man   User profile
  01.08.2011 21:53
Вопрос. Переустановил винду, отформатировал диск с системой. Перестали работать MP4 и MKV, устанавливал ffdshow - Не помогло. Что делать? Из-за этого не могу сесть за Даб.
altermann   User profile  Video channel
  28.07.2011 20:15
Еще вопрос. У меня исходник 640х480. В нем есть черные полосы. Я их естественно вырезаю в скрипте. А разрешение прописываю в скрипте Spline36Resize(640,480), но если не обрезать, будет где-то 637х480. Можно ли так увеличивать разрешение (пусть даже на 3 пикселя), как это делаю я? На выходе же смотрю - все хорошо: полос нет, разрешение 640х480.
vivan   User profile
  26.07.2011 18:40
Попроще пишется слитно - это раз.
А во-вторых - куда уж проще? Скрипт пишется моментально, остается только открыть его в дабе и отрезать нужное. Ой как сложно.

Конечно можно поступить сложнее - сразу закинуть видео в редактор, сделать часть проекта, наткнуться на всякие веселые вещи, и только потом сделать нормальную нарезку ;)
Fox114   User profile  Video channel
  26.07.2011 17:08
а есть способы по проще?
altermann   User profile  Video channel
  22.07.2011 22:31
спасибо
vivan   User profile
  22.07.2011 22:10
Haali Media Splitter его поддерживает, так что по идее да.

Проблем "потом" возникнуть не может, ибо после нарезки все видео пережимается в другой формат, который не зависит от исходного.
Так что если сразу нет ошибок и артефактов - то все ок.
altermann   User profile  Video channel
  22.07.2011 20:22
Поддерживает ли программа формат ogm? Не возникнет ли потом проблем с его кодированием, монтажем рендингом в ае?
vivan   User profile
  20.07.2011 21:42
fedya2008 написал(а):
KioHiME
файл не должен быть в корне, просто путь тоже не должен содержать русских букв(я обычно еще папку создаю new)

Он также не должен быть слишком длинным.

fedya2008 написал(а):
я не понял почему другие нельзя, да и обычный avc при 6000 кбит/с, в двух проходах(может и в одном) не испортят видео(правда если не 1080р, там поболее надо)

Суть нарезки в том, чтобы получить видео, которое будет нормально работать в редакторе (о чем и написано в первом предложении).
Если жать в avc - то во-первых обязательно intra-only, иначе при сложном монтаже возникнут проблемы.
А во-вторых может на первом этапе и кажется, что потерь нет - но на самом деле они есть, что вылезет боком в процессе. Нет, ну конечно если делать клип для ютубика/котактика - то всем на качество плевать.
В общем битрейт нужен на порядок больше... Да и вообще битрейт это понятие относительное, лучше оперировать соотношением бит-на-пиксель, а проще - постоянным качеством = crf.

fedya2008 написал(а):
Spline36Resize можно поменять на другой Spline64Resize(говорят лучше) или Lanczos4Resize

Он не лучше, он просто другой.
fedya2008   User profile
  20.07.2011 19:48
KioHiME
файл не должен быть в корне, просто путь тоже не должен содержать русских букв(я обычно еще папку создаю new)
в ffdshow много разных кодеков не снижаюжих качество, я не понял почему другие нельзя, да и обычный avc при 6000 кбит/с, в двух проходах(может и в одном) не испортят видео(правда если не 1080р, там поболее надо)
вообще автор молодец
Spline36Resize можно поменять на другой Spline64Resize(говорят лучше) или Lanczos4Resize
Извините конечно, если я не такой специалист, как вы, так что предлагаю считать это просто моим мнением.
Aggressor   User profile  Video channel
  15.07.2011 22:56
На Вин7 просто воткнуть и не поможет, надо побороть кодеки винды сначала. Я уже писал, как это сделать (сад камней). Алсо, ставь 32битные кодеки и ависинт.
GoPblHbl4   User profile
  15.07.2011 16:38
Не помогло
Aggressor   User profile  Video channel
  13.07.2011 19:12
GoPblHbl4, попробуй поставить ffdshow.
maksoon, никогда не сталкивался с такой проблемой. Попробуй обновить версию Даба и в Options-Preferences поэкспериментировать с галочкой «Directly decode uncompressed YUV sources».
PirogSV, спасибо за порцию хорошего настроения, продолжай писать откровенно умные статьи. :)
PirogSV   User profile
  12.07.2011 13:32
Default Avatar
Откровенно тупая статья, но не в том смысле, что плохо написана, а в том, что новичку ничего не скажет. Проще надо писать, не все живут в настолько виртуальном мире, что все термины-понятия знают и могут легко оперировать с указанными инструментами и тп :)
Втыкаемся по ссылкам ниже, намного проще, как раз для новичков:
http://fan-creat.ru/showthread.php?t=288
http://fan-creat.ru/showthread.php?t=284
maksoon   User profile
  05.07.2011 18:53
Default Avatar
такая проблема: при применении лагарифа виртуалдаб проигрывает видео но в статике черный эркан. то есть нарезать не могу,не вижу что резать. если без компрессии выбираю скрипт все нормально - стоп кадр виден,не чернеет. так не могу нарезать - исходник 1920х800,размеры гигантские. как быть?
GoPblHbl4   User profile
  03.07.2011 19:45
При открытии мкв выдаёт эту ошибку

http://fastpic.ru/view/26/2011/0703/fa7b9585b07ffebd1c5c77a970916278.jpg.html

Вин7 х64, кодеки стоят 64хбитные, Ависинх, Хаали, всё на месте, всё по инструкции
vivan   User profile
  30.06.2011 12:22
o_O
Например можно аудио потом подшить без конвертирования.
А вообще проще использовать например Xvid4PSP 5 - скрипт генерируется автоматом, только кнопочки надо тыкать.
KioHiME   User profile
  30.06.2011 08:03
Aggressor написал(а):
KioHiME, так и должно быть. По идее для АМВ-нарезки звук не нужен.


Просто я вашу статью еще немножко не по назначению юзаю .
Я по этому же принципу кодирую аниму для просмотра на кпк=)
vivan   User profile
  20.06.2011 16:20
Узнать чем же видео сжал...
Sora26   User profile
  19.06.2011 18:20
всё сделал) но вегас 10 нехочет открывать видео которое получилось,чё делать?
Sora26   User profile
  19.06.2011 17:12
мне лишь надо убрать чёрные полосы, я их убрал но видео сохраняется в гигах,как сохранить нормально?в дабе у меня нет lossless codec
Neko Baka   User profile
  17.06.2011 21:20
[quote="KioHiME"]у мя было по началу такое, иногда они просто не обосновано вылетают даже если все правильно находиться в корне и скрипт правильно прописан
vivan   User profile
  15.06.2011 21:44
dozer92,
у видео сжатого без потерь битрейт весьма нехилый - он тупо не успевает его считать с диска.
А в редакторе все кэшируется в память, поэтому там на это пофиг.
dozer92   User profile
  15.06.2011 21:41
Фак е, все без проблем, спасибо Огрессору...Ток 1 косячок-выходной ави-файл чутка подтормаживает в обычном плеере, при чем в определенных местах...Некоторые не тормозят. Кодеки стоят. Как бэ пофиг, в АЕ все норм, но прост интересно...
KioHiME   User profile
  15.06.2011 02:14
Кстати, у кого проблемы (вылезают ошибки, а наличие avss.dll в папке с плагинами AVISynth не спасает) - я тоже с этим долго маялся и в ходе экспериментов выяснил пару закономерностей (если тут уже писали, сори).

1. файл, прописанный в скрипте, должен быть именно в корне каталога (т.е. D:\Ishodnik.mkv). Файл, расположенный на рабочем столе он не увидит.
2. в названии файла не должно быть русских букв. Вообще.

У меня было сразу оба косяка, и как только я их исправил - все заработало.
Aggressor   User profile  Video channel
  11.06.2011 18:48
Neko Baka, поздравляю с серьёзным достижением! Точно говорю, что в редакторе полей быть уже не должно.

KioHiME, так и должно быть. По идее для АМВ-нарезки звук не нужен.


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