Давайте, наконец, кодировать

Что-то у нас все слова да слова. Давайте перейдем к конкретному кодированию.
Для кодирования будем использовать MEncoder. Конечно мы не ограничимся этим кодером. Будем использовать и ffmpeg и Canopus и еще какой-нибудь Mainconcept. Но для начала возьмем MEncoder. Надо же нам сравнивать платные кодеры и бесплатные 🙂 Вдруг окажется, что бесплатный кодер не хуже платного, а может даже и лучше 🙂

В MEncoder будем кодировать следующими кодеками:
mpeg2video — DVD формат хоть и устарел, но его еще никто не отменял;
mpeg4 — пародия на кодек DivX внутри библиотеки lavc;
xvid — настоящий xvid кодек, который прилинковывается к MEncoder на этапе сборки.
Про кодирование в формате H.264 пока не будем говорить, разобраться бы с этими форматами (см. выше).

Поясню, что тут написано. Как вы уже заметили тут есть некая путаница, кодер-кодек, настоящий-пародия. Ничего непонятно. На самом деле все просто. Кодер — программа для кодирования. Тот самый exe-файл или исполняемый модуль под Linux, который вы запускаете. В нашем случае кодер — это MEncoder. Кодек — это подпрограмма, которая находится внутри кодера и используется для конвертации видео из одного формата в другой. Кодек может быть отдельной программой (так делают в Windows), но в большинстве случаев, что мы будем здесь рассматривать кодек будет находиться внутри кодера.
Теперь про «настоящий-пародия». Дело в том, что большинство кодеков из билиотеки libavcodec написано по технологии «обратного программирования», так называемый «reverse engineering». Грубо говоря, когда по готовому продукту готовится его модель, работающая точно так же. Хакерами вскрывается код программы, а затем пишется другой код, который делает точно так же как и коммерческий, а зачастую даже лучше.

Кодируем в MPEG2

mencoder -frames 500 -oac lavc -ovc lavc  -lavcopts vcodec=mpeg2video:\
vrc_maxrate=8000:vbitrate=6000:vrc_buf_size=1835:\
keyint=15:vpass=1 -of mpeg \
-o /dev/null ../../sample1.avi
mencoder -frames 500 -oac lavc -ovc lavc  -lavcopts vcodec=mpeg2video:\
vrc_maxrate=8000:vbitrate=6000:vrc_buf_size=1835:\
keyint=15:vpass=2 -of mpeg \
-o vbrmethod.mpg ../../sample1.avi

Давайте попытаемся понять, что же здесь написано.

-frames 500 — кодируем первые 500 кадров. Эта опция бывает полезна, когда необходимо перекодировать не весь фильм, а лишь часть его. Например, это необходимо при проверке тех или иных опций.

-oac lavc — кодек для кодирования звуковой дорожки. В данном случае будем кодировтаь кодеком lavc (библиотека libavcodec).

-ovc lavc — тоже самое, но для видео.

-lavcopts — а дальше пошли опции для этого самого видеокодека:
vcodec=mpeg2video — название кодека. Из названия понятно, что кодировтаь будем в формат mpeg2;
vrc_maxrate=8000 — максимальное значение битрейта;
vbitrate=6000 — среднее значение битрейта;
vrc_buf_size=1835 — размер буфера для MPEG2;
keyint=15 — максимальное значение между ключевыми кадрами в потоке MPEG2. Для DVD берем это значение < 30; vpass=1 - первый проход двухпроходного кодирования; vpass=2 - соответственно второй проход -of mpeg - формат контейнера в который будем кодировать. В данном случае mpeg; -o vbrmethod.mpg - имя результирующего файла; ../../sample1.avi - путь к исходнику (видео, которое кодируем). Так как у нас двухпроходное кодирование, поэтому имеем две строчки с mencoder. Первым проходом собираем статистику по видео. Вторым проходом кодируем. Посмотрим, что у нас получилось.


Результат кодирования в mpeg2

По моему, получилось отлично! Все пылинки на месте. Никто не куда не потерялся. Движение плавное без рывков. Общая гамма картины тоже не изменилась. Дерево имеет свойственный ему цвет. Блики на набалдашнике в норме. Картинка правда интерлейсная, как убрать ее это уже другая тема.

Почитать еще