Журнал LinuxFormat - перейти на главную

LXF102:Кодирование DVD

Материал из Linuxformat
Перейти к: навигация, поиск
Любительское видео. Втиснем отснятый материал в установленные рамки!

Содержание

DVD: уложиться в формат

Video
Подогнать размер отснятого видеоматериала под объем доступного пространства на DVD – это элемент искусства. Алексей Маслий готов поделиться с вами своими наблюдениями.

Одной из проблем, с которыми сталкиваются те, кто решил заняться съемкой любительского видео, является подгонка отснятого материала под размер DVD. Вроде бы тут и говорить не о чем: практически на любом диске написана его емкость – 4,3 ГБ (или 4,7 ГБ, если его изготовитель считать не умеет) или 120 минут видео. Однако не все так просто, как кажется. Во-первых, для уменьшения размера видео- и аудио-потоков кодирование в формат MPEG2 для DVD по умолчанию производится с переменным битрейтом и с ограничением максимального битрейта, то есть 120 минут – это цифра весьма приблизительная. Во-вторых, для удобства использования DVD-видео должно содержать хотя бы минимальное меню, которое тоже будет занимать какое-то место на диске.

Нам потребуются

Для захвата цифрового видео с MiniDV-камеры, а также для монтажа, наложения эффектов на видео и экспорта в формат MPEG2 используется Kino (http://www.kinodv.org), который полагается на mpeg2enc из пакета mjpegtools (http://mjpeg.sourceforge.net/) в том, что касается кодирования видео. Для создания меню и видео-DVD рекомендую QDVDAuthor (http://qdvdauthor.sourceforge.net/), и, наконец, для вспомогательных целей применяется медиа-редактор Avidemux (http://www.avidemux.org/).

Недавно я решил записать видео, отснятое MiniDV-камерой, на DVD. Мне необходимо было записать такой диск, который читался бы на любом DVD-плейере, ну и, конечно, обязательно сделать меню и подменю. После сброса всего отснятого материала, наложения эффектов и кодирования в формат MPEG2 отдельных фрагментов, все они были записаны на DVD (пока что не видео, а обычный) и прекрасно туда поместились. После создания меню и ISO-образа диска, которое, кстати, проводилось уже в другом месте, оказалось, что образ превышает объем DVD примерно на 120 МБ – за счет того самого меню и служебной информации самого видео-DVD.

Что делать? Вариантов действий в данном случае три: сократить оригинальный видеоряд путем вырезания «лишних» фрагментов, увеличить емкость носителя путем разбиения видео на два диска или использования двухслойного DVD, или же попробовать перекодировать видео-файлы так, чтобы они занимали меньше места. В моем случае первый вариант был крайне нежелательным, потому как все «лишнее» видео было выброшено еще на этапе монтажа. Второй вариант также не слишком подходил (записывать менее 120 МБ, то есть около 2-х минут видео, на второй диск просто смешно, а двухслойный DVD стоит пока слишком дорого, да и не любой DVD-привод может их записывать или, что гораздо важнее, воспроизводить). Остается последний вариант – давайте разберемся, как реализовать его с наименьшими потерями для перекодируемого видео.

Что резать, док?

Для начала следует решить, за счет чего будет происходить уменьшение размера файла. Поскольку аудио- и видео-потоки раздельны, можно перекодировать каждый из них сам по себе, но, памятуя, что аудио, записываемое любительскими видеокамерами, и без того обычно не блещет качеством, еще более ухудшать его я считаю кощунством. Итак, займемся размером видеопотока. Его можно сократить за счет уменьшения размера (разрешения) кадра, числа кадров, отображаемых в секунду (fps) или же битрейта. Размер кадра и fps трогать не стоит, дабы не вызывать возможных проблем с DVD-плейерами, да и визуально это скорее бросится в глаза. Остается битрейт.

Еще одна проблема – наличие или отсутствие оригинального видео в виде MiniDV-кассеты или DV-файлов. Зачастую они либо отсутствуют вообще, либо недоступны. Поэтому следует рассмотреть два варианта: перекодирование уже готовых MPEG2-файлов или кодирование несжатого видео-потока. Хотя принципиально они ничем не отличаются, для их реализации удобно использовать различные программы. Как мне кажется, первую задачу наиболее удобно решать с использованием Avidemux, а вторую – непосредственно в приложении, где идет монтаж, то есть в моем случае это Kino. А вообще кодирование можно вести и в QDVDAuthor тем более, что он сам предлагает такую возможность.

Случай 1: Файлы MPEG2

Давайте разберемся, как «пережимать» уже готовые MPEG2-файлы. Вообще-то по возможности этого следует избегать, так как в данном случае будет происходить двойное перекодирование, приводящее к ухудшению качества итогового видеоряда. Поэтому после перекодирования следует оценить, насколько ухудшилось качество, и в случае заметной деградации попробовать наложить фильтры на обрабатываемое изображение – что, в свою очередь, приведет к увеличению времени, требуемого на перекодирование.

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

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

Рис. 1

Рис. 1. Калькулятор битрейта в Avidemux

Приступим к делу. Во-первых, рассчитаем, какой файл и на сколько необходимо уменьшить. В моем случае я решил взять три фрагмента (сюжета) размером от 600 до 800 МБ и урезал каждый из них на 45 МБ (на самом деле, если 45 умножить на 3, получится 135, а не 120, но лучше иметь некоторый резерв, если вдруг кодирование даст несколько больший размер, чем ожидалось). Далее запускаем Avidemux, в который встроен прекрасный калькулятор битрейта, и открываем файл, который собираемся перекодировать. Поскольку файлы закодированы в формате MPEG2, программа предложит его индексировать. После завершения процесса индексации запустите калькулятор и выберите следующие параметры: КонтейнерMPEG, НосительПредустановка, в поле Размер укажите желаемый итоговый размер файла и откройте раздел Результат (Рис. 1). Общий размер должен соответствовать числу в поле Размер, Размер аудио меняться не будет (он соответствует реальному размеру аудио-потока), а изменятся только поля Размер видео и Видеобитрейт. Последнее из них как раз и содержит то число, которое нам необходимо. Можно сразу же оценить, насколько уменьшится видеобитрейт – в моем случае его изменение составляло менее 5 процентов.

Теперь можно переходить непосредственно к перекодированию. Лучше всего это проделать в том же Avidemux. Укажите в качестве видеокодека один из DVD (lavc)' или DVD – в первом случае в качестве программы кодирования будет использоваться ffmpeg, а во втором – mpeg2enc из пакета mjpegtools. Что выбрать, решать вам. Затем произведите настройку видеокодека.

Кодек ffmpeg предлагает одно- и двухпроходное кодирование. Однопроходное кодирование может быть осуществлено только с постоянным битрейтом (пункт Single Pass (bitrate), и при выборе этого варианта следует опираться на число, рассчитанное в калькуляторе. При двухпроходном кодировании допустим переменный битрейт, и в данном случае можно осуществить кодирование, ориентируясь на размер файла (пункт Two Pass (filesize), но следует учитывать два факта. Во-первых, двухпроходное кодирование выполняется существенно дольше; во-вторых, не забывайте, что здесь указывается только размер видео-потока, так что истинный размер файла будет больше – на размер аудио-потока, определенный в калькуляторе.

Рис. 2

Рис. 2. Можно начинать.

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

Если в кодируемом видеоролике присутствует много динамичных сцен или постоянно меняется задний план (например, при панорамной съемке достопримечательностей и т.п.), для уменьшения времени работы следует выбрать однопроходное кодирование с постоянным битрейтом; если же преобладают статические сцены (утренник в детсаду и т.п.) – двухпроходное кодирование с ориентацией на размер файла. При желании можно также настроить видеофильтры, но здесь рекомендации давать сложно, так что действуйте по собственному опыту. В настройках аудиопотока оставьте Копировать, а в качестве контейнера выберите MPEG PS A+V. Теперь можно приступать к перекодировке (Рис. 2). Выбираем Сохранить – и процесс пошел...

Преобразование файлов при помощи mpeg2enc выполняется аналогично, только двухпроходное кодирование ориентируется исключительно на размер файла. Давать рекомендации по выбору того или иного кодека сложно. Я лично предпочитаю использовать mpeg2enc, поскольку кодирование в медиа-редакторе Kino производилось этой же программой.

Если у вас один большой MPEG2-файл с видеофильмом, то практически ничего не меняется, разве что время обработки существенно увеличится, но и результирующее уменьшение битрейта, а следовательно и качества видео, будет весьма незначительно.

Случай 2: Когда у вас есть видео

Рис. 3

Рис. 3. Измените команду для кодирования видео по своему вкусу.


Если доступно исходное DV-видео, то вариант с двойным кодированием применять совершенно незачем. В данном случае будем ориентироваться на полное перекодирование всего фильма с уменьшенным битрейтом. В первую очередь опять следует оценить, каким должно быть изменение битрейта. И здесь нам снова поможет Avidemux.

Будем работать с уже сгенерированным видео-DVD. Откройте в Avidemux файл VTS_01_1.VOB и ответьте утвердительно на вопрос «Выглядит как MPEG. Хотите индексировать?» и на вопрос «Здесь несколько mpeg файлов. Хотите объединить?». По завершении процесса индексирования, который займет некоторое время, снова запустите калькулятор и, действуя так же, как и в предыдущем случае, подберите необходимый битрейт. Теперь мы имеем искомое число. Поскольку производство MPEG-файлов делалось в Kino, то запускаем программу, открываем уже готовый проект и сразу переходим к вкладке Экспорт; выбираем вкладку MPEG. Формат файла – Обычный MPEG2. Раскрываем меню Дополнительно. Выбираем поле Команда кодирования видео. Вкачестве кодировщика используется mpeg2enc из пакета mjpegtools. Сейчас там вписана команда mpeg2enc -v 0, проводящая кодирование с настройками DVD по умолчанию. Чтобы добиться желаемых результатов, необходимо добавить в эту строку опцию -b n, где n – вычисленный ранее битрейт (Рис. 3). При кодировании DVD по умолчанию подразумевается использование переменного битрейта, так что опция -b задает максимальное его значение, и итоговый размер сгенерированного MPEG2-файла не будет превышать требуемого размера. В результате строка в поле Команда кодирования видео будет выглядеть так: mpeg2enc -v 0 -b n. Теперь нажмите кнопку Экспорт и получите необходимый результат. Внимание! Программа запоминает параметры, указанные в поле Команда кодирования видео, и распространяет их действие на все вызовы mpeg2enc, поэтому по завершении кодирования лучше сразу же вернуться к настройкам по умолчанию, то есть убрать параметр -b n.

Счастливый финал

Другие программы кодирования

При написании данной статьи использовался исключительно mpeg2enc из пакета mjpegtools. Однако есть и другие, не менее замечательные программы, такие как упоминавшийся здесь ранее ffmpeg или универсальная программа кодирования mencoder из пакета mplayer (http://www.mplayerhq.hu). Они также позволяют кодировать видео в формат MPEG2 и подстраивать различные параметры. В принципе, их также можно использовать вместе с Kino, переписав команду кодирования видео, достаточно только разобраться с опциями командной строки, прочитав хотя бы man-страницы. Я остановился на mpeg2enc исключительно из-за размера документации по нему. Поскольку мои упражнения в области кодирования видео весьма эпизодичны и ограничиваются узким крутом задач, то разбираться в преогромнейшей куче параметров ffmpeg или mencoder просто нет никакого желания, тем более, что позже это все забывается.

Процесс завершен – можно приступать к генерации нового видео-DVD, заменив старый MPEG-файл на новый с меньшим размером. Причем если перекодированные файлы сохранены с теми же именами, что были ранее, то программа генерации DVD QDVDAuthor просто не заметит подмены, поскольку ориентируется на позиции в файлах не по размеру, а по времени. LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика