25 апреля 2010 в 21:26

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

Прежде чем приступить к практике, зададимся некоторыми весьма интересными вопросами: почему консоль, зачем использовать видеокодек 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. Буду чрезвычайно признателен за любые конструктивные замечания и уточнения по данной статье.
Роман Заев @artifex
карма
165,0
рейтинг 0,0
Software Engineer
Похожие публикации

Комментарии (41)

  • –3
    Даже не собираюсь юзать, пока над ней не проведут нормальную оптимизацию и не подключат GPU ускорение. Смотреть OGG видео паралельно с чем-то просто не получается — слишком много жрёт ресурсов. Да ещё и кодируется вечность.
    • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    М… я обычно делаю просто ffmpeg2theora file — на выходе получается вполне прилично.

    Вот что меня больше интересует — так это возможность использовать что-то вроде avidemux'а для вырезания нужного кусочка из файла. Выбрал «от, до», сохранил. Очень бы пригодилось для быстрой публикации видео с использованием тега video…
    • 0
      >Вот что меня больше интересует — так это возможность использовать что-то вроде avidemux'а для вырезания нужного кусочка из файла. Выбрал «от, до», сохранил.

      mencoder, опции -ss и -endpos
    • 0
      Что касается инструментов для ogg, существует отличный набор утилит, которым я пользуюсь — Ogg Video Tools. Для «вырезания кусочка» в составе есть утилита oggCut.
  • +14
    По-моему глупо перекодировать из одного сжатого формата в другой. Во-первых, неизбежны потери. Во-вторых, просто нет смысла, если вы не красноглазый фанатик, конечно.
    • 0
      Тем более что открытость/закрытось кодеков — это не проблема пользователя, это проблема поставщика дистрибутива. К сожалению, в сообществе приверженцев FSF мания «свободности» превратилась в религию.
    • –1
      Абсолютно согласен. Вопрос скорее религиозный, чем практический.
  • +2
    Есть ли возможность выбрать аудиопоток? Или к файлу прикрепятся все аудиопотоки из DVD?
    • 0
      Увы, я не нашёл такой возможности в ffmpeg2theora, поэтому кодирую все аудиопотоки, а потом оставляю нужный мне, или добавляю нужный мне с помощью Ogg Video Tools.
      • 0
        Поэтому имхо unix way будет изучить консольные утилиты GStreamer'а и иметь универсальный инструмент перекодирования и демукса всего во все, включая звук.
        ffmpeg2theora — какой-то костыль, а если завтра мне потребуется для ПСП ил IPhon'a видео? Нужно будет искать ffmpeg2mp4? А если нужен кодек которого нет в ffmpeg?
        • 0
          gst-launch-0.10 filesrc location=in.mp4 ! decodebin name=decode decode. !
          queue ! progressreport update-freq=5 ! ffmpegcolorspace ! theoraenc quality=44 !
          oggmux name=mux ! filesink location=out.ogg decode. !
          queue ! audioconvert ! vorbisenc ! queue ! mux.


          Как-то так, без переносов.
          • 0
            Многословно =) Зато универсально
  • +5
    Xvid — платный?
  • +1
    > Но привычка — великая сила и стандартными кодеками, на сегодняшний день, являются DivX и XviD.
    > Все эти кодеки закрытые, запатентованые и платные

    Неправда, XviD свободный же. Поправьте, если ошибаюсь.
    • +3
      Xvid — кодек, реализующий функционал запатентованного Mpeg 4 Advanced Profile (как то так вроде формат называется). Тут мы сталкиваемся с уже знакомой проблемой патентов на изобретения.
      И кстати помоему для коммерческого использования кодировать им всё равно нельзя… (во всяком случае формально)
      Кстати, DivX кодирует в тот же формат. Фактически если чтото поддерживает DivX, то оно поддерживает и Xvid.
    • 0
      XviD использует патентованные технологии. Полностью свободный лишь Ogg Theora, по крайней мере из тех, что мне известны.
  • +9
    >Все эти кодеки закрытые, запатентованые и платные
    И давно XviD стал закрытым и платным?

    >И начать улучшать мир можно с малого — перевести свою видеотеку в свободный формат OGV — Ogg Vorbis Video
    Ну если кто-то видеотеку собирал не для того чтобы смотреть, а ради идеи — то можно и перекодировать, теряя в качестве и бесполезно тратя время
  • +3
    >> Theora идеально подходит для потокового видео в интернете, итоговые размер/качество оставляют далеко позади всех конкурентов.
    Кажется тесты показывают что Theora по всем техническим параметрам отстает от h.264. На хабре даже была статья серьезная на эту тему.

    Ну и Xvid, да… (кстати, если верить вики, теперь он пишется с маленькой буквой на конце)
  • +5



    • +7
      Прошу прощения за пустой комментарий. Сорвалось.
      Собссно, что я хотел сказать.

      На сегодняшний день, самые популярные видеокодеки — это знакомые всем DivX, XviD, H.264, WMV, Apple QuickTime

      «Всё смешалось: кони, люди...»
      H.264 — это не кодек, а стандарт кодирования. При этом кодеков этого стандарта существует великое множество. QuickTime — вообще название фреймворка, в который входит как минимум плеер и пачка кодеков.

      Кстати, у стандарта H.264 есть бесплатная реализация x264. С открытыми исходниками.

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

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

      Даже если вы верите сравнениям от разработчиков Теоры, где они утверждают, что их творение просто рвёт всех, то зачем применять кодек, предназначенный для видео в интернете, для обычного DVD-rip'а. В этой области Теора однозначно проигрывает.
      • 0
        Насчёт x264 — см мой же комментарий чуть выше (http://habrahabr.ru/blogs/ogg/91963/#comment_2780025)
        Ситуация примерно та же, другое дело что в патенте на H.264 прописана дата X, до которой некоммерческое использование бесплатно. Иными словами сейчас патентодержатель просто «подсаживает» на этот кодек, а затем наступят репрессии…
        • 0
          Не наступят. Патентодержатели сами себе что ли злобные буратины, пользователей сгонять? Там не дураки сидят, продлили дату royalty-free до 2016. В конце этого года станет известно, продлят ли ещё. Глупо было бы не продлить. Тем более когда конкуренты не дремлют.

          Патентованием в данном случае компании защищаются скорее от конкурентов, а не от пользователей =)
          • 0
            mp3
            ?
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Во-первых, в двухпроходном режиме битрейт не фиксированный, а переменный. А фиксированный битрейт правда никто не любит.
          Во-вторых, с тем же успехом можно говорить, что любой кодек не любит модель ratecontrol'а, отличную от quality-based. Опять таки, сомневаюсь, что произойдёт чудо, и Теора всех обгонит на -v.

          Если у теоры так всё плохо со своими наработками для 2pass-кодирования, разработчиками ничто не мешало взять модель из x264 как базовую (там нет ничего патентованного, просто эмпирика), и дальше улучшить её.

          Сравнения от того товарища мы, к сожалению, так и не дождались (или я что-то пропустил?). Своё воспроизводить мне сейчас неинтересно, тем более это съест больше времени на подготовку. Когда выйдет VP8, постараюсь учесть этот недочёт.
      • 0
        Да, Ваш обзор превосходный. Я ознакомился с ним ещё несколько месяцев назад. Для таких поправок как Ваша, я как раз и написал в конце статьи P.S.

        Я недавно делал DVDrip фильма Revolution OS в Ogg Theora и результатом очень доволен. Может изначально кодек и не предназначался для таких задач, но вполне справился. Так как всё прошло хорошо, свои любимые фильмы я также «рипнул» в Теору. Если делать рип с DVD5, никаких проблем с качеством не возникает.

        Опять же, вопрос скорее религиозный. Кодек должен быть не только бесплатным, но и свободным. А таким является, из всех известных мне, лишь Ogg Theora.
        • 0
          Естественно, что кодек должен был справиться. Только если бы вы сделали рип, используя x264, при том же качестве вы могли бы получить значительно меньший размер файла. Это уже вопрос практичности: экономится трафик и место на винте.
    • +1
      Тут запикано =)
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Скачивая с интернета фильм и нарушая авторские права, не забудьте удостовериться, что он сжат свободным кодеком :D
      • НЛО прилетело и опубликовало эту надпись здесь
      • –1
        Да, я уже оценил иронию. Рад, что вы тоже :)
  • 0
    && это не сложение. Не надо запутывать людей. Операция x && y означает «выполнить Y только тогда, когда X был выполнен успешно». || соответственно, наоборот.
    • 0
      Спасибо за уточнение, но по факту это всё-таки сложение и оно никак не может запутать людей.
      • +2
        Раз уж на то пошло, ресурс it-шный, и пишем про кодеки, операции надо называть правильно. && — конъюнкция.
        То есть логическое умножение. Ну ни разу не сложение.
        Ваш К.О., если что.
  • +2
    Теора, кстати, улучшается.
    Вот ссылка на видео, закодированное тестовой версией теоры
    http://people.xiph.org/~greg/video/ptalarbvorm/
  • 0
    А как теора работает с многоядерными процессорами? Хотелось бы при конвертировании/сжатии задействовать все возможные вычислительные мощности для увеличения скорости кодирования.
    • 0
      Никак не работает, использует одно ядро.
  • 0
    Осталось дождаться такой же массовости распространения HTML5 плееров, как и Flash.
  • 0
    >Theora идеально подходит для потокового видео в интернете
    Наверное это не совсем так

    levgem.livejournal.com/285987.html

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.