Статьи 

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


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

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


Sagingali   User profile
  16.01.2009 22:44
спасибо автору за статью, пригодилась седня!
Aggressor   User profile  Video channel
  10.01.2009 01:45
Из области слонов ничего не понял. Ладно, будем считать, что в пути была кириллица или еще какие-то символы, которые Ависинт не любит.
spitanto   User profile
  10.01.2009 01:13
Aggressor, Turbo
спасибо!
слона-то я и не заметила :) прям в корень сразу не ложила (занудный он) - ложила в следующюю папку, а даже так, оказывается, не катит.
сейчас вроде всё путём :)
Aggressor   User profile  Video channel
  09.01.2009 20:18
spitanto, вырезай кусочек на пару секунд из проблемного файла с пом. mkvtoolnix и заливай на хостинг- будем препарировать )
Turbo   User profile  Video channel
  09.01.2009 19:05
spitanto, попробуй положить прямо в корень C:\ и попробовать открыть ещё раз.
spitanto   User profile
  09.01.2009 19:00
*.avs-файл не открывается в дабе. пишет:
http://pics.livejournal.com/spitanto/pic/000gg4yp
всё что советовали в теме раньше делала - эффекта нет :(
Aggressor   User profile  Video channel
  07.01.2009 22:52
...
"у меня оказывается всё это уже было выставлено по умолчанию кроме Adaptive huffman tables"
oven666   User profile
  07.01.2009 22:36
а где включаются "таблицы хаффмана" и что это такое?
Aggressor   User profile  Video channel
  07.01.2009 16:31
Ну 24 секунды- это имеет смысл. Хотя все равно похоже на то, что таблицы хаффмана не включены.
Ну а про АСГ, раз не работает- значит, не выполняешь условий для ее работы. Тут уж я ничего не могу поделать, т.к. условия описаны в документации.
oven666   User profile
  07.01.2009 15:00
гомен, 24 секунды =278 мегов вырезано из МКВишки длиной 24 минуты и весом 307 мегов с уменьшением разрешения от 1024Х780 до 768Х432 без аудио дорожки с великолепным качеством видео. Я не знаю (опыта не хватает) может это нормально?

общее есть: чем больше по весу нарезанные куски тем тяжелее получается готовый клип в Аддоб Премьере 3,
а прогу по сжатию ASG я уже скачивал и пытался юзать - ави файлы она преображает в МП4 с весом в 0 кб и они естественно не открываются.
Aggressor   User profile  Video channel
  07.01.2009 13:52
oven666, в хаффе четверть гига- это не 10 секунд, а около минуты. Это в несжатом 10 секунд могут занимать четверть гига.
И причем тут WMV? Нарезка материала и кодирование готового клипа вообще-то ничего общего не имеют, но на всякий случай:
Кодирование АМВ с помощью AMVsimple 4.0
oven666   User profile
  07.01.2009 12:54
[b]Aggressor[/b]

Спасибо. (у меня оказывается всё это уже было выставлено по умолчанию кроме Adaptive huffman tables)


Качество нарезки действительно отличное, но вот размеры...
если 10 секунд будут четверть гига занимать значит клип только в WMV можно будет делать. Авишка будет даже в сжатом виде под гигабайт((( *пошел резать Лелуша*
Aggressor   User profile  Video channel
  07.01.2009 11:44
oven666,
http://i.piccy.info/i3/58/54/728c7015a437fbe2038c2a9caceb.png
oven666   User profile
  07.01.2009 00:33
большое спасибо: действительно всё стало понятным. Один ньюанс:"Colorspace поставьте YV12, предиктор- plane, и поставьте чекбокс "Adaptive huffman tables"" где выставить эти вещи я так и не нашёл(((. Может подскажете?
exik   User profile
  06.01.2009 10:40
Default Avatar
оно было там да, но как оказалось проблема была в самом ависинте, переставил и все заработало)
Turbo   User profile  Video channel
  06.01.2009 10:12
exik, убедись что сделал это: после установки находим файлик "avss.dll" (он устанавливается с Haali Media Splitter и по умолчанию находится в "C:/Program Files/HaaliMatroskaSplitter/avss.dll") и копируем его в папку плагинов ависинта (по умолчанию "C:/Program Files/AviSynth 2.5/plugins").
exik   User profile
  06.01.2009 10:03
Default Avatar
а у меня такая шняга, DSS2("D:Ishodnik.mkv")
ConvertToRGB24 пишу вот это и дуб выдает ошибку "avisynth open failure: script error: there is function named "DSS2"(H:/My Video/v/b.avs, line 1)"
слэши специально тут так написал, ибо глючат)

но если ДСС2 заменить на DirectShowSource, то файл открывает как надо.

С чем может быть связанно?
Aggressor   User profile  Video channel
  27.12.2008 11:27
Проблема может быть в том, что путь к файлу задан символами юникода. Попробуй назвать файл попроще, переложить поближе к корню диска и редактировать скрипт редактором, который может сохранить plain text.
И проверь кодеки, которыми у тебя проигрывается в плеере твой мкв-файл- это не должны быть встроенные кодеки плеера.
Vergil Tarkin   User profile
  27.12.2008 02:33
С этого и начал, не дурак, не помогло.
Замечу, что делал все в точности по инструкции.
Чтобы решить проблему, скачал прогу XviD4PSP которая кодирует любой МКВ файл во что вашей душеньке угодно, хотя и тут встала проблема. По причине убогих знаний в области кодеков и кодировки видео вообще я не могу подобрать такие параметры, при которых 250мегабайтный МКВ можно было перевести в АВИ, операбельный для Вегаса. Это уже наверное идиотский вопрос, но не могли бы вы назвать, какие параметры надо задавать в таких случаях?
Aggressor   User profile  Video channel
  26.12.2008 20:22
Vergil Tarkin, слэшы поменяй на обратные ))
Vergil Tarkin   User profile
  26.12.2008 03:55
Даб не хочет открывать скрипт, та же самая ошибка
http://xs433.xs.to/xs433/08486/________-1851.jpg
С поправкой, номер ошибки: 80070003
Переустанавливал Mkv Splitter и Ависинт, не помогло. Оригинальная мквшка через пуск проигрывается, версия кодеков самая новая.
VinceRage   User profile
  25.12.2008 08:53
все, спасибо... выбрать та я выбрал libavcodek, да только чуть в другом окне...
Aggressor   User profile  Video channel
  24.12.2008 21:32
VinceRage, читай внимательно абзац про VFW-интерфейс.
VinceRage   User profile
  24.12.2008 19:53
при импорте кодированной нарезки в ае пишет неправильный формат
Djozef   User profile
  11.12.2008 17:08
Default Avatar
Все заработало, спасибо за помощь.
Сори что неправильно высказал свою мысль, я имел ввиду что в Вегасе не добавляется на рабочее место файл, там где все операции над файлом производиш)
Aggressor   User profile  Video channel
  11.12.2008 00:53
А что значит "не хочет добавлять в процесс"?
Вообще похоже на то, что VFW-интерфейс для HuffYUV не включен. Попробуй не жать в HuffYUV, а работать с Uncompressed RGB.
Djozef   User profile
  10.12.2008 19:02
Default Avatar
Все делаю по выше показаному способу. Файл воспроизводится, Вегас видит его, но добавлять в процесс не хочет, пишет: Video: Stream attributes could not be determined.
Что это может быть, подскажите.
Endymion   User profile
  30.11.2008 20:39
Спорить даже неочем. Соотношение сторон всегда считывается из информации в контейнере или в самом потоке видео, затем берется реальное разрешение и растягивается по полученным данным. Этому процессу наплевать какое разрешение в исходнике. Кратность 16 улучшает сжимаемость по ряду причин, но с аспектом оно и никак не связана. Конечно у потока h264 640x360 супер-хонтони-тру-реальное разрешение - 640x368 и оно может повлиять на аспект, но любой нормальный декодер (CoreAVC, FFDshow, MPC-HC...) подрезает его на лету так, что никто об этом и не догадывается.

Итог: если некратное разрешение влияет на аспект, то нужно выкинуть на помойку используемый декодер, плеер или обоих сразу.
-=[Hikari]=-   User profile
  30.11.2008 17:57
Aggressor, ладно, не будем спорить
Я просто по своему опыту говорю, что иногда такое бывает. А опыт - штука жутко субъективная
Aggressor   User profile  Video channel
  30.11.2008 11:15
-=[Hikari]=-, я настаиваю, что кратность 16 к соотношению сторон не имеет никакого отношения. 640х360. 360 не кратно 16, но соотношение сторон при этом идеальное 16х9, и никакой плеер не сможет это испортить.


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