Возможно вы искали: 'EVE Online: Incursion'

May 15 2025 18:22:13
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Создаём video с помощью mencoder (video multimedia mplayer)

Создаём video с помощью mencoder (video multimedia mplayer)

Ключевые слова: video, multimedia, mplayer, (найти похожие документы)

From: aquatique
Newsgroups: http://aquatique.rusunix.org
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: Создаём video с помощью mencoder

Оригинал: http://aquatique.rusunix.org/mencoding.html

Создаём video с помощью mencoder
--------------------------------

Преамбула No.1: все примеры даны относительно MPlayer v1.0pre7.

Преамбула No.2: в качестве исходного материала будет использоваться DVD.

Преамбула No.3: этот документ не есть пошаговое howto; он предназначен
для тех, кто как минимум прочитал man mencoder и FAQ/документацию;
автор постарался лишь уточнить некоторые малоописанные в документации
аспекты и местами дать однозначный перевод, а также для тех, кто
заинтересован в получении качественных результатов, а не "лишь бы на
1 диск влезло".

Терминология

Макроблок

Так называется сегмент изображения 16x16 пикселей, включающий себя 4
блока яркости размером 8x8 пикселей и 2 блока насыщенности размером
8x8 пикселей.

Quantizer

Quantizer -- некоторое значение качественности макроблока, полученного
с указанными настройками. Разбивая картинку на макроблоки кодек
различные части изображения кодирует по разному, исходя из тех или
иных условий и параметров. В случае с lavc/xvid значение quantizer'а 1
соответствует максимально возможному качеству кодирования макроблока.
Значение 31 -- минимально возможному качеству. О соотношении
качество/размер нетрудно догадаться... ;-)

Для более точных рассчётов значений quantizer'а как правило
используется 2 или 3 прохода кодирования. Во время первого прохода
необходимая кодеку информация по каждому кадру собирается в файл. Во
время второго прохода кодек использует собранную информацию для более
точных рассчётов. По умолчанию этот файл называется divx2pass.log. Он
представляет из себя текстовый файл, в который покадрово записаны
метапараметры изображения для каждого кадра. В случае с использованием
3-х и более проходов на последнем проходе включаются возможности
кодека, наиболее требовательные к ресурсам CPU.

В старых версиях MPlayer/libavcodec файл divx2pass.log содержал в себе
значения quantizer'а, которое можно было анализировать с помощью
скрипта countquant.pl. Теперь в файле divx2pass.log на месте значений
quantizer'а находится не совсем quantizer*118, поэтому для оценки
значений quantizer'а следует к -lavcopts добавлять параметр psnr, в
результате чего будет создаваться файл, содержащий соотношения
сигнал/шум для каждого кадра, а также значения quantizer'а.

Получить гистограмму, подобную получаемой с помщью старого скрипта
countquant.pl, можно воспользовавшись скриптом cq. Вот так примерно
выглядит результат его работы:

$ cq psnr_195944.log

2: 937 62.51% 52.64%
3: 562 37.49% 47.36%


Из чего можно понять, что из 1499 кадров видео 937 из них (62.51%)
имели среднее значение quantizer'а 2, а 562 (37.49%) -- значение 3. В
последнем столбике находится средневзвешанная величина наоборот. :-)

Ещё один полезный скрипт называется calcbpp.pl (его можно найти в
каталоге TOOLS в исходниках MPlayer): он рассчитывает показатель под
названием "количество битов на пиксел" (bits per pixel) полученного
видео. В достаточно усреднённом виде шкала влияния значений этого
параметра на визуальное восприятие выглядит так:

значение bpp Визуальная характеристика видеоряда

<= 0.10 УЖЫС
<= 0.15 Очень плохое качество
<= 0.20 Будут видны края макроблоков
<= 0.25 Хорошее качество
> 0.25 Визуально качество не отличается от видеоряда с bpp < 0.25
> 0.30 Можно использовать более высокое разрешение


Как уже было отмечено, эта шкала достаточно усреднена. Так фильм с
малым количеством динамичных сцен и/или большим количеством несложных
однородных кадров и/или с большим количеством сцен с чёрным фоном
может иметь отличное качество и при bpp==0.15, и наоборот, фильму,
переполненному сложными текстурами и подвижными часто сменяющимися
сценами, будет не всегда достаточно и 0.30 для хорошего качества.

Типы кадров

Существует 3 основных типа кадров:

I-frames (key frames) -- кадры, содержащие полное изображение. Такие
кадры по умолчанию вставляются через каждые 250 кадров, т.е. каждые 10
секунд для видео с 25 кадрами в секунду.

P-frames -- кадры, содержащие в себе только изменения изображения по
отношению к предыдущему кадру.

B-frames -- двунаправленные кадры, содержащие в себе изменения как по
отношению к предыдущему кадру, так и по отношению к последующему. Как
правило этим кадрам предоставляется более низкий поток, нежели
I/P-кадрам. Они могут помочь, если требуемое качество видео не
умещается в требуемый поток. Такие кадры вставляются между I/P-
кадрами. Я крайне редко использую больше 1 B-кадра между P-кадрами. 1
B-кадр можно без опаски использовать если оригинальное видео было в
PAL с чрезстрочностью, однако в случае с progressive NTSC нужно быть
внимательнее.


Использование кодека lavc

Видео с постоянным значением quantizer'а

Как правило, современные фильмы на чистых двухслойных DVD не требуют
долгих раздумий на то, каким образом их пожать. В большинстве таких
случаев на мой взгляд оказывается достаточным использовать постоянное
значение quantizer'а (bitrate в этом случае получается переменный):
vqscale=2. -lavcopts при этом выглядит например так:
vcodec=mpeg4:mbd=2:v4mv:vqscale=2:mpeg_quant (неописанные параметры
пока игнорируем).

Полученный таким образом фильм оригинального разрешения 720x576 и
соотношения 16:9 на мониторе с соотношением 4:3 будет иметь размеры
1024x576, а фильм с разрешением 720x480 будет иметь размеры 854x480,
чего более чем достаточно, даже если не смотреть его в полный экран.

MPEG видео, который лежит на DVD также можно оценивать с помощью bpp,
поэтому этот метод может оказаться малоэффективным для фильмов с
низким bpp (большая длительность, низкий поток) или фильмов,
изображение в которых зашумлено.


Видео с переменным значением quantizer'а

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

Крайне рекомендуется использовать 2 или более проходов при создании
видео с переменным значением quantizer'а, даже если планируется
создать видео небольшого размера с невысоким качеством. Для
двухпроходного кодирования к lavcopts добавляются параметры vpass=1 и
vpass=2 в первом и втором проходе соответственно. Качество можно ещё
более повысить, если увеличить количество проходов. В таком случае в
первом проходе к lavcopts добавляется параметр vpass=1, во всех
последующих проходах добавляется параметр vpass=3. В самом последнем
проходе включаются параметры, наболее сильно потребляющие ресурсы
процессора: qns и qpel.

Начнём с параметров, которые определяют работу кодека в целом:

vbitrate

Это собственно bitrate для видеопотока. Задача кодека: уместить
полученную совокупность макроблоков в этот поток. Это ещё не означает,
что полученный файл будет содержать видео именно такого потока. Это
всего лишь предел, за который кодеку запрещено перешагивать. Посмотрев
значения quantizer'а можно оценить, насколько близко кодек подошёл к
пределу.

vqmin, vqmax

Как можно догадаться из названий параметров -- это минимально и
максимально допустимые значения quantizer'а. По умолчанию этот
диапазон 2-31. Попробуйте сжать кусочек видео с постоянным значением
quantizer'а 2, а затем 31. Сравнив полученные результаты можно
определиться в пределах. ;-) Я редко использую максимальное (vqmax)
значение более 10 при кодировании качественных и высокодинамичных
фильмов.

vqcomp

Этот параметр регулирует "компрессию" значений quantizer'а между
кадрами. По-умолчанию он равен 0.5, что не всегда достаточно для
мгновенной смены режима quantizer'а между сценами либо на
высокодинамичных сценах, а следовательно, сцена с высокой детализацией
при появлении после сцены с низкой детализацией будет сначала размыта
либо нечётко отрисована. В таком случае я бы порекомендовал сделать
несколько пробных кусков со значениями от 0.6 до 0.8 и посмотреть на
полученное видео и значения quantizer'а. Другая сторона медали --
скорость снижения потока на малоподвижных или неподвижных сценах. То
есть если этому параметру присвоено высокое значение (> 0.7), то
изменение потока в сторону уменьшения будет происходить медленнее,
нежели чем со значнием по умолчанию 0.5.

vqblur

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

mbd

Алгоритм кодека, принимающий решение, как будет покодирован макроблок
на том или ином основании. Рекомендую использовать значение 1, если
планируете создавать не очень качественное видео (при таком алгоритме
макроблок, требующий меньше всего битов будет выбран), и значение 2,
если планируете создать видео хорошего качества.

По умолчанию (mbd=0) используется функция выбора макроблоков,
указанная параметром mbcmp. Нужно отметить, что таких функций на
настоящий момент 10. Особо среди них можно выявить NSSE (mbd=10),
которая вполне может посоревноваться с mbd=2:trell. Также желательно
использовать одну и ту же функцию для всех этапов сжатия блока:
mbcmp=10:subcmp=10:cmp=10:precmp=10.

trell

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

cbp

Данный параметр ещё более расширяет возможности trell, более тщательно
рассчитывая искажения полученных блоков и таким путём находя не только
искажения блоков, но и динамики потока.

mv0

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

qpel

Этот параметр позволяет создавать некоторого рода компенсацию движения
макроблоков за счёт использования в расчётах до 1/4 каждого пиксела.
Задействовать или не задействовать qpel зависит исключительно от
динамичности фильма: в динамичных фильмах эта возможность позволит
уменьшить размер и сделать движения макроблоков более естественными.
Если же картинка преимушественно статичная -- qpel только увеличит
время кодирования, не оказав видимого влияния на результат. Я бы
порекомендовал использовать qpel для видео с высоким bitrate (> 1600),
особенно если оригинальное изображение чистое и имеет соотношение
сторон 16:9. Также я бы крайне не рекомендовал использовать эту
возможность для создание видео с шумного оригинала.

Также не рекомендуется использовать эту компенсацию для видео с низким
потоком (1600 и меньше), ибо кодек будёт очень часто всё равно
"игнорировать" значения этих точных расчётов, а когда не будет
игнорировать, это только увеличит размер, не оказав существенного
влияния на качество.

v4mv

Этот параметр позволяет каждому макроблоку иметь 4 вектора движения. Я
бы рекомендовал использовать эту возможность везде, за исключением
некоторых видов анимации. Вкупе с qpel эта возможность позволяет
кодеку лучше определять движения макроблоков, а следовательно и иметь
меньший размер.

mpeg_quant

Этот параметр указывает на использование матрицы MPEG quantizers
вместо H.263 (по умолчанию). При использовании матрицы MPEG quantizers
детализация выше, однако если оригинальное видео содержит много шума,
стоит подумать об использовании H.263 quantizers. При этом выборе
желательно руководствоваться гистограммой распределения значений
quantizer'а для одного и того же куска видео с использованием матрицы
MPEG и H.263 quantizers.

vlelim & vcelim

Каждый макроблок содержит в себе блоки яркости и насыщенности. Эти
параметры указывают пороги изменений яркости и насыщенности, не
достигнув которых значения quantizer'а останутся прежними для блоков
яркости и насыщенности. Другими словами, насколько чувствителен кодек
к изменениям яркости и насыщенности в макроблоке, и при каких
изменениях яркости и насыщенности пересчитывать весь макроблок.

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

Соответственно, порог изменения насыщенности (vcelim) желательно
устанавливать в положительное число.

Одним из важных факторов при установке этих параметров является
соотношение абсолютных величин, которое не должно быть слишком
большим. Будет неплохо, если это соотношение будет в районе 2.0.
Увеличивать соотношение свыше 3.0 практически не имеет смысла, ибо в
таком случае quantizer может "свалится" в минимальное или
максимальное допустимое значение, либо переход от уменьшения света к
потемнению будет очень резким, что увеличит эффект квадратиков
(особенно на градиентных текстурах).

Неплохими парами этих параметров являются эти:

vlelim vcelim
-2 3
-3 5
-4 7


Как видно из этого набора, желательно избегать одинаковых абсолютных
величин для того, чтобы изменения насыщенности реже учитывались
кодеком, нежели изменения яркости (за исключением пары -1 и 1 которая
придаст кодеку максимальную чувствительность к изменениям блоков
яркости и насыщенности). Это опять же позволяет более точно передать
цвет сложных текстур, особенно с градиентом, избавиться от следов на
изображении.

Чем ближе абсолютные значения этих параметров к 0, тем чувствительнее
будет кодек к измененям яркости/насыщенности, и, возможно, тем чаще
блоки яркости/насыщенности макроблока будут изменяться (а
следовательно и пересчитываться весь макроблок).


Маскировка

Маскировка является одним из основных средств, позволяющих снизить
(ухудшить) значения quantizer'а в тех участках, которые в силу свойств
визуального восприятия не будут бросаться в глаза, предоставив таким
образом освобождённые единицы потока тем макроблокам, которые в них
больше нуждаются. Не стоит устанавливать этим значениям слишком
большие величины, иначе это может привести к существованию максимально
качественного макроблока по соседству с минимально качественным там,
где в этом не было необходимости, ибо кроме блоков освещённости в
макроблоке есть ещё и блоки насыщенности. Ещё одним артефактом,
порождённым большими значениями этих параметров, будет эффект
оволосения/разводов.

Маскировка светлых и тёмных участков: lumi_mask & dark_mask

В большинстве случаев значения от 0.01 до 0.15 дают неплохой
результат. Попробуйте создать небольшой кусочек видео с lumi_mask=1.0,
а затем с dark_mask=1.0 -- это позволит лучше понять эффект
маскирования на основании освещённости. Также рекомендуется сравнить
гистограммы распределения значений quantizer'а видеопотока с
маскировкой и без. Не следует сильно (> 0.03) маскировать и светлые, и
тёмные участки одновременно.

Маскировка сложности макроблоков: scplx_mask & tcplx_mask

При обсчёте макроблока и выборе значения quantizer'а для него
учитывается сложность содержащегося в нём изображения. Различают 2
типа сложности макроблока:

* текстурная или пространственная сложность макроблока, которая
зависит от разницы между содержанием текущего и предыдущего
макроблока (насыщенные деталями участки изображения)


* векторная или временная сложность, которая, как можно понять из
названия, зависит от изменения вектора движения макроблока
(подвижные участки изображения)


Если векторную (временную) сложность макроблока при умеренной динамике
можно достоверно передать с помощью 4 векторов движения макроблока
(v4mv) в совокупности с qpel, то текстурную сложность макроблока можно
достоверно передать только путём увеличения quantizer'а. То есть
именно этот параметр позволит некоторым образом выборочно
замаскировать детализацию для того, чтобы использовать более высокие
значения quantizer'а там, где без этого не обойтись.

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

Опять же, наилучшим образом оценить визуальное действие можно путём
создания небольшого куска видео с большим значением этих параметров.


Маскировка внутри P-frame -- p_mask

Этот тип маскировки имеет меньше всего артефактов, ибо он маскирует
сложность всего содержимого макроблока. Устанавливать и оценивать
результат следует также, как и с вышеупомянутой маскировкой.

Я бы порекомендовал в использовании этих 5 типов маскировки
придерживаться следующего правила:

* суммарная величина lumi_mask и dark_mask не должна превышать 0.1


* суммарная величина scplx_mask и tcplx_mask не должна превышать 0.1


* величина p_mask не должна превышать 0.35 -
(lumi_mask+dark_mask+scplx_mask+tcplx_mask)


Естественно, что в зависимости от изображения небольшие отклонения
очень даже возможны, т.е. если например в видео преобладают очень
светлые сцены, то можно немного увеличить lumi_mask.

naq (normalize adaptive quantization)

Как можно понять из аббривеатуры, этот параметр используется для
нормализации значений quantizer'а в макроблоках всего кадра, если
значение вышло за рамки допустимых границ (vqmin/vqmax/vbitrate) из-за
использования маскировки (lumi_mask/dark_mask/scplx_mask/tcplx_mask).
Нормализацией значений quantizer'а стоит пользоваться очень осторожно.
Лучше будет, если предварительно создать видеоряд с нормализацией и
без нормализации. Это позволит более визуально оценить влияние
нормализации. Как правило в случаях, если маскировка используется
неинтенсивно, можно обойтись и без нормализации, но всё же, в большом
количестве случаев (особенно в высокодинамичных и ярких фильмах) эта
возможность оказывается очень полезной.

qns (quantizer noise shaping)

Как можно понять из аббривеатуры, данный параметр позволяет адаптивно
подстраивать значения quantizer'а под шум в оригинальном видео, а
также под полученные в результате сильной маскировки артефакты
оволосения/разводов. Данная возможность используется только вместе с
trell. Рекомендуемое значение -- 1 (qns=1). Стоит заметить, что данный
параметр заметно замедляет кодирование (например у меня на Pentium
IV/1800 PAL 16:9 кодируется со скоростью 2 fps :) ), однако результат
того стоит. В первом проходе включать данный параметр необязательно.

Пример гистограмм значений quantizer'а для одного и того же куска
видео с qns=1 и без:

"без qns" QP Кадров %
2 881 61.31%
3 556 38.69%

qns=1 QP Кадров %
2 1247 86.78%
3 190 13.22%


Использование XviD

Кодек XviD имеет несколько фундаментальных отличий от lavc. Основным
отличием является подход, при котором XviD сам подбирает большое
количество параметров, опираясь свойства изображения и основы
визуального восприятия. Особенно это проявляется в случаях, когда
требуемое видео не умещается в требуемый поток. Из этого вытекает
небольшое количество параметров, передаваемых кодеку с помощью
параметра -xvidencopts.

Существует 3 режима кодирования: постоянный bitrate, постоянный
quantizer (VBR) и двупроходное кодирование. Первый режим используется,
если указан только bitrate. Второй режим используется, если в
xvidencopts присутствует параметр fixed_quant (например
fixed_quant=2). Третий режим (двупроходное кодирование) используется в
случае, если в xvidencopts присутствует параметр pass.

Основным параметром естественно является bitrate. Он ничем не
отличается от vbitrate кодека lavc. :-)

XviD может создавать interlaced video. Для этого достаточно указать
параметр interlacing. При этом если уменьшается размер оригинального
изображения, не нужно забывать указывать, что interlace нужно
сохранять. За это отвечает 3-ый параметр фильтра scale, например
scale=640:480:1:0:50.

Ещё одна полезная возможность -- gmc (global motion compensation). Это
позволяет кодеку определять неподвижные участки изображения на фоне
подвижных, учитывать одинаковые движения макроблоков всего кадра, что
может существенно сэкономить поток.

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

Оценка движений макроблоков с использованием DCT по умолчанию
отключена. Включается она установкой параметра vhq в значение,
отличное от 0. Значения от 2 до 4 используют от умеренной до
максимальной оценки движения макроблоков. Соответственно используя
vhq=4 мы получаем очень медленное кодирование, но максимально точную
оценку движения макроблоков.

Параметр psnr как можно догадаться включает создание файла,
содержащего отношение сигнал/шум, который потом можно использовать для
оценки распределения значений quantizer'а.

XviD имеет отдельный режим для мультфильмов -- cartoon. С помощью
создания пробных кусков видео можно убедиться в том, что им не стоит
брезговать.

max_bframes является аналогом параметра vmax_b_frames lavc. По
умолчанию XviD создаёт не больше 2-х B-кадров. Я бы порекомендовал
устанавливать его в 1, т.е. создавать не больше 1 B-кадра между
P-кадрами.

XviD также умеет использовать точность до 1/4 пиксела при оценке
движения макроблоков. Данный параметр имеет такое же название как и в
случае с lavc: qpel.

Как и в случае с lavc можно выбирать тип quantizer'ов: quant_type=h263
или quant_type=mpeg.


Использование x264

x264 является кодеком, создающим H264/AVC поток.

Отличительной особенностью кодека является использование макроблоков
размером отличных от 16x16, использование ссылок на B-кадры,
"пирамиды" из B-кадров (последовательная серия ссылок) и т.д.

Несмотря на то, что проект x264 разработчиками считается "в стадии
ранней разработки", этот кодек уже сыскал приличную долю
популярности, и нужно заметить, что не случайно.

Прежде чем начать обзор параметров кодека -- небольшое отступление
относительно значения quantizer: в отличие от MPEG-based
потоков/кодеков в H264 мы имеем дело с нелинейной (логарифмической)
шкалой значений quantizer. Так например значение MPEG quantizer 2
примерно соответствует значению H264 quantizer 18, 3 соответствует
21.5, 4 соответствует 24 и т.д.

С учётом того, что разработчики данного кодека считают его стадию
развития "ранней", тут будут упомянуты только ключевые параметры
кодека x264 (-x264encopts).

bitrate

Этот параметр используется для создания потока с постоянным значением
bitrate (значение quantizer в данном случае переменное).

qp_constant

В противовес предыдущему параметру этим параметром выбирается
постоянное значение quantizer (bitrate при этом получается
переменный). Значение этого параметра будет значением quantizer для
P-кадров. I/B-кадры будут иметь значение quantizer равные
qp_constant-ip_factor и qp_constant-pb_factor соответственно.

pass

Как и в случае с lavc/xvid этот параметр используется при
многопроходном кодировании. При использовании двухпроходной модели
сначала кодируем с pass=1, затем с pass=2. При использовании
многопроходной модели (3 и больше проходов) как и в случае с lavc
первый проход делается с pass=1, все последующие проходы делаются с
pass=3. Требовательные к ресурсам процессора параметры рекомендуется
включать только на последнем проходе.

bframes

Максимальное количество B-кадров (подряд).

b_pyramid

Появление этого параметра в x264encopts заставит кодек использовать
все B-кадры в качестве ссылок. Чем больше B-кадров подряд возможно,
тем выше будет пирамида из этих кадров, доступных в качестве ссылок.
При значении bframes < 2 эта возможность работать не будет.

weight_b

Данный параметр даёт B-кадрам некоторый вес исходя из их номера в
пирамиде. Первые кадры пирамиды имеют больший вес, последние меньший.
Это даёт возможность более дальним кадрам из пирамиды кадров
"тянуться" к кадру, следующему за пирамидой, что улучшает оценку
движения макроблоков.

4x4mv

Этот параметр указывает на возможность использования макроблоков в
P-кадрах размером 4x4 пикселей. Использование подобных макроблоков
позволяет более точно передать исходное изображение (особенно в
случаях с соотношением сторон 16:9).

8x8dct

При использовании макроблоков различных размеров и форм (p8x4, p4x8,
p4x4) глупо продолжать оценивать их содержимое блоками по 4x4
пикселей. Этот параметр включает использование DCT-алгоритмов с
использованием блоков 8x8 пикселей, что позволяет получить выгоду не
только на этапе оценки движения, но и на этапе подбора параметров для
кодирования макроблока.

subq

Этот параметр является аналогом параметра qpel в lavc/xvid, за тем
исключением, что он не является "флагом" включено/выключено, а может
принимать значения от 1 до 6. Значение 1 будет иметь эффект наиболее
быстрой работы по оценке движения 1/4 пикселей, значение 6 будет иметь
эффект наиболее качественной оценки, при которой компрессия
оригинального потока может возрасти на 10% и даже более.

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

Оценивать качество кодирования можно таким скриптом (countquant).

Для удобства при многопроходном кодировании можно пользоваться таким
скриптом (x264.encode). В данном случае используется 4 прохода: первый с pass=1,
2 черновых с pass=3 и последний чистовой с pass=3 и subq=6. После
каждого прохода гистограмма значений quantizer и PSNR записываются в
отдельный файл, дабы была информация для размышлений.


Другие возможности

denoiser (шумоподавитель)

Я предпочитаю использовать высококачественный шумоподавитель (hqdn3d)
только при использовании lavc/xvid. В случае с x264 он не нужен. Этот
шумоподавитель в указанной ему мере сглаживает
яркость:насыщенность:временное_движение, что предоставляет возможность
кодеку создать макроблоки с более высоким значением quantizer.
Временное движение в данном контексте обозначает некоторую недолгую
подвижность в макроблоке, что очень часто встречается в фильмах,
снятых со светоплёнки или в низкокачественных DVD.

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

Очень важно здесь не переусердствовать и не превратить картинку в
размытый холст или песочную досточку. Для этого настраивать
шумоподавитель лучше с включенным шумоподавителем те части оригинала,
в которых шум наиболее отчётлив. Как правило это наиболее светлые и
равномерные участки. Также следует обращать внимание на подвижные
контрастные участки видео.

cropping (обрезание пустых мест)

Настоятельно рекомендую обрезать пустоту вокруг. Это связано с тем,
что макроблоки по этим краям будут требовать для себя больший
видеопоток, что естественно пойдёт в ущерб качеству или размеру. В
наборе видеофильтров есть прекрасный фильтр cropdetect, который
"подскажет", какие параметры нужно передать фильтру crop. Однако не
стоит забывать, что каждый макроблок имеет размер 16x16 пикселей, то
есть ширина и высота обрезанного видео должны быть кратны 16. Лучше
немного заехать на изображение, чем оставить чёрную полосу в 2-3
пиксела.


Взаимоисключения

Как известно, правила кроме исключений порождают и взаимоисключения.
Наиболее выраженными взаимоисключения для lavc/mencoder являются:

* scplx_mask/tcplx_mask и deblocking фильтры (например из набора
postprocessing)


* большие значения при маскировке и trell



Примеры lavcopts/vf для двухпроходного кодирования

Чистый двуслойный DVD: Star Wars Episode II "Attack Of The
Clones":

* -lavcopts
vcodec=mpeg4:mbd=2:trell:cbp:mv0:vbitrate=3012:v4mv:vqmin=2:vqmax=
9:mpeg_quant:vlelim=-3:vcelim=5:lumi_mask=0.02:dark_mask=0.06:p_ma
sk=0.05:autoaspect:psnr


* -vf filmdint=crop=720:352:0:64,hqdn3d=4:3:5


Также возможно будет интересен такой (divx.encode) скрипт для кодирования в 3
прохода.


Для просмотра на windows

Весьма удобно помещать результаты в контейнер Matroska. Для этого
можно воспользоваться утилитой mkvmerge из mkvtoolnix. Указав
размер видео при помещении его в контейнер matroska
(--display-dimensions 0:1024x512 установит для потока No.0 размер окна
1024x512) Вы избавите потенциального зрителя под windows от
необходимости выставлять aspect вручную. Для этого достаточно
использовать любой player, работающий через DirectX/DirectShow, и
установить опицю "Use overlay mixer" в настройках "Output"
ffdshow.

Свежие версии всех необходимых средств для просмотра на windows
(ffdshow, Matroska Splitter) всегда можно найти на x264.nl


Credits (типа литература)

При создании этого документа использовались man mencoder, документация
из дистрибутива и кое-какие мысли умных людей из списка рассылки
mplayer-users. Ну и конечно же собственный опыт. ;-)


Скрипт cq


#!/usr/bin/perl -w

my $psnrfile = $ARGV[0];
my @Row = ();
my $lines = 0;
my $quants_total = 0;
my %quants = ();

open PSNR, "< $psnrfile" or die "Can't open PSNR file $psnrfilen";
while(<PSNR>) {
$lines++;
@Row = split; $Row[1] =~ s/,$//; $Row[1] =~ s/,/./; $Row[1] = sprintf("%.0f", $Row[1]);
$quants{$Row[1]}++;
$quants_total += $Row[1];
}
close PSNR;

for $quant (sort( { $a <=> $b } keys %quants)) {
printf("$quant:t% 8dt% 8.2f%%t% 8.2f%%n",$quants{$quant},$quants{$quant}/$lines*100,$quants{$quant}*$quant/$quants_total*100);
}




Скрипт countquant


#!/usr/bin/env perl
# countquant_x264.pl: displays statistics from x264 multipass logfiles
# by Loren Merritt, 2005-4-5

@size{I,P,B} =
@n{I,P,B} = (0)x3;

sub proc_file {
my $fh = shift;
while(<$fh>) {
/type:(.) q:(d+.d+) itex:(d+) ptex:(d+) mv:(d+) misc:(d+)/ or next;
$type = uc $1;
$n{$type} ++;
$q[int($2+.5)] ++;
$avgq += $2;
$avgq{$type} += $2;
my $bytes = ($3+$4+$5+$6)/8;
$size{$type} += $bytes;
}
$size = $size{I} + $size{P} + $size{B};
$n = $n{I} + $n{P} + $n{B};
$n or die "unrecognized inputn";
}

if(@ARGV) {
foreach(@ARGV) {
open $fh, "<", $_ or die "can't open '$_': $!";
proc_file($fh);
}
} else {
proc_file(STDIN);
}

for(0..51) {
$q[$_] or next;
printf "q%2d: %6d %4.1f%%n", $_, $q[$_], 100*$q[$_]/$n;
}
print "n";
$digits = int(log($n+1)/log(10))+2;
printf "All: %${digits}d %s avgQP:%5.2f avgBytes:%5dn",
$n, $n==$n{I}?" ":"", $avgq/$n, $size/$n;
foreach(qw(I P B S)) {
$n{$_} or next;
printf "%s: %${digits}d (%4.1f%%) avgQP:%5.2f avgBytes:%5dn",
$_, $n{$_}, 100*$n{$_}/$n, $avgq{$_}/$n{$_}, $size{$_}/$n{$_};
}
print "n";
printf "total size: $size B = %.2f KiB = %.2f MiBn",
$size/2**10, $size/2**20;
print "bitrate: ", join("n = ",
map sprintf("%.2f kbps @ %s fps", $_*$size*8/1000/$n, $_),
23.976, 25, 29.97), "n";




Скрипт x264.encode:


#!/bin/sh

#Recommended video bitrate for 700MB CD: 637
#Recommended video bitrate for 800MB CD: 745
#Recommended video bitrate for 2 x 700MB CD: 1393
#Recommended video bitrate for 2 x 800MB CD: 1609
#
#Audio stream: 104.308 kbit/s (13038 B/s) size: 101319744 bytes 7770.840 secs

nth_pass() {
passes=$1; shift
for i in `jot $passes 2`
do
mencoder ${extra} -o /dev/null
-oac mp3lame -lameopts $lameopts
-ovc x264 -x264encopts $x264encopts:pass=3:subq=1:bitrate=${x264bitrate}
$vfs $poss -dvd-device "$DVDdevice" dvd://${DVDtitle}
countquant divx2pass.log > ${i}th.pass
done
}

NAME="9 рота"
lameopts="vbr=4:q=7:aq=7:mode=1:vol=6"

x264encopts="bframes=2:b_pyramid:weight_b:qcomp=0.75:4x4mv:8x8dct:me=3"
x264bitrate=1555

DVDdevice="/big1/DVD/9ROTA"
DVDtitle=2

vfs="-vf crop=704:432:8:72"
#poss="-chapter 6 -endpos 1:00"
#poss="-chapter 8 -endpos 2:00"
#poss="-chapter 15 -endpos 2:00"
poss=""
extra="-noautoexpand -aid 128"

mencoder ${extra} -o /dev/null
-oac mp3lame -lameopts $lameopts
-ovc x264 -x264encopts ${x264encopts}:pass=1:turbo=1:subq=1:qp_constant=18
$vfs $poss -dvd-device "$DVDdevice" dvd://${DVDtitle}

nth_pass 2

mencoder ${extra} -o "${NAME}.avi"
-oac mp3lame -lameopts $lameopts
-info name="${NAME}":comment="encoded by <vasily@poupkine.com.>":srcform="DVD"
-ovc x264 -x264encopts ${x264encopts}:pass=3:psnr:subq=6:bitrate=${x264bitrate}
$vfs $poss -dvd-device "$DVDdevice" dvd://${DVDtitle}

countquant divx2pass.log > PSNR




Скрипт divx.encode:


#!/bin/sh

#
# MEncoder dev-CVS-041123-12:29-3.4.2
# $Id: divx.encode,v 1.2 2005/04/16 07:48:25 aquatique Exp $
#
#Recommended video bitrate for 700MB CD: 826
#Recommended video bitrate for 2 x 700MB CD: 1748
#
#Audio stream: 80,858 kbit/s (10107 bps) size: 64429224 bytes 6374,544 secs
#
# 106 / 1:46
#

lameopts="vbr=2:q=8:aq=8:mode=1:vol=7"
lavcopts="vcodec=mpeg4:mbd=2:trell:cbp:mv0:v4mv:vbitrate=1748:vqmin=2:vqmax=21:vqcomp=0.8:vqblur=0.1:vlelim=-3:vcelim=5:lumi_mask=0.01:dark_mask=0.1:scplx_mask=0.1:tcplx_mask=0.01:naq:autoaspect"
DVDdevice="/big2/DVD/Pitch Black"
namebase="Pitch Black"
vfs="-vf pullup,softskip,crop=704:352:8:64,hqdn3d"
#poss="-chapter 2 -endpos 1:00"
poss=""
extra="-aid 128 -noautoexpand -ofps 24000/1001"

mencoder ${extra} -o /dev/null
-oac mp3lame -lameopts $lameopts
-ovc lavc -lavcopts ${lavcopts}:vpass=1:turbo $vfs $poss -dvd-device "$DVDdevice" dvd://1

mencoder ${extra} -o /dev/null
-oac mp3lame -lameopts $lameopts
-ovc lavc -lavcopts ${lavcopts}:vpass=3:psnr $vfs $poss -dvd-device "$DVDdevice" dvd://1

cp divx2pass.log 2nd_divx2pass.log

mencoder ${extra} -o "${namebase}.avi"
-oac mp3lame -lameopts $lameopts
-info name="Pitch Black":comment="encoded by <aquatique@rusunix.org.>":srcform="DVD"
-ovc lavc -lavcopts ${lavcopts}:vpass=3:psnr:qns=1:qpel $vfs $poss -dvd-device "$DVDdevice" dvd://1
609 Прочтений •  [Создаём video с помощью mencoder (video multimedia mplayer)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Создаём video с помощью mencoder (v... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка