Возможен вариант, когда вас не удволетворяет
качество полученного изображения. Наиболее очевидным решением
этой проблемы, является полная перекодировка всего фильма заново,
изменив либо битрейт, либо разрешение, либо и то и другое сразу.
Но, с другой стороны, не хочется сильно увеличивать размер файла.
Ситуация кажется безвыходной. Но это не совсем так.
Бывают Low Motion и High
Motion варианты кодеков. Различаются они тем, что при
использовании Low Motion кодека битрейт постоянно остаётся неизменным,
и его часто не хватает на быстро меняющихся сценах, зато спокойные
сцены кодируются с великолепным качеством. High Motion кодек
напротив, меняет битрейт при увеличении потока данных, поэтому
динамичные сцены кодируются с более высоким битрейтом и качеством.
Оборотной стороной процесса является то, что во время спокойных
сцен битрейт падает сильнее, чем нам хотелось бы, и их качество
получается существенно хуже. То что мы хотим сделать, это взять
лучшее с одного и другого режима, то есть иметь стабильный битрейт
в спокойных сценах, и более высокий в динамичных. В теперешней
версии Divx нет возможности толком настраивать эти параметры,
будем надёятся, что в будущем они появятся. (На самом деле
в новой программе VirtualDub
при установки кодека DixX5 Pro есть возможность задать кодировку
файла, используя два прохода - в первом проходе снимается статистика
по имеющимся кадрам, а во втором проходе принимается решение,
каким из двух перечисленных варианов кодеков производить кодирование:
Low Motion или High Motion, причем можно сделать поправку, как
в сторону одного, так и в сторону другого, в зависимости от
того, что Вы хотите получить на выходе: размер или качество.
Подробнее об этом можно почитать тут)
Но, тем не менее, при определённом желании это можно поправить
уже сейчас. Основная идея проста. Фильм кодируется два раза,
один раз с использованием Low Motion режима, и ещё раз с использованием
High Motion. После этого, с первого варианта вырезаются спокойный
сцены, со второго динамичные, и то что получиться склеивается
вместе. Всё что требуется, это изменить тип кодека в заголовке
файла. Делается это любым HEX editor'ом, найдя стринг div4 или
div3. Означают они Fast Motion кодек или Low Motion кодек соответственно,
и всё что надо сделать, это убедиться в том, что во всех частях,
которые планируется клеить, тип кодека называется одинаково.
Саму склейку и резку можно, конечно же, делать с помощью VirtualDub,
который будет описан ниже, но в силу его особенностей, про которые
так же будет упомянуто ниже, он далеко не лучший выбор, когда
приходится работать с большим количеством частей одного фильма,
и лучше делать это чем-нибудь более продвинутым, и увы, не бесплатным.
Однако, резать фильм на куски вручную, выбирать
различные участки и сводить их, занятие весьма утомительное,
даже когда имеется всего лишь два файла, над которыми надо работать.
А ведь очевидно, что если закодировать фильм с большим количеством
кодеров и настроек, то можно добиться ещё меньшего размера файла,
и ещё более высокого качества. Однако, объём работы, который
придётся проделать для этого такой, что страшно даже приступать.
Неужели нельзя этот процесс как-нибудь автоматизировать? Конечно
можно, и соответствующее программное обеспечение уже написано.
Одной из самых удобных, и в то же время одной из самых мощных
программ, которые занимаются этим, является
FairUse
В самом названии заложено, что не надо её использовать
для нехороших целей, таких как обкрадывание бедных медиа издательских
компаний, а только с целью расширения кругозора, или экономии
ресурса DVD привода :-) Хотя, исходя из того, как выглядит логотип
этой программы, про происхождение названия есть и другое мнение...
При старте FairUse выводится лицензионное соглашение
с которым надо согласиться, что бы запустить её. Одним из пунктов
в этом соглашении является запрет на обсуждение программы, её
функций, и даже самого факта её существования. Поэтому я специально
оговорюсь, я не буду ОБСУЖДАТЬ FairUse, я её просто опишу. А
если мне захочется её обсудить, то я попрошу брата запустить
её, и пускай он соглашается с лицензией. В общем, не подкопаетесь
;-).
Итак, FairUse это программа реализующая очень
интересный алгоритм при декодировании, известный под названием
MM4, то есть кодирование одного и того же фильма несколько раз
с разными настройками кодеков, что бы в последствии выбрать
лучшие части закодированные каждым из кодеков и соединить их
вместе. Несмотря на реализацию столь продвинутого метода, работать
с FairUse настолько просто, её интерфейс настолько продвинут,
что первая мысль возникающая при ознакомлении с этой программой
"Так не бывает!". Всё настолько просто, что описывая её можно
было бы ограничиться всего лишь несколькими предложениями:
- Выберете куда складывать промежуточные файлы, и какой
привод у Вас DVD-ROM.
- Выберете сам фильм, где предложат (обычно, он самый длинный).
- Выберете размер файла, который хотите иметь, и желаемое
разрешение.
- Жмёте на кнопки Next, Auto, и тому подобные везде, где
встретятся.
- И всё. Можно наслаждаться результатом. Тем, кому хватает
этого описания, бегом качать и кодить, кто хочет узнать
немного больше, читаем дальше.
Итак, запустив FairUse, согласившись с лицензионным соглашением
вы окажитесь в окне выбора файлов. Вариантов всего два, начать
новый проект или продолжить работу над старым. При выборе нового
проекта требуется указать имя проекта и место, куда будут складываться
промежуточные файлы. Места требуется много, ведь FairUse сначала
рипает содержимого DVD диска, а потом хранит там все промежуточные
файлы, которые образуются при энкодинге фильма несколькими способами.
Точный размер требуемого места определяется кодируемым фильмом
а так же количеством и настройками используемых кодеров. Но,
обычно, не стоит даже и приниматься если у вас меньше 6-7 свободных
гигабайт на разделе.
К сожалению, в текущей версии FairUse имеется
ряд недостатков:
- можно работать только с DVD дисками;
- нельзя раскидывать временные файлы по разным дискам;
После того как пользователь согласился с лицензионным соглашением
у него спросят, в каком из приводов находится диск с фильмом,
который требуется закодировать (обычно правильно выбирается
автоматически), и после этого окажитесь в меню, где предложат
выбрать нужный видеофрагмент. Из дополнительной информации по
видеофрагментам указывается длина ролика, аудиодорожки и субтитры,
что более чем достаточно для того, что бы выбрать то, что нужно.
После того как выбрано нужное, соответствующие
файлы с DVD диска будет переписаны на жёсткий диск и расшифрованы.
Файлы записываются в собственном формате, и
не могут быть проиграны стандартными плеерами. Итак, после того
как нужные файлы находятся на жёстком диске, вы окажитесь вот
в таком окне:
В этом окне можно выбрать диапазон кадров,
которые надо декодировать, вручную или выставив слайдер на нужное
значение, и нажав на соответствующий значок, а так же вырезать
ненужное (отступы лево-право-верх-низ), чтобы не тратить битрейт
понапрасну. Сделать это можно и вручную, но удобнее воспользоваться
автоматической резкой. При нажатии на кнопку Auto Set, FairUse
выбирает несколько произвольных кадров из выбранного отрезка
(обычно 32), анализирует их, определяет лишние области. Обычно,
он делает это правильно, и ничего подправлять не нужно.
Выбрав нужное, нажимаем на кнопку Next, и оказываемся в следующем
окне, где предложат выбрать режим, в котором FairUse будет работать
с видео. Этих режимов два, Native, когда видеопоток
будет кодироваться в том виде, в котором он записан на DVD диске,
т.е. 29,970 кадров в секунду, и IVTC mode,
используемый тогда, когда видео записано в чрезстрочном формате,
и каждый кадр разбит на два полукадра (подобных дисков становится
всё меньше и меньше). Лучшим выбором будет воспользоваться кнопкой
Auto detect, тогда FairUse проанализирует несколько кадров,
и подскажет, какой режим лучше использовать.
Выбрав нужный режим, окажитесь в следующем
окне, где предложат выбрать размер файла, который желательно
получить, и разрешение, в котором фильм должен быть записан.
Единственное новое понятие, с которым придётся
встретиться в этом окне, это Compression Ratio. Это значение
означает отношение размера оригинального кадра и компрессированного
кадра. Чем оно меньше, тем качество выше. Автор FairUse рекомендует
использовать значения не более чем 120:1 для
динамичных фильмов, и не более чес 150:1 для
спокойных фильмов. У меня нет оснований не доверять ему. FairUse
по умолчанию показывает только оптимальные (с его точки зрения)
разрешения, если хотите чего-либо другого, снимите галочку с
чекбокса Show only preferred resolutions. Выбрав нужное разрешение
и нажав на кнопку Next, окажитесь в окне, где предложат выбрать
количество и настройки кодеков, которые будут использоваться
при кодировании фильма. Это окно является одним из важнейших,
и даёт возможность настроить именно ту функцию, которая делает
FairUse настолько отличным от других программ энкодеров.
В этом окне можно ещё раз уточнить, какой размер
файла желательно получить. Здесь же показывается и средний битрейт,
который получиться при кодировании выбранного отрезка в выбранный
размер. В отличии от большинства других программ, здесь значение
битрейта указывается не в кбитах в секунду, а в килобитах на
кадр (фрейм). Для того что бы получить более привычное значение,
надо всего лишь умножить эту цифру на количество кадров в секунду
(это значение показывалось в окне, где предлагалось выбрать
режим работы с фильмом, Native - 29,970или IVTC mode - 23,976).
Количество кодеков, которые могут быть использованы, 10. По
умолчанию стоит 4. Вообще, можно нажать на кнопку Auto
Add, и продолжить с тем, что предложит FairUse, обычно
его выбор далеко не самый худший.
Но можно добавить и самому. Для каждого из добавляемых кодеков
можно выбрать его тип, Low-motion или High-motion, битрейт (в
битах на кадр), минимальный и максимальный промежуток между
ключевыми кадрами. Здесь стоит отметить, что кодеки которые
используются при работе FairUse, это не тот Divx кодек, который
используется большинством программ энкодеров и практически всеми
плеерами. Автор FairUse переделал стандартный кодек, убрал несколько
багов с него, и изменил механизм вставки ключевых кадров. Сделано
это как с целью повышения качества получаемых фильмов, так и
с целью уменьшения размера получаемых файлов.
На этой же странице в нижнем окне выбираются звуковые дорожки,
которые будут извлечены из vob-файла. Можно добавить интересующие
дорожки, которые будут сохранены в директории проекта в формате
ac3.
После того, как выбрано количество кодеков,
которые будут использоваться, и все они настроены, остаётся
только нажать кнопку Next, и начнётся процесс кодирования. Процесс
этот весьма долгий, заметно дольше чем это
заняло бы с другими программами энкодерами, потому что FairUse
делает всё то же самое что и они, только несколько раз, столько,
сколько кодеков используется. Приятный сюрприз ожидает владельцев
SMP машин. Поддержка мультипроцессорных машин в FairUse сделана
лучше всяких похвал, гораздо лучше чем во всех энкодерах, которые
мне приходилось пробовать. Из-за этого, на SMP машине FairUse
работает практически с той же скоростью, как на той же самой
машине работает Flask!
Также выбирается режим кодирования для аудиодорожки. На выходе
получается ac3-файл.
После того как кодирование законченно, вы окажетесь
в следующем окне, где предложат ещё раз выбрать итоговый размер
файла. Выбрав размер, нажмёте на кнопку Recalculate, и увидите
похожее окно:
В этом окне показывается статистика, сколько
кадров из какого видеопотока используется, и очень интересная
переменная, названная автором diff threshold. Эта цифра представляет
собой некий коэффициент определяющий разницу между полученным
изображением и исходным. По утверждению автора, всё что ниже
11000 означает практически идеальное качество, от 11000 до 12000
приемлемое. Выше 12000, качество не столь хорошо, как хотелось
бы, и лучше увеличить размер файла, но получить лучшее качество.
Изменив размер, снова нажмите кнопку Recalculate, и все значения
изменятся. Таким образом можно подобрать оптимальный размер
файла исходя из значения diff threshold. После этого останется
вновь нажать на Next, и вы получите готовый файл с изображеним.
Если качество полученного фильма вас не удовлетворяет, то всегда
можно открыть проект заново (при старте FairUse выбрать опцию
Open an existing project), и переделать его с другим размером
файла, и с другим diff threshold.
Останется только наложить звук (повторюсь,
что новая версия 0.38 умеет это делать автоматически). Как и
говорилось, звуковая дорожка вытаскивается из выбранного отрезка
фильма в формате ac3. Прежде чем продолжить работу - определитесь,
хотите ли вы иметь звук в AC3 формате в итоговом фильме (что
будет расточительством, с точки зрения размера итогового файла),
или в чём-либо более экономном. От этого зависят дальнейшие
действия. Обычно, *.ac3 дорожку сначала переводят в *.wav формат,
и потом уже с ним работают. Для этого можно воспользоваться
утилитой ac3dec.zip. Для того что бы
просто перевести AC3 в *.wav, достаточно всего одного ключа:
ac3dec ИмяФайла.ac3 -out ИмяФайла.wav
Так или иначе, вы имеете несколько файлов с
видео и звуком, всё что теперь требуется, это объединить их.
Это можно сделать при помощи программы NanDub
и описанного алгоритма.
P.S. Появилась новая версия
программы FairUse Wizard 0.38 - .
Внешне последовательность действия для создания avi-файла такая
же. Нюансы:
- Появились кодеки DivX и XviD. Последний, на мой взгляд, более
качественно при меньшем объеме делает компрессию. Однако, если
у Вас на компьютере стоит старый кодек XviD, то при просмотре
изображение будет дрожать. Если такое происходит, то просто
обновите кодек на своем компьютере - .
- Программа может накладывать звуковую дорожку, причем в следующих
форматах: AC3, MP3, OGG. Сама же конвертирует звук с заданным
битрейдом.