Пример
Итак, Вы только что купили новенькую, блестящую копию фильма "Гарри Поттер и Тайная Комната" (в широкоэкранном формате, конечно) и хотите сделать рип этого DVD так, чтобы добавить его к Домашнему кинотеатру на PC. Это DVD первого региона, поэтому NTSC. Пример ниже также применим и для PAL, за исключением того, что надо будет опустить -ofps 24000/1001 (поскольку частота кадров на выходе такая же, как и на входе), и, конечно, границы обрезания будут другими.
После запуска mplayer dvd://1 мы следуем процессу, детально описанному в разделе Как работать с телесином и чересстрочностью в NTSC DVD , и выясняем, что это 24000/1001 fps построчное видео, а значит, использовать фильтры обратного телесина, такие как pullup или filmdint не нужно.
Далее, мы хотим определить верные границы обрезания, поэтому используем фильтр cropdetect:
mplayer dvd://1 -vf cropdetect
Убедитесь, что переместились к полностью заполненному кадру (например, к светлой сцене после пропущенных начальных титров и логотипов), Вы должны увидеть в консоли MPlayer:
crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)
Затем снова воспроизводим фильм с этим фильтром для проверки его корректности:
mplayer dvd://1 -vf crop=720:362:0:58
И убеждаемся, что все выглядит прекрасно. Далее, проверяем, что ширина и высота делятся на 16. С шириной все в порядке, а с высотой — нет. Поскольку мы не заваливали математику в 7-ом классе, то знаем, что ближайшее целое, меньшее 362 и кратное 16, равно 352.
Мы могли бы просто использовать crop=720:352:0:58, но будет лучше отрезать понемногу от верха и низа, чтобы центр остался на месте. Мы уменьшили высоту на 10 пикселов, но не хотим увеличивать смещение по y на 5, поскольку это нечетное число и отрицательно скажется на качестве. Вместо этого, мы увеличим y на 4:
mplayer dvd://1 -vf crop=720:352:0:62
Другая причина, по которой мы урезаем пикселы сверху и снизу, заключаемся в том, что мы хотим убедиться, что удалены все наполовину черные пикселы, если они есть. Если Ваше видео подвержено телесину, убедитесь, что фильтр pullup (или любой другой фильтр обратного телесина, который Вы решили использовать) находится в цепочке до фильтра crop. Если оно чересстрочное, то перед обрезкой проведите деинтерлейсинг. (Если решили сохранить чересстрочность видео, убедитесь, что вертикальный сдвиг обрезания кратен 4.)
Если Вас действительно заботит потеря этих 10 пикселов, Вы можете вместо этого отмасштабировать фильм, уменьшив размерности до ближайших кратных 16 значений. Цепочка фильтров будет выглядеть примерно так:
-vf crop=720:362:0:58,scale=720:352
Подобное уменьшение изображения будет означать потерю небольшого количества деталей, хотя это, возможно, окажется незаметным. Масштабирование изображения в сторону увеличения даст худшее качество (если Вы не увеличиваете битпоток). Обрезка же полностью выбросит те пикселы. Это компромисс, идти на который или нет, придется решать в каждом частном случае. Например, если DVD видео было создано для телевидения, Вы можете захотеть избежать вертикального масштабирования, поскольку дискретизация строк соответствует тому, как содержимое изначально записывалось.
При проверке видим, что наш фильм имеет немного движения и большое количество деталей, так что выбираем для битпотока значение 2400Кбит/сек.
Теперь мы готовы произвести двухпроходное кодирование. Проход первый:
mencoder dvd://1 -ofps 24000/1001 -oac copy -oHarry_Potter_2.avi-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
И второй проход с теми же параметрами, за исключением vpass=2:
mencoder dvd://1 -ofps 24000/1001 -oac copy -oHarry_Potter_2.avi-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
Опции v4mv:mbd=2:trell значительно улучшат качество ценой
времени кодирования. Нет никаких оснований отключать эти
опции, когда главным критерием является качество. Опции
cmp=3:subcmp=3 выбирают функцию сравнения, дающую
лучшее качество, чем стандартная. Вы можете поэкспериментировать с этим параметром
(возможные значения смотрите на man странице), поскольку разные функции могут
давать разный прирост в качестве в зависимости от исходного материала.
Например, если Вы замечаете, что libavcodec
производит слишком много блочных артефактов (квадратиков), то можете попытаться
выбрать экспериментальный NSSE в качестве функции сравнения при помощи опции
*cmp=10.
Для этого фильма полученный AVI будет 138 минут длинной и размером около 3Гб. И, поскольку Вы сказали, что размер файла значения не имеет, это вполне приемлемый результат. Однако, если все-таки хотите получить меньший размер файла, можете попробовать уменьшить битпоток. Увеличение битпотока имеет снижающийся эффект, поэтому, хотя мы можем ясно видеть улучшение от 1800Кбит/сек до 2000Кбит/сек, оно может быть не столь заметно выше 2000Кбит/сек.
Так как мы пропустили исходное видео через фильтр удаления шума, то, возможно, захочется вернуть какую-то его часть во время воспроизведения. Это, совместно с фильтром постобработки spp, существенно улучшит воспринимаемое качество и поможет избежать блочных артефактов в видео. Опцией autoq MPlayer'а Вы можете изменять величину производимой фильтром spp постобработки в зависимости от доступных ресурсов CPU. Вдобавок, на этом этапе Вы можете захотеть применить коррекцию гаммы и/или цвета для лучшего соответствия Вашему монитору. Например:
mplayerHarry_Potter_2.avi-vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3