Обработка и пересжатие видео [инструкция]

Тема закрыта
 
Автор
Сообщение

Rogvald ®

Пол: Мужской

Стаж: 1 год 3 месяца

Сообщений: 867

Репутация: 1006 [+] [-]

Rogvald · Создавать темы 22-Июл-2012 02:35

[Цитировать] 

Последнее обновление: 2012-01-22Данная инструкция поможет всем желающим делать качественные рипы и пересжать практически любое видео как душа пожелает. Изменение любых характеристик потока требует пересжатия. Частота кадров к характеристикам потока отношения не имеет - это скорость его воспроизведения. Сам поток представляет собой последовательность сжатых кадров.
Совет №1: хорошим тоном считается отдельная обработка аудио и видео с последующим сведением их вместе. Это избавит от множества потенциальных проблем с рассинхронизацией звука и видео.
Совет №2: используйте как можно более короткие пути к исходным материалам, состоящие только из латинских букв и цифр. Это поможет избежать странные вылеты программ из-за проблем с длинными/кривыми путями.
Предупреждение: не стоит пересжимать видео с разрешением превышающим исходное. Качество лучше не станет, т.к. детализации взяться неоткуда, а размер результата будет больше чтобы не было артефактов сжатия.

Инструменты

  • Весь процесс основан на работе с одной из двух программ-оболочек:
  • GordianKnot (для сжатия в XviD/DivX, x264 VfW)
  • MeGUI (для сжатия в XviD/DivX, x264 CLI)

Подготовка исходного материала

DVD (VOB), MPEG2 (MPG)

Этап №1 - Сброс содержимого DVD видео диска на жесткий диск.

DVD Decrypter

Программа "DVD Decrypter" уже довольно старая, но по-прежнему выполняет свою работу на должном уровне.

Иллюстрация

1. Выставляем "Mode->File".

Иллюстрация

2. Открываем "Tools->Settings".

Иллюстрация

3. Настраиваем опции закладки "File Mode" как показано на скриншоте. Опцию "Remove IFO Structure Protection" выбираем только в случае, если диск не копируется.

Иллюстрация

4. Выбираем привод, с которого будем копировать диск - "Source".
5. Выбираем папку, куда будем сохранять содержимое диска - "Destination".
6. Жмем кнопку обозначенную номером пять для запуска процесса копирования.
7. По окончании процесса в папке назначения будут находится файлы DVD с которых снята защита и готовые для дальнейшей работы.
Если на диске присутствуют разные версии фильма, то желаемую версию можно сбросить на жесткий диск в режиме "IFO."

Иллюстрация

SmartRipper

Еще одной удобной программой является SmartRipper. По-умолчанию программа опрашивает оптические приводы, но в правом верхнем углу есть пиктограмма проводника, нажав на которую, можно указать папку на жестком диске.
Программа может работать в двух режимах:

Files

В режиме "Files" можно скопировать содержимое диска как есть.

Иллюстрация

0. Указываем путь для сохранения результата.
1. Выставляем режим "Files"
2. Выбираем нужные файлы. Обычно фильм - это серия с самым большим размером.
3. Запускаем процесс кнопкой "Start".

Movie

В режиме "Movie" открывается куда больше возможностей. Копировать содержимое ДВД можно согласно логической структуре диска:
- если диск содержит разные версии, то можно получить нужную.
- при копировании можно сразу разбить материал на главы или ячейки.
- так же можно выбрать нужные главы или ячейки.

Иллюстрация


0. Указываем путь для сохранения результата.
1. Выставляем режим "Movie".
2. Указываем цепочку (programm chain), главы (chapters), ячейки (cells). Нужную цепочку можно определить по продолжительности.
3. В настройка указываем нужно ли разбивать поток на фрагменты и на какие именно.
4. Запускаем процесс кнопкой "Start".
Возможность разбиения на главы или ячейки особенно удобна, если нужно сжать диск с сериями или музыкальный диск. В этом случае, если каждый клип/серия - отдельная глава, можно извлечь содержимое диска сразу по клипам/сериям в отдельности.

DVDFab HD Decrypter

Здесь ничего нет.

Так же подойдет AnyDVD. Она снимает защиту на лету и содержимое диска можно копировать как и любые другие файлы.

Этап №2 - Подготовка проекта. Индексирование.

Индексирование нужно для более точного определения положения каждого кадра в исходном видеопотоке.
Воспользуемся программой DGIndex (идет в комплекте с GordianKnot и MeGUI).

Иллюстрация


1. Загрузим в программу файлы фильма. Их можно определить по занимаемому ими пространству. Как правило они занимают почти все место от общего.

Иллюстрация


2. Теперь жмем кнопку [F5] запуская тем самым режим предпросмотра. Справа появится окно отображающее характеристики видео. Смотрим на параметр "Frame Rate".

Иллюстрация



Здесь возможны следующие варианты:
25.000 fps - видео представляет собой стандартную PAL последовательность. Ничего делать в этом случае не требуется.
20.000 fps - видео так же представляет собой стандартную PAL последовательность, но в меню "Video->Field Operation" у вас выбран пункт "Forced Film". Нужно выставить "Honor Pulldown Flags".
29.970 fps - видео представляет собой NTSC последовательность. В этом случае обращаем внимание на значение параметра "Video Type" - если оно равно "NTSC", то делать ничего больше не надо, если же значение равно "Film" или "Film 95%" или выше, то наша последовательность создана при помощи дублирования некоторых кадров, которые необходимо удалить - для этого выставим пункт меню "Video->Field Operation" в "Forced Film".
23.970 fps - видео представляет собой NTSC последовательность и в меню "Video->Field Operation" у вас выбран пункт "Forced Film". Оставлять все как есть можно только в том случае, если значение параметра "Video Type" равно "Film" или "Film 95%" или выше. В противном случае надо выставить "Honor Pulldown Flags".
Впрочем предпочитаю оставлять 29.970 в любом случае и понижать частоту кадров фильтром IVTC непосредственно в процессе пересжатия. Причиной тому служит тот факт, что не раз попадались ситуации, когда понижение частоты кадров через DGIndex приводило к частичному присутствию чересстрочных кадров. Сказываются как раз те самые "Film 95%" параметра "Video Type". Ведь не 100%, поэтому иногда проскакивают чересстрочные кадры. Что было исключено при использовании фильтра IVTC.
3. Теперь перейдем к аудио.

Иллюстрация


Для того чтобы извлечь все звуковые дорожки нужно в пункте меню "Audio->Output Method" надо выставить "Demux All Tracks".
Чтобы извлечь дорожки выборочно выставляем "Audio->Output Method" в "Demux Tracks" и в "Track Number" отмечаем нужные дорожки.
Можно вообще не извлекать аудио дорожки, а сделать это потом. Для этого выставляем "Audio->Output Method" в "Disable".
4. Запускаем процесс создания проекта нажимая на кнопку [F4] и задаем название проекта.
5. После окончания процесса у нас будет проектный файл с расширением "*.d2v" и несколькими файлами с аналогичным началом названия - это аудиодорожки. В названии дорожек после слова Delay будет прописана необходимая задержка, которую нужно будет указать при сборке видео и аудио.
Альтернатива: для обладателей видеокарты на чипе nVidia существует утилита DGIndexNV.

Рекомендую создавать проектный файл только вручную, тем более не использовать для этого оболочку MeGUI по следующим причинам:
  • Нет никакой возможности настроить DGIndex как требуется. В частности поменять режим "Field Operations", что очень важно.
  • Вырезать нужную часть видео. Очень часто бывает так, что вместе с фильмом в одном потоке идет заставка или доп. материалы, которые могут располагаться как в начале так и в конце. Поэтому это надо обязательно проверять.
В MeGUI утилита DGIndex находится в папке "tools\dgindex".

Blu-Ray (M2TS)

Этап №1 - Сброс содержимого Blu-Ray видео диска на жесткий диск.

DVDFab HD Decrypter

Здесь ничего нет.

Так же подойдет AnyDVDHD. Она снимает защиту на лету и содержимое диска можно копировать как и любые другие файлы.

Этап №2 - Разложение на потоки.

В структуре Blu-Ray диска фильм может быть представлен как одним файлом, так и их множеством. В первом случае все просто и можно сразу переходить к следующему этапу - индексированию. Во втором же случае сначала надо собрать все куски в один. Правильный их порядок хранится в одном из списков воспроизведения *.mpls в папке "BDMV\PLAYLIST".
Чтобы найти нужный можно воспользоваться программой BDInfo. Ей надо лишь указать путь к папке со структурой Blu-Ray диска. Программа проанализирует содержимое и покажет информацию о всех списках воспроизведения и их содержимом. Нужный список воспроизведения определяется по его продолжительности.

Иллюстрация


Дальше есть два пути:
1. Извлечь потоки через программу tsMuxer, подав на вход соответствующий список воспроизведения.
2. Извлечь потоки через программу eac3to.
Первый способ не рекомендуется, т.к. tsMuxer не корректно компенсирует отличия длин видео и аудио потоков фрагментов при склеивании. В результате может появиться рассинхрон видео с аудио.
Правильнее использовать eac3to, т.к. она более точно компенсирует различия длин потоков фрагментов при склеивании. Плюс она умеет работать сразу со структурой Blu-Ray диска. Т.е. можно отказаться от BDInfo. Удобнее будет воспользоваться графической оболочкой для eac3to предназначенной как раз для извлечения потоков. Эта утилита так же встроена в комплекс MeGUI и может быть вызвана через меню "Tools -> HD Streams Extractor".

Иллюстрация


Утилита позволяет работать как с отдельным файлом *.m2ts, так и со структурой Blu-Ray диска. Режим переключается в разделе "Input".
"Select Folder as Input" - на вход подается структура Blu-Ray диска
"Select File as Input" - на вход подается файл *.m2ts

Иллюстрация

1. Выбираем режим (папка/файл) и путь к исходным данным.
2. Указываем путь для сохранения извлеченных потоков.
3. Отмечаем нужные потоки.
4. Ставим задачу в очередь MeGUI.
Остается только на вкладке "Queue" в MeGUI запустить процесс нажав кнопку "Start". В результате получим набор потоков для дальнейшей обработки.

Этап №3 - Подготовка проекта. Индексирование.

Индексирование нужно для более точного определения положения каждого кадра в исходном видеопотоке.

кодек AVC

Воспользуемся программой DGAVCIndex (идет в комплекте с MeGUI).

кодек VC1

Единственный свободно доступный способ открытия такого потока заключается в использовании FFmpeg или DirectShow. Подробнее способ описан ниже, в разделе "Все что проигрывается через плейеры (AVI, MKV, MP4, WMV, ASF, MOV, ...)". Возможно потребуется сначала перепаковать видеопоток в контейнер MKV. Для этого сначала нужно вытащить чистый поток "*.vc1" при помощи программы tsMuxer в режиме Demux и упаковать в MKV при помощи mkvMerge.
Альтернатива: для обладателей видеокарты на чипе nVidia существует утилита DGIndexNV.

Все что проигрывается через плейеры (AVI, MKV, MP4, WMV, ASF, MOV, ...)

Способ через FFmpeg предпочтительнее, т.к. DirectShow может иногда косячить.

FFmpeg

Устанавливаем последнюю версию фреймсервера AviSynth.
Качаем последнюю версию ffmpeg. На версии с префиксом "r" не обращаем внимание, это тестовые сборки. Версии с упоминанием "mt" - многопоточные и должны давать выигрыш по скорости на многоядерных процессорах, но могут быть не стабильными. Поэтому лучше скачивать стандартную версию. Из этого архива в папку "C:\Program Files\AviSynth 2.5\plugins\" копируем файл ffms2.dll.
Создаем текстовый файл с расширением *.avs и следующим содержимым:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\ffms2.dll")
FFVideoSource("C:\Film.mkv")
Открываем его в любом проигрывателе, редакторе вроде VirtualDub / VirtualDubMod или комплексе для сжатия и обработки видео MeGUI. Сначала придется подождать, это нормально, т.к. индексируется видеопоток.
Так же c помощью библиотеки FFmpeg можно получить доступ к аудиодорожке:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\ffms2.dll")
FFAudioSource("C:\Film.mkv")

Если нужна не первая дорожка, то после пути к фильму в функции FFAudioSource можно указать номер нужной дорожки:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\ffms2.dll")
FFAudioSource("C:\Film.mkv", 2)

При желании можно получить на выходе видео вместе с нужной аудиодорожкой:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\ffms2.dll")
V = FFVideoSource("C:\Film.mkv")
A = FFAudioSource("C:\Film.mkv", 2)
AudioDub(V, A)

DirectShow

Если видеофайл можно просмотреть, то его можно будет открыть при помощи DirectShow из библиотеки DirectX.
Устанавливаем последнюю версию фреймсервера AviSynth..
Далее нужно создать файл-скрипт с расширением *.avs и следующим содержимым:
DirectShowSource("полный путь к файлу", fps=25.000, audio=false)
Разумеется нужно указать свой fps (скорость воспроизведения): 23.976, 25.000 и т.п.

Прочее

Для AVI можно использовать такой скрипт:
AviSource("полный путь к файлу")
Для индексного файла DGIndex из комплекта DGMPGDec (исходник MPEG2):
LoadPlugin("полный путь к DGDecode.dll")
MPEG2Source("полный путь к файлу *.d2v")
Для индексного файла DGAVCIndex из комплекта DGAVCDec (исходник AVC/H.264):
LoadPlugin("полный путь к DGAVCDecode.dll")
AVCSource("полный путь к файлу *.dga")
Для индексного файла DGIndexNV из комплекта DGDecNV (исходник AVC/H.264, MPEG2, VC1):
LoadPlugin("полный путь к DGDecodeNV.dll")
DGSource("полный путь к файлу *.dgi")

Рекомендую всегда на вход программам сжатия подавать именно "*.avs" скрипт, т.к. это универсальный способ избавляющий от возможных проблем. Например, версии DGIndex в GrodianKnot и MeGUI не совместимы, т.е. "*.d2v" файл созданный в версии DGIndex от MeGUI не читает GordianKnot и наоборот.

Предобработка видео с помощью фильтров AviSynth

В скрипте не должно быть кириллицы!

Описание

AviSynth (AVI Синтезатор) — это очень полезная программная утилита, основанная на языке скриптов и включающая фильтры для простых (и не очень простых) задач нелинейной обработки видео. Она создана для детального доступа к видеокадрам клипов с возможностью производства над ними ряда хитрых манипуляций (по некоторому сценарию), недостижимых в традиционных монтажных программах (типа VirtualDub или Adobe Premier).
Что делает AviSynth уникальным по интерфейсу, так это тот факт, что он не является самостоятельной программой, имеющей графический интерфейс и производящей выходные файлы. Вместо этого AviSynth действует как «посредник» между видеофайлами и программами обработки видео, то есть как фрейм-сервер (кадр-сервер, податчик кадров).
Работа происходит следующим образом. Во-первых, вы создаете простой текстовый документ, так называемый скрипт (файл с расширением *.AVS), со специальными командами. Эти команды ссылаются на одно или более входное видео и на фильтры, которые вы хотите к ним применить. Затем вы запускаете видеоприложение (программу), например, VirtualDub, и открываете в нем файл скрипта. Тут начинает действовать AviSynth. Он открывает видеоисточники, на которые вы ссылались в скрипте, применяет указанные фильтры, и посылает результат видеоприложению. Приложение, однако, не знает, что это AviSynth работает в фоне. Вместо этого приложение думает, что оно напрямую открывает некий уже отфильтрованный AVI файл, который располагается на вашем жестком диске.
Обычно выделяют пять главных причин, по которым пользователь приходит к AviSynth:
  • AviSynth позволяет вам объединить вместе любое число видеофайлов. Вы можете даже выборочно объединять определенные части видео или заменять звуковые дорожки.
  • Многие очень качественные фильтры видеообработки встроены в AviSynth (или в подключаемые модули-плагины). Например, фильтры для изменения размера, обрезки, подавления шума, повышения резкости, деинтерлейса.
  • AviSynth может открыть почти любой тип видео, включая разные MPEG и Quicktime MOV. Однако когда AviSynth поставляет программе видео, для нее это выглядит подобно стандартному (несжатому) AVI. Это позволяет вам открыть некоторые форматы видео в программах, которые их не поддерживают.
  • AviSynth генерирует видео, которое он посылает программе, порциями, на лету (в памяти). Следовательно, никаких временных или промежуточных видеофайлов на диске не создается (раньше проблема сохранения дискового пространства была более актуальной).
  • Вы можете использовать AviSynth, чтобы открывать файлы, большие, чем 2 GB в некоторых старых программах, которые не поддерживают файлов такого размера.
По устоявшемуся мнению важнейшими достоинствами Avisynth являются:
  • возможность работы в том цветовом формате, который наиболее подходит для входного или выходного видео, без лишних преобразований и с высокой скоростью.
  • произвольный доступ к любому кадру и полю (половине кадра в чересстрочном видео), с возможностью их разделения, прореживания, комбинирования, фильтрации, объединения, изменения частоты и т.п.

Обрезать видеопоток

Для этого используется функция trim:
trim(x1,x2)
, где "x1/x2" - номера кадров фрагмента, который нужен, т.е. будет отсечено все до "x1" и все после "x2".
Так же можно соединять фрагменты:
trim(x1,x2) + trim(x3,x4) + trim(x5,x6)

Обрезать кадр

Для этого используется функция crop:
crop(x1,y1,x2,y2)
, где "x1+x2" - левая граница + расстояние от неё до правой (ширина нужной области), "y1+y2" - верхняя граница + расстояние от неё до нижней (высота нужной области). Так же границы справа/снизу можно задавать как отступ справа/снизу с отрицательным знаком. Т.к. видео обрабатывается обычно в цветовом представлении YUV (YV12), то, в связи с тем, что на две строки плоскости Y приходится только по одной строке плоскостей U и V, резать можно только на значения кратные двум. Чтобы иметь возможность резать произвольно нужно конвертировать цветовое представление в RGB. Но любое преобразование цветового представления ведет к небольшим потерям качества. Т.е. совершив потом обратную операцию мы не получим исходной картинки в плане яркости и контрастности.

Пример простейшего полностью рабочего скрипта

DirectShowSource("c:\film.avi", fps=23.976)
# отрежем слева/справа по 10 пикселей, сверху/снизу по 20 (на примере разрешения DVD - 720*480)
crop(50,70,620,340)
# crop(50,70,-50,-70)

Иллюстрация


x1=50
x2=-50 или x2=x=720-x1-отступ_справа=720-50-50=620
y1=70
y2=-70 или y2=y=480-y1-отступ_снизу=480-70-70=340

Добавить черные полосы (сверху/снизу, справа/слева)

Данная операция может быть полезна в следующих случаях:
  • Иногда бывает, что у видео есть темные полосы сверху и снизу, но они реально серые и их нужно сохранить, но хочется, чтоб они были настоящего черного цвета.
  • При создании рипа, чтобы сохранить пропорции иногда нужно оставить немножко черных полос сверху и снизу, или по бокам. Делается это для сохранения кратности размеров картинки 8 или 16. Эти полоски могут быть нечеткими (рваными) или серыми.
В скрипт "*.avs" нужно лишь добавить (обычно в самый конец) одну строку:
AddBorders(слева, сверху, справа, снизу [, цвет])
, где "слева, сверху, справа, снизу" - ширина добавленной полосы в пикселях, а "цвет" - цвет этих полос.
Соответственно, надо учитывать, что после добавления полос размеры исходной картинки изменятся.

Пример простейшего полностью рабочего скрипта

DirectShowSource("c:\film.avi", fps=23.976)
AddBorders(2, 10, 4, 10)

Составить кадр из нескольких роликов

Для расположения рядом нескольких роликов служат две команды:
StackHorizontal - для расположения по горизонтали.
StackVertical - для расположения по вертикали.
В качестве аргументов подаются клипы.
Размеры, по которым склеиваются клипы, должны совпадать.

Пример простейшего полностью рабочего скрипта

#составим цельную картинку из частей четырех роликов с разрешением 720*400
a=AVISource("C:\test1.avi").Crop(0,0,-360,-200) #левый верхний угол
b=AVISource("C:\test2.avi").Crop(360,0,0,-200) #правый верхний угол
c=AVISource("C:\test3.avi").Crop(0,200,-360,0) #левый нижний угол
d=AVISource("C:\test4.avi").Crop(360,200,0,0) #правый нижний угол
ab=StackHorizontal(a, b)
cd=StackHorizontal(c, d)
StackVertical(ab, cd)

Вшить субтитры в видеопоток

Скачиваем фильтр vsfilter_20050301.zip. Вытаскиваем оттуда файл "VSFilter.dll" и переносим в папку "AviSynth\plugins". В архиве так же есть версия для работы с субтитрами в кодировке "Unicode".
Остается только в скрипт "*.avs" добавить следующее:

В самое начало скрипта

LoadPlugin("Путь к VSFilter.dll")

В самый конец скрипта (после применения каких либо фильтров)

TextSub("Путь к файлу с субтитрами")

Поддерживаются следующие форматы: SSA (Sub Station Alpha), SRT (SubRip), SUB (MicroDVD), PSB (PowerDivx), SMI (SAMI), ASS (Advanced Substation Alpha).
Большинство тэгов формата "SSA" игнорируются, т.к. бесполезны.

Пример простейшего полностью рабочего скрипта

LoadPlugin("c:\program files\avisynth 2.5\plugins\vsfilter.dll")
DirectShowSource("c:\film.avi", fps=23.976)
TextSub("c:\film.srt")

Кроме того, если использовать стили формата "SSA", то можно сделать текстовый логотип.

Разложить видео на кадры

В скрипте "*.avs" нужно использовать процедуру:
ImageWriter("files_path", start, end, "image_format")
, где "files_patch" - полный путь к папке куда складывать кадры, "start"/"end" - номера кадров  начала/конца раскладываемого фрагмента, "image_format" - формат выходного изображения.
Более подробную информацию можно почитать здесь.
Можно указывать номера кадров начала и конца непосредственно в процедуре ImageWriter, а можно предварительно использовать процедуру trim. Во втором случае будет воспроизведен только раскладываемый фрагмент, а не весь исходный файл.
Чтобы разложить весь исходный файл нужно вместо номеров начала/конца фрагмента задать нули.
Создавать папку куда будут складываться кадры нужно самому. Процедура этого не умеет.
Если в пути не указать в конце "\", то кадры будут сохраняться в директории до ближайшего "\", а часть после будет использоваться как префикс к названию файла. Т.е. для пути "C:\Test" файлы будут сохраняться в корне диска с названиями "Test000000.*", "Test000001.*" и т.д.

Пример простейшего полностью рабочего скрипта

без использования процедуры trim

DirectShowSource("c:\test.avi")
ConvertToRGB()
ImageWriter("c:\test\", 1, 10, "bmp")

с использованием процедуры trim

DirectShowSource("c:\test.avi")
trim(1, 10)
ConvertToRGB()
ImageWriter("c:\test\", 0, 0, "jpeg")

Создание видео из нумерованного набора кадров

В скрипте "*.avs" нужно использовать процедуру:
ImageReader(mask, start, end)
, где "mask" - полный путь к набору изображений (задается как "директория\префикс%06d.тип_файла"), "start"/"end" - начальный и конечный номер файла с кадром. "06" в маске - длина номера в символах в названии файла (000001, 000002,...).
Более подробную информацию можно почитать здесь.

Пример простейшего полностью рабочего скрипта

Создать видеофрагмент сам по себе

ImageReader("c:\test\%06d.png", 31, 39)

Вставить созданный видеофрагмент в другое видео

# подгружаем видео любым доступным способом
main_video = DirectShowSource("c:\main_video.avi")
# вырезаем из него 100 кадров в начале
part1 = main_video.trim(0, 99)
# вырезаем еще 100 кадров дальше
part3 = main_video.trim(200, 299)
# создаем видеофрагмент, приводим к нужному цветовому пространству YV12, задаем FPS
part2 = ImageReader("c:\part2\%06d.png", 1310, 1527).ConvertToYV12().AssumeFPS("ntsc_film")
# склеиваем результат
part1+part2+part3

Создание видео из одного изображения

В скрипте "*.avs" нужно использовать процедуру:
ImageSource("image", end=n)
, где "image" - полный путь к дублируемому изображению, "n" - нужное количество кадров в видео (исходить надо из того, что продолжительность кадра для PAL равна 40мс, для NTSC - 1001/24мс).
Более подробную информацию можно почитать здесь.

Пример простейшего полностью рабочего скрипта

ImageSource("image.jpg", end=300)

Картинка в картинке

В качестве примера рассмотрим скрипт, который позволяет создать динамическое меню эпизодов - поверх фоновой картинки накладываются три окошка с эпизодами из фильма.
Если понять принцип, то можно создавать много интересных эффектов, т.к. можно обращаться к разным видео/картинкам и брать фрагменты из множества мест.

скрипт

# указываем фоновую картинку
BG_Image = "C:\Temp\Background.jpg"
# указываем файл с видео
Main_Movie = "C:\Temp\Movie.mkv"
# объявляем продолжительность (в кадрах) конечного видео
FC = 1728
# объявляем частоту кадров
FR = 23.976
# объявляем стартовые позиции (в кадрах) для трёх эпизодов
st1 = 10080
st2 = 20160
st3 = 30240

# объявляем размеры окошек
clw = 182
clh = 116

# объявляем координаты окошек
clx1 = 76
cly1 = 298
clx2 = 270
cly2 = 298
clx3 = 466
cly3 = 298

# загружаем фоновый рисунок
cl0 = ImageSource (BG_Image, end=FC-1, fps=FR)

# производим изменение размера фонового рисунка (при необходимости),
# при этом учитывая наличие или отсутствие overscan borders (для NTSC: 720-2*8=704, 480-2*8=464)
# однако проще просто заранее сделать картинку нужного размера

cl0 = Lanczos4Resize(cl0,704,464)
# добавляем overscan borders (при необходимости)
cl0 = AddBorders(cl0,8,8,8,8)
# загружаем фильм
cl1 = DirectShowSource(Main_Movie, fps=FR)
# вырезаем из него отрезок для первого эпизода
cl1 = Trim(cl1,st1,-FC)
# производим изменение размера
cl1 = Lanczos4Resize(cl1,clw,clh)
# накладываем на фоновый рисунок
cl0 = Overlay(cl0, cl1, x=clx1, y=cly1)
# снова загружаем фильм (но уже в новый дескриптор)
cl2 = DirectShowSource(Main_Movie, fps=FR)
# вырезаем из него отрезок для второго эпизода
cl2 = Trim(cl2,st2,-FC)
# производим изменение размера
cl2 = Lanczos4Resize(cl2,clw,clh)
# накладываем на фоновый рисунок
cl0 = Overlay(cl0, cl2, x=clx2, y=cly2)
# и снова загружаем фильм (опять же в новый дескриптор)
cl3 = DirectShowSource(Main_Movie, fps=FR)
# вырезаем из него отрезок для третьего эпизода
cl3 = Trim(cl3,st3,-FC)
# производим изменение размера
cl3 = Lanczos4Resize(cl3,clw,clh)
# накладываем на фоновый рисунок
cl0 = Overlay(cl0, cl3, x=clx3, y=cly3)
# конвертируем цветовую схему и получаем результат
ConvertToYV12(cl0)
Автор примера - Trunk256

Наложить фрагмент изображения по маске (логотип)

Нам понадобятся:
1. Кадр с логотипом. Это изображение с разрешением равным разрешению видео. В нужном месте (например, в правом нижнем углу) размещаем логотип. В идеале - белый фон и логотип на нем.
2. Маска прозрачности. Изображение с разрешением равным разрешению видео. Степень прозрачности определяется цветом пикселя. Черный - абсолютная прозрачность. Белый - пиксель заменяется полностью. В идеале - черный фон с белым "пятном" на месте логотипа.

Иллюстрация

Кадр с логотипом:

Маска прозрачности:

В скрипте "*.avs" нужно использовать процедуру:
overlay(background, logo, mask=logo_mask, opacity=logo_opacity)
, где "background" - видео, на которое нужно наложить логотип (можно использовать любой доступный способ загрузки видео: AVISource, DirectShowSource и т.п.), "logo" - кадр с логотипом (для загрузки изображения нужно использовать функцию ImageSource), "logo_mask" - маска прозрачности (для загрузки изображения нужно использовать функцию ImageSource), "logo_opacity" - степень прозрачности (от 0 до 1, при 1 - прозрачность отключена).
Более подробную информацию можно почитать здесь.
Важно обратить внимание, что прозрачностью можно управлять двумя способами. Через маску прозрачности, изменяя цвет от черного к белому. И через параметр "opacity" непосредственно при вызове процедуры наложения. На мой взгляд надо выбрать один способ. Рекомендую создавать черно-белую маску прозрачности, а управлять ей через параметр "opacity".
Если нужно создать текстовый логотип, то удобнее использовать стили формата субтитров "SSA". Не придется пересжимать видео. Это описано в пункте "Вшить субтитры в видеопоток".

Пример простейшего полностью рабочего скрипта

На весь фильм

background = AVISource("c:\test.avi")
logo = ImageSource("c:\test_logo.bmp")
logo_mask = ImageSource("c:\test_logo_mask.bmp")
overlay(background, logo, mask=logo_mask, opacity=0.5)

На часть фильма

part1=AVISource("c:\test.avi").trim(0,99)
part2=AVISource("c:\test.avi").trim(100,199)
part3=AVISource("c:\test.avi").trim(200,299)
background = part2
logo = ImageSource("c:\test_logo.bmp")
logo_mask = ImageSource("c:\test_logo_mask.bmp")
part2 = overlay(background, logo, mask=logo_mask, opacity=0.5)
part1+part2+part3

Обработка дефектов изображения (наложение, замыливание фрагмента)


Такими методами можно устранить, например, "сигаретные ожоги", замылить границы неумелого наложения фрагмента одного изображения на другое.
1. Взять крайние относительно поврежденного блока кадры, вырезать из них нужную область, усреднить и полученным результатом закрыть повреждения. Метод хорошо работает на отдельных не динамичных кадрах.

Пример

function spotkill(clip dst, int x1, int y1, int x2, int y2, int frame1, int frame2)
{
f1=Trim(dst,frame1,frame1).Crop(x1,y1,-(dst.width-x2),-(dst.height-y2))
f2=Trim(dst,frame2,frame2).Crop(x1,y1,-(dst.width-x2),-(dst.height-y2))
fa=average(f1,0.5,f2,0.5)
c1=Trim(dst,0,frame1)
c2=Trim(dst,frame1+1,frame2-1).Overlay(fa, x=x1, y=y1, pc_range=true)
c3=Trim(dst,frame2,0)
c1+c2+c3
}
# (x1, y1) и (x2, y2) - координаты обрабатываемого фрагмента кадра, frame1 и frame2 - кадры между которыми находится блок поврежденных кадров.

2. Просто замылить прямоугольную поврежденную область кадра.

Пример

function xblur(clip dst, int x1, int y1, int x2, int y2, int frame_start, int frame_end)
{
f=Trim(dst,frame_start,frame_end).Crop(x1,y1,-(dst.width-x2),-(dst.height-y2)).blur(1.57).blur(1.57).blur(1.57).blur(1.57)
c1=Trim(dst,0,frame_start-1)
c2=Trim(dst,frame_start,frame_end).Overlay(f, x=x1, y=y1, pc_range=true)
c3=Trim(dst,frame_end+1,0)
c1+c2+c3
}
# (x1, y1) и (x2, y2) - координаты обрабатываемого фрагмента кадра, frame_start и frame_end - начальный и конечный кадры обрабатываемого фрагмента.

3. Замылить произвольную область по маске.

Пример

#грузим видео
v=AviSource("c:\film.avi")
#грузим маску с преобразованием в цветовое пространство PC
m=ImageReader("c:\mask.png", start=0, end=v.framecount, use_DevIL=true).ConvertToYV12().AssumeFPS(v.framerate()).ColorYUV(levels="TV->PC")
#накладываем кадр сам на себя с размыванием по маске
overlay(v, v.blur(1.5), mask=m, pc_range=true)
# Маска должна быть разрешением с кадр. Применяемые цвета - оттенки серого от черного до белого. То что черное - не накладывается, белое - накладывается. Степень замыливания наложенного изображения определяется коэффициентом функции blur().

Увеличение частоты кадров / замедление видео

Нам понадобится очень полезная библиотека MVTools для оценки и компенсации движения объектов в видео. Из архива надо взять mvtools2.dll и поместить в папку с плагинами AviSynth.
Для решения задачи используется набор функций из этой библиотеки. Результат одних функций является аргументом для других. Аргументы функций подробно описаны по ссылке указанной выше.
Используются: MSuper->MAnalyse->MRecalculate->MFlowFps

Пример полностью рабочего скрипта

LoadPlugin("C:\Program Files\AviSynth 2.5\Plugins\mvtools2.dll")
AviSource("film.avi")
# числитель выходной частоты кадров
multinum=2
# знаменатель выходной частоты кадров
multiden=1
# в итоге получаем коэффициент увеличения частоты кадров 2/1 = 2 раза
super = MSuper(pel=2, hpad=16, vpad=16)
bv1=MAnalyse(super, isb=true, blksize=16, overlap=8, searchparam=1, plevel=2)
fv1=MAnalyse(super, isb=false, blksize=16, overlap=8, searchparam=1, plevel=2)
# можно уточнить/пересчитать некоторые параметры для повышения качества результата
forward_re = MRecalculate(super, fv1, blksize=8, overlap=4, thSAD=100, searchparam=1)
backward_re = MRecalculate(super, bv1, blksize=8, overlap=4, thSAD=100, searchparam=1)
# увеличение частоты кадров
MFlowFps(super, backward_re, forward_re, num=FramerateNumerator(last)*multinum, den=FramerateDenominator(last)*multiden)
# возвращаем исходную частоту кадров и получаем эффект замедления
AssumeFPS("pal_film")
#AssumeFPS("ntsc_film")

AvsP - редактор скриптов AviSynth. Незаменимая вещь при работе со скриптами. Настоятельно рекомендую. К сожалению проект заброшен.
AvsPmod - дальнейшее развитие проекта.
[Профиль]  [ЛС] 

Rogvald

Пол: Мужской

Стаж: 1 год 3 месяца

Сообщений: 867

Репутация: 1006 [+] [-]

Rogvald · Создавать темы 15-Окт-2017 19:31 (спустя 5 лет 2 месяца)

[Цитировать] 

Сжатие при помощи Gordian Knot или MeGUI

GordianKnot рекомендуется только для связки AVI + XVID/DIVX.
MeGUI подходит для более широкого выбора контейнеров и кодеков. Рекомендуется для связки MKV + x264.

Загрузка проекта в GordianKnot и настройка параметров сжатия.

Если нужно сделать рип совместимый с бытовыми DVD проигрывателями, то сначала нужно ознакомиться с ограничениями в шапке этой темы.
Собственно GordianKnot, встречаем:

Иллюстрация


1. Жмем на кнопку "Open" в нижнем левом углу и выбираем источник (*.d2v, *.avs, *.avi). Откроется окно предпросмотра.

Иллюстрация

Здесь сразу же надо выставить значение пункта меню "View->Resized".

2. Панель основных настроек.

Иллюстрация

Frames - здесь можно выставить нужное значение fps. Это удобно в случае, если у нас проект NTSC (fps = 29.970) и мы собираемся сжимать с fps равным 23.976 чтобы корректно рассчитать битрейт и объем выходного файла.
Bits/(Pixel*Frame) - основной показатель будущего качества фильма. Для разных кодеков это значение варьируется следующим образом:
XviD / DivX - от 0.250 до 0.350
H.264 - от 0.150 до 0.200
3. Закладка "Resolution".

Иллюстрация

Input resolution - выставляется само.
Input Pixel Aspect Ratio - выставляем соотношение сторон: 16:9 или 4:3.
Crop (before resize!) - обрежем лишнее, например, черные полосы сверху. Резать минимально с шагом в 8 пикселей. Для удобства можно воспользоваться автоматической обрезкой - кнопка "Auto Crop". В заключение можно воспользоваться опцией "Smart Crop All" для того чтобы выравнять пропорции сторон до правильных. Картинка еще чуть-чуть подрежется.
Output Resolution - выставляем выходное разрешение кадра с учетом предыдущего пункта, чтоб не было лишних растяжений кадра. Так же следим за значением параметра "Aspect Error". Желательно, чтоб значение не превышало 2-3%. В противном случае искажения будут значимы и заметны.
4. Закладка "Bitrate".

Иллюстрация

Container - выбираем нужный контейнер выходного файла.
Codec - выбираем желаемый кодек.
Mode - выбираем режим "Calculate Average Bitrate" позволяет высчитывать битрейт фильма для получения заданного объема.
Duration - выставляется само при открытии проекта, не трогать!
Audio - выставляем битрейт аудио дорожек, если не знаете битрейт, то можно просто указать файл (кнопка "Select").
Files - можно учесть добавление каких либо дополнительных файлов.
Total Size - указываем желаемый размер выходного файла. Для удобства можно указать кратное объему CD (700MB).
Interleaving & AVI-Overhead - указываем дополнительные траты объема, связанные с микшированием аудио и видео.
5. В окне предпросмотра выбираем "File->Save & Encode"
6. Окно сохранения проекта.

Иллюстрация

Resize Filter - фильтр изменения разрешения картинки, от этого зависит скорость кодирования и четкость картинки. Лучшим является "Lanczos (sharp)".
Noise Filter - фильтр понижения шума на картинке. При сильном шуме качество картинки может сильно упасть в связи с тем, что кодек пытается сохранить каждую деталь и для него нет различий между шумом и полезной информацией. Использование - на свое усмотрение.
Field Operations - обработка кадра. Главных опций здесь две:
  • "Field Deinterlace (no blend)". Применяется в случае, если у вас fps = 25.000 и картинка имеет четко выраженную "лесенку" на всем кадре (лучше смотреть на динамических сценах). В данном случае мы имеет нормальную чересстрочную картинку и правильно собрав поля можем собрать исходную картинку. Во всех других случаях (при неправильном интерлейсе) можно пользоваться любым из фильтров - все равно ничего хорошего не получится - результат будет посредственным. Помогут только эксперементы.
  • "Inverse Telecine". Эта опция появляется в списке, если исходный материал в NTSC формате. Опцию следует отметить для восстановления исходных 23.976 кадров в секунду из раздутых 29.970 чтобы не тратить битрейт в пустую на дублированные поля кадров.

Иллюстрация


Compressibility Check - тест на сжимаемость. Полагаться на него полностью не советую. Иногда такое выдает, что глаза могут от удивления выпасть. Указываем бегунком процент материала для тестирования, кадры для которого будут выдраны наугад из всей видео последовательности. Кодек при тестировании работает в однопроходном режиме. Там же можно получить доступ к настройкам параметров кодека. После завершения теста результат появится в нижней части главного окна.

Иллюстрация

Первое поле - процент вашего показателя бит на пиксель по отношению к нужному (рассчитанному в тесте), второе - рассчитанный показатель бит на пиксель.
Edit - редактирование AviSynth скрипта сгенерированного автоматически GordianKnot.
Save - сохранение скрипта AviSynth.
Save & Encode - сохранение и постановка кодирования в список задач. При этом нужно зайти в настройки первого и второго прохода кодеков, а то GordianKnot не даст закончить проект. Остается нажать "Add job to Encoding Queue" чтобы поставить задачу в очередь.

Настройки кодека Xvid

Настройки кодека надо привести к виду, как указано на скриншотах.

Скриншоты




Пояснения

Раздел 'Profile @ Level'. Вкладка 'Profile'

Quantization type: базовая матрица H.263 подходит для битрейтов ниже 900kbps, в остальных случаях надо использовать матрицу MPEG. Использование не стандартных матриц квантования может создать проблемы при воспроизведении на бытовых DVD проигрывателях.
Adaptive quantization: опция использующая особенности человеческого зрения чтобы понижать битрейт там, где разница в цвете не заметна человеческому глазу. Использовать по желанию.
Interlace encoding: режим, при котором кодек оперирует не кадрами целиком, а полями (четными и нечетными).
Quarter pixel: режим, при котором алгоритм поиска и определения движения работает с точностью в четверть пикселя. Использование этого режима может создать проблемы при воспроизведении на бытовых DVD проигрывателях.
Global motion compensation: повышает качество сжатия сцен, в которых представлено панорамирование и масштабирование. Использование этого режима может создать проблемы при воспроизведении на бытовых DVD проигрывателях.
BVOPs: включает/выключает промежуточные b-frames.
Max consecutive BVOPs: указывает количество промежуточных b-frames. Более высокое значение повышает сжимаемость видеоряда. Значения более 1 может создать проблемы при воспроизведении на бытовых DVD проигрывателях.
Quantizer ratio / Quantizer offset: указывает во сколько раз кодеку можно увеличить коэффициент квантования (quantizer) и сколько к нему можно еще добавить. Надо учитывать, что чем больше коэффициент квантования, тем больше снижается качество.
Packed bitstream: включение этой опции позволяет упаковывать b-frame и следующий за ним p-frame в один поток, что даёт возможность декодировать видеопоток без задержки в один кадр. Использование этого режима может создать проблемы при воспроизведении на бытовых DVD проигрывателях.

Раздел 'Zone Options...'. Вкладка 'Zone'

Здесь можно указать места видеоряда, где кодеку разрешается значительно снизить битрейт, повысив коэффициент квантования до указанного предела при сжатии. Это могут быть, например, финальные титры.
Grayscale encoding: включает режим сжатия в оттенках серого цвета.
Chroma optimizer enabled: включает режим интерполяции в однородных цветовых массивах с целью подавить случайный шум и повысить сжимаемость фрагмента. Стоит использовать при сжатии мультипликации.
Cartoon Mode: включает оптимизацию при сжатии мультипликации.
BVOP sensitivity: задает количество промежуточных кадров b-frames, на которое разрешается отклониться от общих установок (на вкладке "Profile") для указанного места видеоряда.

Раздел 'Quality preset'. Вкладка 'Motion'

Сначала надо выбрать пункт "(User defined)", иначе программа выдаст предупреждение, что остальные опции менять нельзя и предложит перейти к редактируемой "(User defined)".
Motion search precision: чем выше значение, тем выше точность поиска движений и тем больше времени требуется на сжатие.
VHQ Mode: включает алгоритмы стандарта MPEG4 для поиска движения. Если отключено, то кодек обрабатывает каждый кадр отдельно, и каждый кадр такого видеоряда будет ключевым. Чем выше значение - тем лучше и тем больше времени требуется на сжатие.
Use VHQ for bframes too: если используются b-frames, то опцию VHQ можно использовать и для них.
Use chroma motion: функция включает поиск движения по цветовой информации. Этот способ более точен, чем стандартный способ. Улучшает сжатие за счёт падения скорости.
Frame drop ratio: указывает количество кадров, которое разрешается кодеку пропустить при условии нехватки битрейта.
Maximum i-frame interval: задает максимальное количество промежуточных кадров между ключевыми.

Раздел 'Quality preset'. Вкладка 'Quantization'

Здесь задается максимальное и минимальное значения коэффициента квантования для каждого типа кадра.
Trellis quantization: включение опции позволяет оптимизировать процесс квантования и более точно рассчитать требуемую величину потока (bitrate), что может приводить к уменьшению потока в целом.

Раздел 'Other Options'. Вкладка 'Encoder'

FourCC used: позволяет выставить идентификацию потока. Для большей совместимости с бытовыми DVD проигрывателями лучше выбирать DX50.
Number of threads: позволяет задать количество потоков для распараллеливания процесса сжатия. Логично оставить 0 для автоопределения этого параметра по количеству физически присутствующих вычислительных ядер процессора.
7. На закладке "Encoder" жмем на кнопку "Start Encoding". Процесс пошел. По окончании получаем готовое видео.

Загрузка проекта в MeGUI и настройка параметров сжатия.

При первом запуске программа предложит обновить часть используемых утилит. В процессе обновления будет предложено импортировать профили сжатия видео и аудио. Рекомендую выбирать все. После обновления все готово к работе.

Иллюстрация


1. Создание "*.avs" скрипта.
Через меню "Tools -> AviSynth Script Creator" запускаем утилиту для создания скрипта "*.avs".

Иллюстрация


Вкладка "Options"
Раздел "Input" нужен для указания пути к проектному файлу "*.d2v/*.dga" или скрипту "*.avs" в поле "Video Input".

Иллюстрация


Сразу после этого откроется окно предпросмотра видео как оно есть, т.е. в исходном виде.

Иллюстрация


Раздел "Crop & Resize" служит для настроек обрезания черных полос и изменения размера кадра.
"Crop" - отметить для ручного ввода значений границ обрезания кадра. Значения нужно вводить в полях справа.
"Auto Crop" - нажать для автоматического обрезания черных полос.
"Resize" - отметить для ввода новых размеров кадра. Не рекомендуется ставить разрешение выше исходного, поскольку это пустая трата требуемого места.
"Suggest Resolution (mod16)" - отметить для сохранения пропорций. Нужно указать только разрешение по-горизонтали, высота кадра будет пересчитана автоматически с округлением до ближайшего значения, которое делится на цело на 16.
"Apply auto Preview" - отметить для отображения изменений в реальном времени, т.е. сразу же.

Иллюстрация


Если очень хочется сохранить качество по максимуму, то можно пересжимать видео как оно есть, т.е. в анаморфированном виде.
Принудительно посмотреть результат произведенных настроек можно по нажатию кнопки "Preview AVS Script".

Иллюстрация


Раздел "Output" нужен для указания пути выходного скрипта "*.avs".
Если в разделе "Input" указан скрипт "*.avs", то нужно обязательно изменить путь выходного скрипта в поле "Video Output".
В последних версиях такой проблемы нет, т.к. программа автоматически добавляет к названию часть "_new".

Вкладка "Filters"

Иллюстрация


Раздел "Deinterlacing" служит для устранения эффекта "гребенки", когда изображение состоит из полей соседних кадров.

Иллюстрация

  • Нажимаем кнопку "Analyze" и ждем окончания процесса. В случае, если перекодируемое видео является анимацией (мультфильм), включаем опцию "Source is Anime". Если по окончании анализа будет определено, что исходное видео ("Source type") имеет прогрессивную структуру ("Progressive"), то деинтерлейс не требуется. В противном случае нужно выбрать желаемый алгоритм деинтерлейса из доступных.
    Существует два вида интерлейса - один нормальный, когда прогрессивная картинка сохранена в виде чересстрочных полей, другой - результат кривого сжатия, когда видео было сжато вместе с интерлейсом (это как погладить рубашку с пятном, потом фиг отстираешь). Первый случай лечится легко при помощи фильтра "Deinterlace (no blend)", т.е. достаточно собрать из разных полей картинку и только. Во втором случае сколько не старайся все равно результат будет посредственным. Можно пробовать все доступные фильтры и смотреть результат в окне предпросмотра. Описать эту часть четко очень сложно, поэтому не стану расписывать, все равно все случаи охватить не удастся. Весьма хорошим фильтром является "Yadif".
    Как правило программа сама выбирает наиболее подходящий фильтр. Будь то устранение чересстрочности или эффекта телекино (telecine). В первом случае будет выбран один из фильтров устранения чересстрочности, во втором - фильтр обратного преобразования телекино (TIVTC). В любом случае, после завершения анализа следует посмотреть что получилось в окне предварительного просмотра.
  • Следующим на очереди фильтр изменения разрешения - "Resize Filter". В подавляющем числе случаев оптимальным алгоритмом будет "Lanczos". Он и стоит по умолчанию. Если исходное видео зашумлено, то имеет смысл включить шимоподавляющий фильтр. Он размоет картинку, немного понизив четкость, но увеличится сжимаемость видео. Тут главное - не усердствовать, практически всегда достаточно поставить шумодав на минимум.
  • Опция "MPEG2 Deblocking" пригодится, если на исходном материале заметны артефакты сжатия в виде прямоугольных фрагментов. Видео будет размыто и восприятие в целом станет лучше.

Вкладка "Edit"
Здесь можно посмотреть готовый скрипт "*.avs". Советую поиграться с настройками на предыдущей вкладке и посмотреть что и как меняется.
Так же здесь можно добавить свои фильтры. Для этого может понадобиться сначала подгрузить нужный плагин через поле "Load DLL". После это в самом начале скрипта добавится строчка для подключения нужной библиотеки.
Теперь сохраняем скрипт кнопкой "Save". После этого, если не была снята соответствующая галочка "On Save close and load to be encoded" в нижней части окна, в главном окне программы в разделе "AviSynth Script" путь к скрипту "*.avs" должен прописаться автоматически.

Иллюстрация


2. Параметры сжатия.
Остается указать:
  • Выходной формат в поле выбора "File format".
  • Профиль (пресет) настроек сжатия в поле выбора "Encoder Settings".
  • В настройках профиля (кнопка "Config" справа) указать нужный битрейт.

Благодаря широкому выбору пресетов можно не заморачиваться с настройками кодека

Кодек x264 (AVC)

Иллюстрация

Все основные настройки выведены на первой вкладке "Main" настроек кодировщика. Рассмотрим все разделы:
Encoding Mode
Дает возможность выбора режима сжатия. Наиболее используемые:
  • Automated 2pass - автоматический двухпроходной режим сжатия. Удобен тем, что оба прохода будут поставлены в очередь списка задач автоматически. Мелочь, а удобно. Так же требуется задать битрейт (среднее количество дискового пространства на секунду видеопотока, задается в Кбитах). Суть метода - последовательное приближение - с каждым проходом - к идеальному распределению доступного битрейта по кадрам видео. Двух проходов хватает. Дальнейшие проходы дают малозаметную выгоду при существенных затратах времени.
  • Const. Quality - сжатие с постоянным коэффициентом качества. Видео будет сжиматься в один проход. Каждый кадр будет сжат с заданной погрешностью. Разработчиками кодека рекомендуются значения в диапазоне 18-26, где 18 - близко к идеалу, т.е. сжатый материал будет не отличим на глаз от исходника. На практике имеет смысл выбирать значение из диапазона 19-21.5

Tuning
Дополнительная оптимизация. В основном нужен только один пункт - Film.
AVC Profile
Опция определяет используемые возможности кодировщика. Чем выше профиль, тем больше возможностей доступно. Тем выше качество обработки. Выставляем "High Profile".
AVC Level
Опция является определенным набором ограничений, указывающих степень требуемой производительности декодера для профиля. Например, поддержка уровня в профиле будет указывать максимальное разрешение изображения, частоту кадров и битрейт которы может использовать кодировщик. Например, уровень определяет сколько кадров может находится в зависимости друг от друга. Т.е. чтобы распаковать конкретный кадр декодеру требуется несколько предыдущих. Данное требование жестко определяет количество требуемой памяти для хранения этой связки кадров. Это важно для бытовых проигрывателей, где память не резиновая.
Target Playback Device
Опция так же является дополнительным ограничителем некоторых параметров в зависимости от выбранного типа устройства воспроизведения. Например, для Blu-ray выставляется дополнительное ограничение по битрейту. Опять же, чтоб бытовой Blu-ray проигрыватель не подавился слишком большим потоком, т.е. смог его плавно воспроизвести.
Preset
В последних версиях кодека настройка существенно упрощена благодаря пресетам самого кодека. Доступны 10 вариантов от "Ultra Fast" до "Placebo". Чем проще настройки, тем меньше времени требуется на сжатие материала. В тоже время более простые настройки дают менее качественную картинку при одинаковом значении битрейта. Для качественного сжатия стоит использовать пресеты "Slow" - "Very Slow". В "Placebo" особого смысла нет, т.к. затраченное время будет существенно превышать возможную выгоду. Если вообще будет хоть какая то выгода.
Чтобы оценить сжимаемость видеоряда можно попробовать сжать небольшой ролик состоящий из нескольких равномерно вытащенных фрагментов исходника. Для этого надо в меню "Tools -> AviSynth Script Creator" на вкладке "Script" добавить в конец следующий код, который будет выбирать фрагменты по 50 кадров в начале каждых 2% видеоряда:
SelectRangeEvery(2*(FrameCount()/100), 50)
Дальше останется лишь посмотреть лог сжатия. Нас интересует раздел "Standard error stream".

Иллюстрация

Выделенные строки содержат среднее значение квантов для каждого типа кадров (I, P, B) - Avg QP. Чем динамичнее видео, тем больше будет разница между значениями. Если все значения не превышают 18, то битрейта хватает с избытком и его можно существенно уменьшать. Если же все цифры больше 23, то битрейта сильно не хватает. Сказанное выше верно, если цель - сжать видео с минимальными визуальными потерями. Качественный рип получается при значениях квантов находящихся в диапазоне 18-23. Но для квантов B-кадров допустимо превышение значений этого диапазона. При сжатии в режиме качества со значением 20 кванты как раз лягут в указанный диапазон. При этом конечный результат всегда нужно оценивать своими глазами.
Подробные настройки кодека можно посмотреть здесь.

Кодек XviD

"XviD: 2pass" - набор пресетов для сжатия в два прохода.
"XviD: 2pass (HomeTheatre)" - набор пресетов совместимых с бытовыми DVD проигрывателями.
"XviD: Const. Quantizier 2" - набор пресетов для сжатия в один проход.
Типы профилей в порядке повышения качества: Fast, Balanced, HQ.

Рассчитать нужный битрейт можно следующим образом: (S/T) - A, где
S - общий объем в Кбитах (лучше брать на 10-20MB меньше от нужного)
T - продолжительность ролика в секундах
A - суммарный битрейт используемых звуковых дорожек

Пример расчета битрейта

Нужно уместить фильм продолжительностью 2 часа на болванку DVD5 (4483MB) с двумя аудиодорожками 5.1 с битрейтом 448Kbit каждая.
Размер нужно брать на 10-20MByte меньше, поскольку сам контейнер потребует немного места, плюс вдруг захочется добавить туда еще что вроде субтитров или обложек.
S = 4450 MByte = 4556800 KByte = 36454400 Kbit;
T = 2 часа = 120 минут = 7200 секунд;
A = 2 дорожки по 448Kbit каждая = 448 + 448 = 896 Kbit;
(S/T) - A = 36454400/7200 - 896 ~ 4167 Kbit/s
Так же можно воспользоваться встроенным калькулятором, который вызывается через меню "Tools -> Bitrate Calculator". В открывшемся калькуляторе уже должны быть подставлены параметры видео - время воспроизведения, частота кадров и общее количество кадров, кодек и контейнер. Осталось указать параметры аудио. Можно указать тип дорожки и битрейт вручную, а проще - нажать кнопку "Select" и выбрать нужный файл с аудиодорожкой. Если планируется более одной аудиодорожки, то через контекстное меню (правый клик мышкой) можно добавить еще дорожки - пункт меню "Add Track". В списке "File Size" выбираем или указываем вручную (последний пункт "Select size...") нужный размер файла, после чего в поле "Results Average Bitrate" получим каким должен быть битрейт видео, чтобы на выходе получить файл заданного размера. Нажимаем "OK" и соглашаемся с предложением изменить настройки выбранного пресета.

3. Принудительная расстановка ключевых кадров в нужных местах (для кодека x264).

Такая необходимость может возникнуть, чтобы
  • главы начинались с ключевых кадров и не было задержек при переходе на них.
  • для точного отделения тела от начальных и заключительных титров в мультсериалах, когда для экономии места одинаковые начальные и заключительные титры отрезают, а при воспроизведении они подцепляются автоматически.

Сначала нужно создать текстовый файл, в котором перечислить номера кадров, необходимый тип кадра (в нашем случае - I) и коэффициент качества (в нашем случае "-1", чтобы кодек сам определял этот параметр).

Пример файла со списком

0 I -1
3425 I -1
4225 I -1
5900 I -1
9125 I -1
9825 I -1
16550 I -1

В MeGUI для этого есть удобный инструмент "Tools->Chapter Creator".

Иллюстрация



Список глав можно составить либо вручную, либо загрузить сразу с DVD диска, указав путь к "*.ifo" файлу раздела с фильмом в списке файлов DVD.

Иллюстрация


Чтобы добавить главы вручную нужно задать время начала главы в поле "Start Time" и название главы в поле "Name" и нажать кнопку "add". Наименование нужно указывать только в том случае, если планируется сохранять в формате "*.xml" для будущего добавления в контейнер "*.mkv". Для задания ключевых кадров наименования глав не нужны.

Иллюстрация


После того как список глав сформирован сохраняем его в файл формата "*.qpf".
Чтобы его подключить к процессу сжатия нужно в настройках кодека (кнопка "Config" справа от списка пресетов на закладке "Input" главного окна программы) перейти на вкладку "Misc", включить опцию "Use qp File" в разделе "Files" и указать путь к созданному "*.qpf" файлу и сохранить настройки пресета нажав кнопку "OK". Есть одна проблема - время в кадры MeGUI переводит при частоте кадров равной 25. Т.е. для NTSC считать надо самому по формуле (часы*3600+минуты*60+секунды)*24/1.001.

Иллюстрация


4. Постановка задачи в очередь.
Далее нажимаем кнопку "Enqueue" и переходим на вкладку "Queue", куда добавятся одна или две записи в зависимости от количества проходов сжатия.

Иллюстрация


Осталось только нажать кнопку "Start".

Обработка аудио дорожек.

На данном этапе дорожки можно пересжать в нужный формат. Сделать все это поможет инструкция по работе с аудио дорожками.

Микширование видео и аудио потоков.

Теперь осталось только склеить видео и аудио. В этом поможет инструкция по монтажу и работе с контейнерами.
Для расчета зависимостей "размера - разрешения - bpp" можно воспользоваться этой утилитой.

Ошибки софта

1. Сбой VirtualDub. Память не может быть written...

Проблема была вызвана недостаточной мощностью блока питания. Почти весь софт работал, тесты память спокойно проходила. Но при нагрузке вызванной процессом сжатия вылетала либо ошибка либо синий экран.

2. Ошибка MeGUI на Windows 7. DirectShowSource: Timeout waiting for graph to start.

оригинал решения на английском

1. Enable vc-1 in ffdshow. You can do this by starting the ffdshow video decoder configuration:
start menu -> programs -> k-lite codec pack -> configuration -> ffdshow video decoder configuration -> codecs -> scroll down to format VC-1 -> click on disable(or other decoder) and change it to libavcodec.
2. Run the Win7DSFilterTweakers.
start menu -> programs -> k-lite codec pack -> tools -> Win7DSFilterTweakers -> scroll down 32-bit directshow filters to 'set as default VC-1 decoder' and select ffdshow.
3. Change splitter for .m2ts files.
start menu -> programs -> k-lite codec pack -> configuration -> manage preferred source filters -> scroll to .m2ts files and choose Haali.
4. Restart megui and it should be working, else reboot pc.

перевод решения на русском

1. Откройте vc-1 в ffdshow. Вы можете сделать это открыв конфиграцию ffdshow.
Пуск - Программы - k-lite codec pack - configuration - ffdshow video decoder configuration - codecs - прокрутите к формату VC-1 - нажмите на disable (или иной кодек) и измените на libavcodec.
2. Запустите Win7DSFilterTweakers.
Пуск - Программы - k-lite codec pack - tools - Win7DSFilterTweakers - прокрутите список и выберите ffdshow стандартным декодером для VC-1
3. Смените сплиттер для файлов .m2ts.
Пуск - Программы - k-lite codec pack - configuration - откройте предпочетаемый исходный фильтр - найдите .m2ts и выберите Haali.
4. Перезапустите megui все должно заработать, если нет, то перезагрузите ПК.

Пакетная обработка


Возможности:
- пакетное пересжатие видео c упаковкой в контейнер mkv или mp4
- конвертируется любые файлы
Доступны два варианта этого скрипта:
- использует только ffmpeg и neroAacEnc
- использует x264 (для кодирования видео), ffmpeg, neroAacEnc, mkvtoolnix, mp4box
Все инструкции по использованию - внутри архивов.

Старый вариант скрипта

Пример позволяет набор avi-файлов пересжать с помощью кодеков x264 (для видео), aac (для аудио) и упаковать в контейнер mkv.
1. В одну папку кладем все avi-шки, которые надо пересжать.
2. Туда же кладем утилиты bepipe.exe (из состава BeHappy), mkvmerge.exe, neroAacEnc.exe, x264.exe
3. Создаем в этой папке файл convert.cmd, настраиваем параметры в нем и запускаем.

convert.cmd

@echo off
:: фактор качества видео (больше - хуже)
set crf=20.0
:: качество звуковой дорожки aac
set qaac=0.5
:: 'hex' или 'umh' (алгоритм анализа движения)
set me=umh
:: Number of reference frames [default: 3]
:: Определяет использование референсных кадров - сколько предыдущих кадров может быть связано (заимствование макроблоков) с P-кадрами или B-кадрами.
:: Качество и время кодирования возрастают пропорционально, примерно до 4. Далее, в диапазоне значений 5-16 качество улучшается, но уже меньшими темпами.
:: Возможные значения 3-16.
set ref=4
:: Subpixel motion estimation and mode decision [default: 7]
:: Oпределяет качество сжатия материала и качество анализа движения в кадре.
:: 6 - RD mode decision for I/P-frames
:: 7 - RD mode decision for all frames
:: 8 - RD refinement for I/P-frames
:: 9 - RD refinement for all frames
:: 10 - QP-RD - requires trellis=2, aq-mode>0
set subme=9
:: Strength of psychovisual optimization [default: "1.0:0.0"]
:: #1: RD (requires subme>=6)
:: #2: Trellis (requires trellis, experimental)
:: Психовизуальный метод, позволяющий специальном образом закодировать шумы и мелкие детали таким образом, чтобы уменьшить потребление ими битрейта. На время кодирования и размер мало влияет.
:: Рекомендуется уменьшить или вовсе отключить для анимационных фильмов и фильмов обработанных sharp-фильтром.
:: Определённых значений нет, диапазон примерно 0.0-1.2:x.x
set psy-rd=0.6:0.0
:: Minimum GOP size [default: 25]
:: Минимальный интервал между ключевыми кадрами.
:: Увеличение значения увеличивает степень сжатия и уменьшает мерцание, однако в динамеческих сценах лучше оставить 25.
:: Возможные значения 25-250
set min-keyint=25
:: Maximum GOP size [default: 250]
:: Максимальный интервал между ключевыми кадрами.
:: Рекомендуется использовать значение fps*10.
set keyint=250
:: How aggressively to insert extra I-frames [default: 40]
:: Определяет, насколько чувствительно будет реагировать кодер на изменение сцены и дальнейшее «вставление» ключевого кадра.
:: 40 - рекомендованное значение, но «подкрутка» этого значения могла бы немного помочь в точном обнаружении изменения сцены. На средних битрейтах можете попробовать 45%. На очень низких битрейтах лучше сбросить в 0% (так при низкобитрейтном, однопроходном CRF/ABR кодировании неплохие результаты показало значение "2").
:: Как более общее правило, видео с более тонкими изменениями сцены нуждаются в более высоком пороге сокращения сцены (около 45 - 50). Яркое, высоко-контрастные видео с очень видными изменениями сцены могло бы быть закодировано со значением 35.
:: Возможные значения 2-50.
set scenecut=40
:: Number of B-frames between I and P [default: 3]
:: Количество вставляемых B-кадров. Сами B-кадры имеют невысокое качество, но очень хорошо сжимаются (в 10 раз меньше чем P-кадры), из-за чего их применение может увеличить битрейт отдаваемый I,P-кадрам, в целом увеличивая качество.
:: Существует две стратегии, в зависимости от значения b-adapt. При b-adapt=1, можно увеличить значение вплоть до 16. А при b-adapt=2, значения обычно небольшие, до 5, но сами B-кадры будут качественнее.
:: Возможные значения 3-16.
set bframes=4
:: Adaptive B-frame decision method [default: 1]
:: Higher values may lower threading efficiency.
:: Адаптивный метод построения В-кадров. Позволяет x264 адаптивно решать, где будут использоваться B-кадры, уменьшая количество B-кадров там, где это не нужно.
:: 0 - алгортм выключен
:: 1 - старый, но быстрый алгоритм
:: 2 - более оптимальный, но заметно медленее (не рекомендуется при больших bframes)
set b-adapt=1
:: Keep some B-frames as references [default: 0]
:: Позволяет В-кадрам стать референсными, то есть быть связанными между собой, увеличивая эффективность использования 2-х или более B-кадров.
:: Включение функции допускается, если Вы применяете, по крайней мере, B-frames=2. Немного замедляет кодирование.
set b-pyramid=0
:: Loop filter AlphaC0 and Beta parameters [default 0:0]
:: Настройка деблок-фильтра. Первое значение указывает силу деблокинга, второй порог.
:: Обычно рекомендуется оставить 0:0, однако для высококачественных фильмов с высоким битрейтом возможно занижение до -1:-1. А для анимации наоборот - 2:2. Увеличение значения приводит к падению резкости.
:: Возможные значения -2:-2 - 2:2
set deblock=0:0
:: Enable pure-interlaced mode
:: Включает деинтерлейсный фильтр
set interlaced=0
:: Trellis RD quantization. Requires CABAC. [default: 1]
:: Выполняет треллис квантование для повышения эффективности сжатия.
:: Во всех случаях использования заметно падает скорость (~40%).
:: Функция особенно хорошо работает на низких битрейтах! А также в сочетании с psy-rd (x.x:0.3 - 1.0), при этом сочетании уменьшается размазанность деталей, вызванных трелисом, однако не рекомендуются использовать sharp-фильтры.
:: 0 - выключено
:: 1 - enabled only on the final encode of a MB
:: 2 - включено
:: Рекомендуется 1 - на низких битрейтах или шумных файлах, 0 - на высоких без шума.
set trellis=0
:: *** Обработка некоторых команд ***
if %b-pyramid% == 1 (
set b-pyramid=--b-pyramid
) else (
set b-pyramid=
)
if %interlaced% == 1 (
set interlaced=--interlaced
) else (
set interlaced=
)
:: *** старт команд ***
for %%i in (*.avi) do (
echo ********** File %%i **********
echo.
echo [%DATE% %TIME%] start convert video
echo.
echo DirectShowSource^("%%i", fps=30.000, audio=false^) >%%~ni.avs
x264.exe --crf %crf% ^
--partitions all --8x8dct --ref %ref% --me %me% --subme %subme% ^
--min-keyint %min-keyint% --keyint %keyint% --scenecut %scenecut% ^
--bframes %bframes% --b-adapt %b-adapt% %b-pyramid% ^
--psy-rd %psy-rd% --trellis %trellis% --deblock %deblock% %interlaced%^
--thread-input --output "%%~ni.video.mkv" "%%~ni.avs"
del %%~ni.avs
echo.
echo [%DATE% %TIME%] start convert audio
echo.
echo DirectShowSource^("%%i", fps=30.000^) >%%~ni.avs
bepipe.exe --script "import(^%%~ni.avs^)" | neroaacenc.exe -if - -of "%%~ni.mp4" -ignorelength -q %qaac%
del %%~ni.avs
echo.
echo [%DATE% %TIME%] create mkv
echo.
mkvmerge.exe -o "%%~ni.mkv" ^
--language 1:und --default-track 1:yes --forced-track 1:no -d 1 -A -S -T --no-global-tags --no-chapters "%%~ni.video.mkv" ^
--forced-track 1:no -a 1 -D -S -T --no-global-tags --no-chapters "%%~ni.mp4" ^
--track-order 0:1,1:1
del %%~ni.video.mkv
del %%~ni.mp4
echo.
echo [%DATE% %TIME%] complete
echo.
)
[Профиль]  [ЛС] 
Показать сообщения:    
Тема закрыта

Текущее время: 16-Апр 10:21

Часовой пояс: UTC + 2



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы