Конвертирование видео в Ogg Theora. UNIX Way

artifex 25 апреля 2010 в 21:26 3,9k
Прежде чем приступить к практике, зададимся некоторыми весьма интересными вопросами: почему консоль, зачем использовать видеокодек Ogg Theora, каким образом и с какими параметрами лучше конвертировать видео.

Начнём с матчасти:

Видеокодек — это программа/алгоритм сжатия (то есть уменьшения размера) видеоданных (видеофайла, видеопотока). Кодек — файл-формула, которая определяет, каким образом можно «упаковать» видеоконтент и, соответственно, проиграть видео. Также возможно кодирование кроме видео и аудиоинформации, добавления субтитров, векторных эффектов и т. п.


На сегодняшний день, самые популярные видеокодеки — это знакомые всем DivX, XviD, H.264, WMV, Apple QuickTime и множество других. Ogg Theora всегда была в тени своих коллег и на то, видимо, были какие-то свои причины. Может быть потому, что это относительно новый кодек (он появился только в 2004-м году), может потому-что он изначально ориентировался на применение в интернете, а не для кодирования видеофильмов… Это уже не важно.

  • Theora — это открытый и бесплатный видеокодек для коммерческого и некоммерческого использования.
  • Theora использует высококачественные алгоритмы сжатия, что делает этот кодек хорошим выбором для кодирования любого типа видео.
  • Theora идеально подходит для потокового видео в интернете, итоговые размер/качество оставляют далеко позади всех конкурентов.
  • Theora кроссплатформенна. Это означает, что вы можете использовать формат в любой современной операционной системе, как в Linux, так и в Windows.
  • Каждый современный Linux-дистрибутив поддерживает Theora по-умолчанию. Вам не придётся использовать сторонние проприетарные кодеки для просмотра видео в этом формате.


Вот основные причины для использования Ogg Theora. Но привычка — великая сила и стандартными кодеками, на сегодняшний день, являются DivX и XviD. Для высококачественного кодирования используют обычно H.264. Когда вы скачиваете из интернета фильм, будьте уверены — скорее всего он сжат одним из этих трёх кодеков.

Кто виноват и что делать? Все эти кодеки закрытые, запатентованые и платные. Что-то мне подсказывает, что их владельцы получают неплохие отчисления от каждого проданного бытового плеера. Есть уйма причин, по которым Theora является более предпочтительным выбором. И начать улучшать мир можно с малого — перевести свою видеотеку в свободный формат OGV — Ogg Vorbis Video.

Используя Линукс, нам доступно очень мощное средство — консоль bash. С её помощью можно творить чудеса и сложнейшие операции делать за считанные минуты. Это же касается и конвертирования видео. Чтобы начать, нам понадобится только одна консольная утилитка — ffmpeg2theora. Не буду описывать как её установить. Если вы используете Линукс, то уже умеете устанавливать любые программы штатным менеджером пакетов. Поэтому сразу перейдём к сути.

Пример 1. Конвертирование «авишки».


Для примера давайте переконвертируем одну серию моего любимого сериала «Теория Большого Взрыва». Так что открываем консоль.

Переходим в папку с файлом:
$ cd ~/Downloads/

Выбираем оптимальные опции для нединамичного видео и нормального звука:
$ ffmpeg2theora -v 8 --optimize -a 4 -o test.ogv The.Big.Bang.Theory.S03E17.rus.HDTVrip.\[Kuraj-Bambey.Ru\].avi

Давайте разберём что же тут такое понаписано. ffmpeg2theora — понятно, это сама программа. Далее идут её опции-ключи:
-v указывает на желаемое качество видео по шкале от одного до десяти. 8-го уровня вполне достаточно для перекодирования уже сжатого видео. Если фильм насыщен динамичными сценами, то лучше указать по максимуму, то есть 10.

--optimize, как нетрудно догадаться, оптимизирует качество картинки, правда в ущерб скорости конвертирования. Но спешить нам особо некуда, качество важнее.

-a указывает на желаемое качество звука, также по десятибальной шкале. Цифра 4 означает на деле 128 кбит, чего вполне достаточно для сериала. Можно также указать ключ -A с параметром 128. Одно и то же получается.

После -o мы указываем имя файла на выходе, к примеру test.ogv (ogv — это стандартное расширение для видео в формате ogg).

А в самом конце указываем файл, который, собственно хотим переконвертировать. Жмём Enter и следим за результатом. Или не следим, так как процесс длится довольно долго, это зависит от мощности компьютера.

Пример 2. Конвертирование DVD.


Здесь всё несколько сложнее, но ненамного. Сжимать уже сжатое видео иногда всё-таки чревато ощутимыми потерями качества картинки. А вот DVDRip в формате Theora по качеству лучше привычного всем DivX. Для примера давайте «рипнем» фильм «Матрица».

Переходим в папку с файлом:
$ cd ~/Downloads/Matrix/VIDEO_TS/

Выбираем оптимальные опции в расчёте на исходный файл размером 1,4 гигабайта:
$ cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB | ffmpeg2theora --videobitrate 1434 --optimize --first-pass tech.ogv --audiobitrate 256 - && cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB | ffmpeg2theora --videobitrate 1434 --optimize --second-pass tech.ogv --audiobitrate 256 -o matrix.ogv -

Давайте разоблачим магию этого заклинания. Здесь мы сталкиваемся с мощнейшей штукой консоли под названием «перенаправление потоков». Это выходит за рамки данной статьи, но можно увидеть, что до команды ffmpeg2theora мы выстраиваем список файлов на конвертирование. DVD всегда разбито на части вида VTS_порядковый-номер_порядковый-номер, поэтому нам нужно собрать их воедино.

cat занимается сложением файлов.

| — это символ перенаправления, в нашем случае даёт очередь файлов на обработку программе ffmpeg2theora.

--videobitrate указывает на желаемое качество видео, как и ключ -v, но не по шкале от одного до десяти, а точно в килобитах. Синоним ключа -V.

--first-pass-pass означает первый, технический прогон видео и сохранение аналитической информации в файл tech.ogv для будущей основы второго, финального прогона видео.

--audiobitrate указывает на качество звука в килобитах. Синоним ключа -A.

&& — это как команда сложения. Сразу после первой программы выполнить вторую. Просто для автоматизации производства :)

--second-pass — второй прогон. В это время применяются алгоритмы и происходит непосредственное кодирование видеоряда. Для этого используется подготовленный во время первого, «аналитического» прохода, технический файл tech.ogv.

В конце команды ставится -, это указывает конвертору на входящий поток файлов для обработки.

Жмём Enter и ждём-ждём-ждём. Ждать придётся долго. Пока ждём, давайте узнаем откуда взялись цифры 1434 и 256.

С 256 всё просто. Это 256 кбит на звук, что порядочно даже для мюзикла :) Видеобитрейт вычисляется по формуле:

BV=(Sx8x1024)/L-BA, где

BV — видеобитрейт;
S — желаемый размер файла в мегабайтах;
L — длительность фильма в секундах;
BA — аудиобитрейт.

Важно уточнить, что это чистый битрейт, без так называемой избыточной технической информации, которая составляет около одного процента от битрейта видео. То есть реальный битрейт, который необходимо указать кодировщику — это 99% от BV. Вот и получаются те самые 1434 килобита.

Я захотел, чтобы исходный файл занимал именно 1,4 гигабайта. Результат несложных вычислений дал желаемый результат. Если точный размер файла не имеет значения, можно просто указать ключ -v с параметром 8, 9 или 10. Это даст высокое качество картинки без лишних заморочек. В любом случае поиграйтесь с настройками, так как для каждого видео параметры подбираются индивидуально, это зависит от динамики картинки, полутонов и т.п.

Процесс, как видите, несложный и гибкий. Конечно, перевод всей домашней видеотеки займёт много времени, но понемногу, по чуть-чуть можно начинать.

В формате Ogg Theora мной обнаружен только один недостаток, для многих он покажется существенным — отсутствие поддержки со стороны производителей бытовой техники. Да, ваш dvd-плеер, скорее всего, не сможет воспроизвести Ogg. Но ведь спрос рождает предложение, верно? Если формат станет популярным, наверняка производители обратят на него внимание. Качество картинки будет радовать глаз и настанет мир во всём мире :) Всё в наших руках.

P.S. Буду чрезвычайно признателен за любые конструктивные замечания и уточнения по данной статье.
Проголосовать:
+37
Сохранить: