Статьи 

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


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

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


brdm-69   User profile
  04.04.2010 14:57
The file "D:\Mers\Anime\One Piece\One Piece Ep.254.avs.txt

должен быть файлом One Piece Ep.254.avs
Turbo   User profile  Video channel
  04.04.2010 14:49
Default Avatar
Mers, попробуй AVS файл открыть любым плеером. К примеру Media Player Classic. Если октроется все ок, если не откроется, что то не так с AVISynth.
Mers   User profile
  04.04.2010 12:46
---------------------------
VirtualDub Error
---------------------------
The file "D:\Mers\Anime\One Piece\One Piece Ep.254.avs.txt" is of an unknown or unsupported file type.


Вот что он пишет на включение скрипта, это после того как я переустановил Ависинт, а до этого я его просто открывал и ничего не происходило.
Aggressor   User profile  Video channel
  04.04.2010 12:09
brdm-69, +1
brdm-69   User profile
  04.04.2010 08:45
Ты в даб видео или скрипт кидал???

Как показала моя богатая практика - около половины новайсов по 10 раз читает статью, лезет на стену, истерит - но по прежнему продолжает пихать в даб видеофайл!
Mers   User profile
  03.04.2010 21:52
Все сделал по инструкции Agressor`а, попытался открыть в Dub`е видео и вот, что выдало:
---------------------------
VirtualDub Error
---------------------------
Couldn't locate decompressor for format 'WMV3' (unknown)

VirtualDub requires a Video for Windows (VFW) compatible codec to decompress video. DirectShow codecs, such as those used by Windows Media Player, are not suitable.


Как исправить проблему?
anTip   User profile
  09.03.2010 14:14
Default Avatar
После совета Aggressora я установил ffdshow, и в место одной проблемы появилось две (даб выдавал две ошибки). Тогда я залез в плагины Авесента и увидел там файлы установленные ffdshow (Видемо, после установки ffdshow, в папку с плагинами Авесента, устанавливаются и какие-то плагины ffdshow). После того как я удалил эти плагины и переустановил Авесент, проблема, наконец, решилась и даб заработал.
Aggressor респект и уважение тебе. Спасибо.
zmaster   User profile
  09.03.2010 13:48
Default Avatar

anTip ,
Couldn't locate decompressor for format 'yyyy'(unknown).
VirtualDub requires a Video for Windows(VFW) compatible codec to decompress video.

Поток закодированный через x264.exe ни в каком дабе не откроется на прямую ибо ето не есть vfw.

Кроме описанного есть еще способ для нарезки с матрешки, но он не такой практичный для клипмейкера зато безотказный. Нужны mkvmerge(mkvextract для вытаскивания видео потока), dgavcindex(для декодирывания avc), Virtual Dub и AviSynth.
Aggressor   User profile  Video channel
  08.03.2010 15:38
Эль-тян, клип — это когда ты берёшь нарезку и ложишь её на музыку. Зачем в нарезке для клипа звук?

anTip, а у тебя в системе есть чем декодировать поток? Поставь ffdshow 32-битный или убедись, что в нём включено декодирование х264.
anTip   User profile
  07.03.2010 19:45
Default Avatar
Есть такая проблема и ее уже поднималYukooj
"Делал все по инструкции!!!ННо когда пытаюсь открыть фаил в Дабе то выдаёт ошибку Avisynth open failure: не может открыть фаил и ошибку 80040217 PS Читал комменты и пробовал ранее данные советы не помогло(((Не исключаю причину кривых рук))хотя все проверял и все вроде было правильно.Заранее спс! "
Пробовал совместно с trampler решить эту проблему здесь http://www.creaspace.ru/forum/topic.php?topic_id=874 но ни чего не получилось. Профессионалы не молчите.
i-de   User profile
  06.02.2010 17:56
Default Avatar
Aggressor,
Ну впринципе основная проблема поста и была в этой полоске...
Вообщем думаю да виноват исходник...
Не знаю кому поможет нет... но полоска у меня возникала если я исходник кодирую в "RGB24", при кодировании по таблице Хафмана полоски и след простыл...
Aggressor   User profile  Video channel
  05.02.2010 22:23
i-de, вот что бывает, когда читаешь статью по диагонали. Лучше ты перечитай её ещё раз и внимательно, там есть все ответы. Кроме разве что полоски-зеркала, но это уже вина исходника, её надо просто обрезать, как чёрные поля.
i-de   User profile
  01.02.2010 16:14
Default Avatar
Прим всем)
Собственно домо аригато за статью!!! побольше бы таких)))

Я немного занимаюсь клипмейкерством и моя больная тема всегда приходилась на кодировку, а соответственно и на качество... Я в этом чайник Т_Т
Недавно прочитал кучу статей и в голове маленькая каша...

возникла такая проблема:
видео с конфигами:
***
D:\MONTAZH\lib\Video\Trigun HQ\Trigun - 01.mkv
Bit rate : 1946 Kbps
Video #1
Codec : MPEG-4 AVC
Codec/Info : MPEG4 ISO advanced profile
PlayTime : 24mn 36s
Width : 768 pixels
Height : 576 pixels
Display Aspect ratio : 4/3
Frame rate : 23.976 fps
Audio #2
Codec : AC3
Codec/Info : Dolby AC3
Channel(s) : 2 channels
Sampling rate : 48 KHz
***


Перекодирую в несжатый формат скриптом:

***
DSS2("D:\MONTAZH\lib\Video\Trigun HQ\Trigun - 06.mkv",fps=23.976)
ConvertToRGB24
Spline36Resize(768,432)
AssumeFPS("ntsc_round_film")
***


Возникает вопросик и проблема:
1) Spline36Resize(768,432) - при этом VDM обрезает поля видео так?
2)При выводе в ави файл - снизу образуется полоса "отзеркаливания" верхних 1-3 пикселей (такое часто бывает при записи с аналогово ТВ в компресированный формат)... вот... где я промахнулся и как с этим бороться?)))
zmaster   User profile
  14.01.2010 09:08
Default Avatar
То есть HuffYUV дает такой же размер файла как RGB? Хм... На сколько ты уверен, что все сделал как написано в статье? Уверен, что получаешь отрезок в хафъюве? Чтоб вырезать нужный кусок эпизода в HuffYUV:
1) Открываешь avs скрипт в дабе (ConvertToRGB24 в скрипте уже быть не должно)
2) Ставишь video - Fast Recompress
3) Идешь video - compression - ffdshow video codec - жмешь configure.
4) Как енкодер выбераешь HuffYUV. Предиктор - plane(плоскость). Галочкой включаешь "Adaptive huffman tables"(адаптивные границы Хаффмана)
5) Жмешь "ок" и еще раз "ок"
6) Двигаешь ползунок по шкале кадров, выбираешь нужный фрагмент(клавиша Home - его начало, End - конец).
7)Сохраняешь видео
Такой момент: ffdshow video codec должен быть выделен в пункте compression. И режим компрессии при етом должен быть не Derect stream copy.
Я не знаю ситуацый когда хафъюв и рджеби дают одинаковый размер с одного и тогоже видео источника и с одним и тем же avs скриптом в котором написаны одни и те же команды с одинаковыми настройками . Видео в хавъюв весит значительно меньше чем в рджеби. Как пример: фрагмент длиной 00:00:06, с разрешением 640x368 и частотой кадров 23.97 весит: HuffYUV - 14,8mb
RGB32 - 105mb
Merkrow   User profile
  13.01.2010 18:35
zmaster, ну я сначала попробовал просто переделать в .avi, затем я уже использовал ffdshow для того, чтобы уменьшить вес видео, но при кодировании все-равно получается такой-же размер
zmaster   User profile
  13.01.2010 16:27
Default Avatar
Merkrow, подробнее напиши в чем проблема. Можешь начать с того, что именно у тебя не выходит: уменьшить разрешение или после кодирования твоего не сжатого видео его вес тебя не устраивает?
Merkrow   User profile
  13.01.2010 03:25
а не мы могли бы объяснить поподробней об уменьшении размера видео? просто я все сделал так-же как написано в статье, но при конвертировании все-равно размер стандартный, т.е очень большой

а за статью оооогромнеейшее спасибо!!! все очень просто и легко
S.A. Robert   User profile
  12.01.2010 10:01
Спасибо за статью, с ней смог наконец-то пользоваться дабом, а то раньше ничего не получалось.
Bugulme   User profile
  17.11.2009 03:06
Большое спасибо за статью, очень помогла! Наконец-то закончится этот геморрой с mkv)
KenJi.ko   User profile
  15.11.2009 12:15
Подскажите кто-нибудь плиз, проблема такая:
Работал в премьере с версией K-Lite Codec 5.0.0, скодировал один mkv исходник и налепил в премьере пол клипа. В итоге по своей глупости удалил старую и поставил последнюю версию K-Lite Codec. И теперь в премьере всё сбилось к проекте, как будто все нарезки сместились и нарушились. Возможно как-нибудь вернуть всё обратно?
Yukooj   User profile
  13.11.2009 00:31
Делал все по инструкции!!!ННо когда пытаюсь открыть фаил в Дабе то выдаёт ошибку Avisynth open failure: не может открыть фаил и ошибку 80040217 PS Читал комменты и пробовал ранее данные советы не помогло(((Не исключаю причину кривых рук))хотя все проверял и все вроде было правильно.Заранее спс!
MrEnigma   User profile
  09.11.2009 14:30
Ребята помогите!!
Тут недавно решил сделать аниме-клип.amv, сначала попробывал на Movie Maker, затупил, потом скачал Abode Video, затупил, и еще пять программ на эту же тему скачивал все тупят. Вчера скачал Vegas Movie Studio Platinum 8.0, шикарно, спецэффекты поналажил, сделал суперское видео, но вот, я его создал в формате .avi, включаю, а там "черный квадрат"!!!!!!
Я уже замучался, каждый раз все заново делать, руки опускаются. Хотелось самому сделать клип, но тут пипец!!
ПОМОГИТЕ!! Кто знает, что надо сделать!
Attacker   User profile
  07.10.2009 07:59
Да убирал. Проблема решилась, я обновил кодеки и поставил HuffYUV отдельно от ffdshow. Еще было забавно когда Даб ругался, что в одном куске 23.97600 fps а в другом 23.97602 fps и он их соединить не мог
B@rs   User profile
  06.10.2009 20:22
Attacker
А ты убирал звук в VirtualDub, когда нарезку делал?
Attacker   User profile
  06.10.2009 20:02
Намучался я к кодеком HuffYUV, сначала VirtualDub нарезку нарезал а вот открыть не мог, теперь After Effects не хочет открывать, пишет error(4) reading frames
Что делать?
B@rs   User profile
  06.10.2009 14:29
Сделал всё как тут написано (формат mp4). Выдаёт ошибку 80040154 (класс не зарегистрирован). Может кто-нибудь что-нить подсказать?

add: с командой DirectShowSource всё читается
Borovik   User profile
  04.10.2009 17:32
Ну во первых здравствуйте Aggressor. Конечно возможно не в тему, но хочу задать вопрос. Вот я ни разу не занимался клипами и созданием АМВ и решил попробовать. Во первых: можноли за короткое время научится созданию нормального клипа? во-вторых с чего лучше начать?
Zkabs_ad   User profile
  30.08.2009 09:06
а, ок, спс
Aggressor   User profile  Video channel
  24.08.2009 21:54
В дабе ресайзер хуже.
Zkabs_ad   User profile
  24.08.2009 21:11
а в дабе, без скрипта, никак не указать аутпут разрешение?


 Интересное на CreaSpace