Данный текст не является ни руководством, ни инструкцией по кодингу в MPEG4. Это просто мой опыт борьбы с видеогигабайтами. Современные кодеки позволяют при грамотной раскладке перегонять фильмы практически без потери качества, при условии качественного первоисточника. В свое время я перепробовал для этого множество программ и остановился на mencoder. К сожалению (или нет) под Windows не существует качественного порта mencoder. Win сборка ограниченна по функциональным возможностям и годится лишь для изготовления полуфабрикатов, которые можно скормить VirtualDub или его клонам (они так и не могут научиться понимать сырой MPEG. странно). Поэтому если у вас нет опыта и желания работать в Linux, дальше можно не читать.
Что умеет mencoder? Можно сказать, что практически все. На самом деле из пакета собирается 2 программы: mplayer и mencoder. Mplayer понимает и воспроизводит все видеоконтейнеры и все видеопотоки. Очень удобно кстати. Mencoder же умеет эти контейнеры открывать и создавать полноценный avi. Есть только 2 вещи которые неплохо было бы добавить к функциональности mencoder - разрезка файлов по заданным параметрам (эта фича присутствует, но ограничена по возможностям) и добавление нескольких звуковых дорожек. Хотя все это умеет делать другой пакет под названием transcode.
Итак, перед нами стоит задача перегнать MPEG2 в MPEG4 и запихнуть его в контейнер, придуманный, но как всегда больше не поддерживаемый, MicroSoft, т.е. Avi. Я не буду описывать сборку (компиляцию) пакета mplayer, описание можно найти в прилагаемой документации, кстати, оно выполнено великолепно и очень самодостаточно, причем есть и на русском языке. Первый этап - выбор кодека. На момент написания статьи (31.10.2004) лучшим, на мой взгляд, является опенсорсная ветка DivX - XviD. При равных параметрах, потери в качестве у XviD наименьшие. Да и под linux DivX не особо блистает. Поэтому я буду рассматривать в примерах XviD. Второе, это нужно определиться с размерами готовых файлов. Здесь много вариантов и все зависит от вкусов и желаний. К слову, mencoder имеет встроенный калькулятор битрейта. Работает это так: кладем vob-ы содержащие фильм в какой-нибудь директорий, пишем скрипт::
cat *.vob | mencoder -oac mp3lame -lameopts preset=medium -aid 128 -ovc frameno -ni -
cat *.vob | - читаем по порядку vob файлы и отдаем в трубу.
-oac mp3lame - перегоняем звук в mp3
-lameopts preset=medium - установка битрейта mp3, причем VBR. можно не указывать, тогда будет standart. детальное описание в man.
-aid 128 (0x80) - говорим какая звуковая дорожка. может быть другая, но можно проверить в mplayer и выбрать нужную.
-ovc frameno - без видео. для калькулятора само то.
-ni - Force usage of non-interleaved AVI parser (fixes playing of some bad AVI files) к слову, не помешает.
- - читаем из трубы.
в итоге вы получите файл test.avi, содержащий только звук, и расклад по битрейту.
Достаточно наглядно, не правда ли? Кстати если DVD с ac3 можете указать -oac copy, тогда получите битрейт с ac3. Если вы определились с битрейтом, то пора приступать к енкодингу. Сперва удалим лишний мусор, который добавляют в vob для совпадения картинки с пропорциями экрана монитора, те croping и изменим размер картинки примерно 512хХХХ, те scaling. Такой формат считается оптимальным соотношением по качеству выходного продукта. Натравливаем mplayer на любой vob (у вас может быть другое имя файла):
mplayer -vf cropdetect vts_01_2.vob
увидите следущую картинку
запомните эти параметры -vf crop=704:346:8:64 (первые 2 цифры размер полезного окна, 3 цифра отступ слева, 4 отступ сверху) и снова с уже известными параметрами пробуете скалинг:
mplayer -vf crop=704:346:8:64,scale=512:280 vts_01_2.vob
я специально задал второй параметр у скалинга неверный, и mplayer его сам скорректировал (в самом низу картинки). Но так бывает не всегда, иногда требуется явно указывать -aspect 16:9. И это еще не все. Бывает cropdetect тоже не срабатывает, и приходится определять crop вручную. А поскольку дело это неблагодарное и cropотливое, я пользуюсь avidemux2 с его виsуальными настройками этих фильтров. Но тут уж каждый сам себе терапевт...
Ну а теперь за дело. Во все том же самом директории пишете новый скрипт:
cat *.vob | mencoder -nosound -ovc xvid -xvidencopts vhq=1:pass=1:qpel:trellis -sws 2 -ni -vf crop=704:346:8:64,scale=512:282,pp=lb -o /dev/null -
-nosound - при первом проходе нам звук не нужен
-ovc xvid - собственно XviD :)
-xvidencopts vhq=1:pass=1:qpel:trellis - pass=1 это и есть первый проход при котором кодек обсчитывает каждый фрейм и записывает в файл калькуляцию. остальные опции смотрите в man, и решайте стоит их включать или нет.
-sws 2 - тоже в man
-vf crop=704:346:8:64,scale=512:282,pp=lb - pp=lb убирает деинтерлизинг. нужен только если после скалинга не исчезает расческа.
-o /dev/null - то что получается на выходе отбрасываем. толку от этого не много, нам нужен только xvid-twopass.stats
Картинка, правда, от другого процесса, но смысл понятен...
По завершению первого прохода делаем второй, причем очень важно сохранить все настройки фильтров идентичными:
cat *.vob | mencoder -oac copy -aid 128 -ovc xvid -xvidencopts vhq=1:pass=2:qpel:trellis:bitrate=950 -sws 2 -ni -vf crop=704:346:8:64,scale=512:282,pp=lb -o Name.ac3.avi -
-oac copy - именно copy, так фильм будет качественней.
bitrate=950 - фильм получится размером 700 М (первая картинка)
а на третий проход, если вы решили сделать звук в mp3 то:
mencoder -ovc copy -oac mp3lame -lameopts preset=medium -o Name.mp3.avi Name.ac3.avi
Вот в принципе и все, добавлю только что на моем атлоне 2000 час фильма собирается примерно 2-2.5 часа, зато результат остается надолго в коллекции. Вы же в праве делать, так как хотите, хоть все за один проход.
Создаём DIVX video с помощью mencoder (расширенный хелп по опциям кодеков)
Неофициальный MPlayer FAQ
Оптимизация Linux для просмотра Mpeg4/DivX
Настройка MPlayer (Fine-tuning Mplayer)
Как добавить новые кодеки в MPlayer
LUG Яросвлавль. mplayer - документация, советы, примеры.