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

Что-то у нас все слова да слова. Давайте перейдем к конкретному кодированию.
Для кодирования будем использовать 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

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

JDSL. Дешевый тариф.

JDSL продолжает радовать. Не успел перейти на тариф “L” (раньше был на “Оптимальном+1”), как тут же появился новый тариф “Домашний”. Все то же самое, только дешевле на 40 рублей в месяц. Плюс, появилась возможность переходить с тарифа на тариф, не посещая офис JDSL. Все теперь делается из личного кабинета.
Тенденция, однако.

Забытый пляж

    Выгуливая собаку, забрел на пляж. На наш саровский пляж, на берегу Сатиса, Зрелище унылое. Особенно после испанских и крымских пляжей, здесь запустение и разруха. Лет 20-25 назад здесь было море песка, чистые берега, фонтанчики для питья. А сейчас это заброшенный пустырь с ржавыми “грибками”, “ракетой” смотрящей в лес и разбросанным повсюду мусором. Прям какая-то постапокалиптическая картинка. По всей видимости все это происходит из-за постепенного загрязнения реки. Городские сбросы и кишечные палочки сделали Сатис абсолютно непригодна для купания.


DSCF3136

 
DSCF3143

 
DSCF3166

 
DSCF3168

 
DSCF3170

MEncoder+Xvid+H264 сборка для Linux

Небольшое уточнение про MEncoder. В предыдущей статье я уже говорил про него. По умолчанию в нем нет поддержки Xvid и H264. То есть, для того чтобы можно было использовать эти кодеки необходимо пересобрать mencoder (MPlayer пересоберется автоматически), предварительно установив Xvid и H264 на вашу систему. Поэтому разберем поподробнее как это делается.
План такой. Качаем и устанваливаем библиотеки Xvid, затем H264, пересобираем Mencoder. Во время компиляции MEncoder сам найдет где у вас установлены библиотеки Xvid и H264 (если конечно вы не установили их в экзотическое место) и прилинкует их.
1. Установка Xvid.
Идем на xvid.org и скачиваем последний daily snapshot (http://downloads.xvid.org/downloads/xvid_latest.tar.gz).
Распаковываем его:

tar zxv xvid_latest.tar.gz

И собираем:

./configure
make
make install

По умолчанию он установится в нужную директорию, поэтому никаких параметров для configure мы не передаем.

2. Установка H264.
Идем на ftp сервер videolan.org и скачиваем самую свежую daily версию:
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
Распаковываем его:

tar jxvf x264-snapshot-20100914-2245.tar.bz2

И собираем в точности так же, как и Xvid:

./configure
make
make install

3. Пересборка MEncoder
Итак, необходимые библиотеки у нас установлены, осталось пересобрать (ну или собрать с нуля) сам кодер.
Загружаем MEncoder:
http://www.mplayerhq.hu/MPlayer/releases/mplayer-export-snapshot.tar.bz2
Распаковываем его:

tar jxvf mplayer-export-snapshot.tar.bz2

И собираем в точности так же, как и предыдущие пакеты:

./configure
make
make install

Все. Теперь у нас есть MEncoder (ну и конечно же MPlayer) с поддержкой Xvid и H264.

MEncoder – бесплатный кодер

    Для кодирования видео из формата в формат используется кодеки. Codec=coder/decoder. Кодеки бывают как платные, так и бесплатные. Платные кодеки конечно же навороченные, на то они и платные. Но бесплатные кодеки тоже неплохи, а по количеству опций превосходят первых.
    Давайте рассмотрим абсолютно бесплатную программу MEncoder, которая в сочетания с идущей с ней MPlayer, предоставляет полный инструмент для кодирования видео. Что значит полный? Да то и значит, что MEncoder перекодирует из формата в формат, а MPlayer показывает результат работы, то есть – видеофайл. У MEncoder есть одно неоспоримое преимущество. В эту программу вкомпилированы уже все кодеки и вам не надо заботится о том откуда взять кодек для mpeg2 или для кодирования в xvid. Они там уже есть. Весь MEncoder – это один файл (mencoder.exe) и все. Представляете – один файл, который позволяет перекодировать из кучи форматов в другую кучу форматов. Причем абсолютно бесплатно. Второй файл – mplayer.exe позволяет просматривать результаты кодирования. И в него уже тоже прилинкованы все кодеки чтобы показать даже самый экзотический файл. Я тут распинаюсь для того, чтобы показать, что все что вам нужно для экспериментов над вашим видео – это всего лишь два файла и консоль. Все. Больше ничего не надо.
    Теперь другой вопрос. Откуда взять эти волшебные файлы. Я не буду трындеть про сайт MEncoder’а, про сборку его из исходников, про неофициальные сборки для Windows, про установку через официальные репозитарии и прочую ерунду. Я вам дам две ссылки для его прямого скачивания и все.
Mencoder (for win 32)
Mplayer (for win 32)
На данный момент – это самые свежие.
    Про инсталляции под Linux я говорить не буду. Тот кто собрался заниматься видеокодированием под Linux и так должен знать где там что лежит, а если и нет, то откуда взять.