Создание DVD RIP с помощью mencoder (mplayer)
Ключевые слова: mplayer , (найти похожие документы )
From: drmist/STNC <http://www.security-teams.net/> ;
Date: Mon, 24 Apr 2007 14:31:37 +0000 (UTC)
Subject: Создание DVD RIP с помощью mencoder
Оригинал: http://www.security-teams.net/board/index.php?showtopic=4509
Далее читатель узнает, как создать dvdrip
с помощью mencoder'а. У пользователей linux или *bsd систем не
возникнет проблем с использованием данной утилиты (входит в один пакет
с mplayer). У меня не было возможности протестировать mencoder в MS
Windows, но я слышал, что портированная под Зло версия mencoder'а
сильно урезана. Если Вы все еще не решились перейти на opensource
операционные системы и у Вас возникли проблемы с использованием
mencoder'а - то можете изложить их суть на нашей конференции ,
поможем, чем сможем =)
Когда я начинал писать статью, я не думал, что она получится такой
большой, потому я решил разбить ее на две части. Первая часть содержит
в себе большое количество теоретической информации, из нее читатель
узнает, как рассчитать аудио- и видео-битрейты для будущего рипа, а
также узнает много других интересных вещей о фильмах, которые смотрит.
Первая часть будет полезна для людей, недавно начавшим заниматься
созданием dvdrip'ов независимо от того, какую программу или программы
они для этого используют. Во второй части будет более подробно
расмотрен непосредственно mencoder - какие параметры принимает и все в
этом духе, но тем не менее она так же будет полезна для новичков в
области создания dvdrip'ов независимо от того, какой программой они
пользуются.
Когда мы говорим "dvdrip", то подразумеваем, что у нас был dvd-диск с
некоторым фильмом, а мы взяли и сохранили этот фильм в видео-файл
(обычно avi).
Существует масса программ для рипанья dvd. Испробовав некоторые из
них, я сделал выбор в пользу mencoder'а по следующим причинам:
* mencoder - программа с открытым исходным кодом,
* портированная под все наиболее распространенные современные ОС
* mencoder легок в использовании
* и хорошо документирован (речь о man-pages)
* его возможности не ограничены одной способностью создания dvdrip'ов
Действительно, с помощью mencoder'а можно не только рипать dvd, но и
скажем перекодировать имеющийся видео-файл с целью уменьшить его
размер (изменить размер битрейта, уменьшить разрешение картинки -
последнее актуально для просмотра видео на коммуникаторах), объединить
два видео-файла в один, порезать один видео-файл на несколько, убрать
шумы в имеющейся записи, скопировать кусок фильма (например Вам нужен
sample dvdrip'а), обрезать черные поля, озвучить фильм на иностранном
языке, прикрепить музыку к какому-нибудь демонстрационному ролику и
много другое. Даже если Вы не собираетесь делать рипы, владеть таким
полезным инструментом уж точно не повредит.
Давайте рассмотрим алгоритм создания dvdrip'а по шагам:
Шаг первый. Возможно, Вы уже замечали, что видео на dvd имеет черные
поля. Если мы будем копировать фильм вместе с этими полями - то только
зря потратим драгоценные байты. Вердикт - черные поля нужно обрезать.
Для этой цели существует просто замечательный видео-фильтр,
определяющий границы черных полей за нас - cropdetect. Говорим
mplayer dvd://1 -vf cropdetect
и медленно проматываем фильм из начала в конец (стрелка вверх или
вправо, не используйте промотку более, чем на 5 минут вперед). В
результате mplayer выдаст нам параметры для видео-фильтра crop, что-то
вроде
-vf crop=688:540:18:16
Фильтр crop обрезает картинку до заданных границ. В данном примере 688
- это ширина прямоугольника, 540 - высота, 18:16 - координаты его
верхнего левого угла. Все что выходит за границы этого прямоугольника
будет обрезано. Говорим
mplayer dvd://1 -vf crop=688:540:18:16
и смотрим, как это выглядит. Во многих фильмах границы черных полей
меняются в ходе просмотра, а иногда даже идут не строго по вертикали
или горизонтали, а с небольшим наклоном, потому не исключено, что
cropdetect мог где-то ошибиться. В связи с этим нужно снова проматать
фильм от начала до конца и убедиться, что черные поля были полностью
вырезаны. Если это не так, шаг 1 нужно повторить. Помните - лучше
обрезать 2-5 лишних пикселей с картинкой, чем оставить полосу шириной
несколько пикселей с черным полем.
На втором шаге нужно определиться - какого размера рип мы хотим
получить. Как правило рип имеет размер чуть меньше либо 700, либо 1400
Mb. Рипы размера 1400 Mb имеют лучшее качество видео и звука,
разрешение экрана у таких рипов больше. Однако полутора часовой фильм,
лишенный каких-либо динамических сцен или эффектных взрывов легко
помещается в 700 Mb файл, особенно если обрезать титры. При этом
аудио-битрейт рипа может составлять 128 Kbps, видео-битрейт: ~1000
Kbps, 700Mb рипы легко могут содержать стерео-звук - для человеческого
глаза и уха этого вполне достаточно. В 1,4 Гб можно уместить
практически любой фильм с практически безупречным качеством видео и
звука. Однако, если Вы захотите поместить его в файло-обменную сеть
(BitTorrent, eDonkey2000), кому-то придется скачать один фильм вместо
двух (из пользователей пиринговых сетей далеко не многие имеют
безлимитный интернет). Я уж не говорю, что полутора гиговый фильм
займет ровно в два раза больше места на Вашем диске, чем 700-меговый.
Итак, допустим, Вы взвесили все за и против и выбрали некоторый размер
будущего рипа. Теперь нам предстоит определить, каким образом мы будем
кодировать звук. Существуют различные аудио-кодеки. В рипах, как
правило, звук храниться в формате mp3. Для кодирования mp3 mencoder
использует популярный кодек Lame. Качество звука определяется
битрейтом. Битрейт - это скалярная величина, измеряемая в килобитах,
деленных на секунды (Кбит/c, Kbps, kbit per second). Битрейт
показывает - какой объем данных используется для кодирования одной
секунды видео или звука. Для звука не рекомендуется брать битрейт
менее 128 Kbps. Если выбрать битрейт меньше, звук может иногда
сопровождаться характерным писком. Если Вы ни разу не встречались с
таким эффектом - попробуйте после прочтения статьи создать рип с
аудио-битрейтом 32 Kbps, продолжительностью несколько секунд. При
бОльших значениях битрейта такой эффект встречается реже и выражен не
так ярко. Однако даже при битрейте 96 Kbps в некоторых моментах может
возникнуть тихий писк, заметный, возможно, только при большой
громкости. Потому в любом случае никогда не берите аудио-битрейт ниже
128 Kbps. Если в фильме много диалогов и мало красивой музыки -
большинство людей не заметит существенных улучшений в качестве звука
при увеличении аудио-битрейта. В 1.4 гиговых рипах можно использовать
значение аудио-битрейта в два или даже три раза больше - для видео в
любом случае останется еще куча места, а звук хуже не станет.
Определим, с какой секунды и по какую мы будем рипать фильм. Часто до
~5-ой секунды фильм не содержит ничего, кроме черного экрана - рипать
фильм до этого места бессмысленно. Иногда при создании рипов имеет
смысл вырезать титры. Это позволит повысить видео-битрейт рипа, тк его
размер не меняется, а продолжительность фильма сокращается. Чтобы
определить время от начала фильма, соответствующее заданному кадру,
воспроизведите его с помощью mplayer и в нужном месте остановите
(нажмите пробел). В консоли Вы увидите текущее значение времени с
точностью до десятой доли секунды. Не стоит округлять это значение до
целых. Если Вы не можете остановить фильм в нужном месте, запустите
mplayer с флагом -speed 0.3 - это замедлит воспроизведение.
Допустим, Вы хостите рипнуть фильм с Tb-ой до Te-ой секунды. Тогда
продолжительность фильма T = Te - Tb [sec].
Обозначим размер фильма за S [byte]. Если Вы решили сделать рип
размером 700 Mb, то S ~= 699.5*1024*1024 = 733478912 байт.
Я немного занижаю размер результирующего файла, учитывая, что далее
нам придется делать рассчеты с некоторым приближением.
Пусть Ba [Kbps]- это выбранный Вами аудио-битрейт. Имея указанные
данные, мы хотим обпредеить значение видио-битрейта Bv [Kbps].
Очевидно, что имеет место следующая формула:
(Bv + Ba)*128*T = S
То есть мы суммируем аудио- и видео- битрейт, переводим сумму из
Кбит/c в Байт/c, умножаем на продолжительность фильма и получаем его
размер. Таким образом зная T, S и Ba легко найти Bv:
Bv = S/(128*T) - Ba
Удивительно, что в некоторых руководствах, которые Вы можете найти в
интернете, предлогается использовать какие-то специальные калькуляторы
для вычисления видео-битрейта =). Рассмотрим пример: пусть T = 90 мин,
Ba = 128 Кбит/сек, S = 699.5 Мб, тогда
Bv = 733478912/(128*90*60) - 128 = 933 [Кбит/с]
Значение Bv порядка 1000 Kbps считается минимумом - если значение
видио-битрейта значительно отличается от этой величины, значит рип
скорее всего получится не очень хорошего качества. Хотя все зависит от
конкретной ситуации. Если в фильме нет динамических сцен, или Вы
рипаете мультфильм, или ужастик с большим количеством темных сцен или
вобще черно-белый фильм, то Bv может быть менее 900 Kbps. 1200-1400
Kbps - хорошее значение для видео-битрейта, 1600 - просто супер.
Потредность в бОльшем битрейте, как правило, не возникает.
Зная значение видео-битрейта и отношение высоты картинки к ширине (в
нашем примере это 688/540 ~= 1.27) нам нужно определить разрешение
картинки в рипе. Вобще dvd бывают разных форматов, из них наиболее
распространенные 4:3 (полноэкранный) и 16:9 (широкоэкранный). Но не
всегда эти форматы соблюдаются, да и плюс мы обрезали черные поля,
потому я советую не верить, когда на упаковке из под dvd пишут 16:9 и
использовать данные, выведеные cropdetect'ом. Обратите внимание -
размер рипа зависит только от значений видео-, аудио-битрейтов и
продолжительности фильма. Размер рипа не зависит от разрешения
картинки в нем. Однако чем больше разрешение и чем меньше
видео-битрейт, тем меньше качество видео. Для определения разрешения
рипа используют следующую формулу:
bpp = (Bv*1024)/(fps*WH)
Где fps (frames per second) - частота кадров в секунду [sec^-1]. Для
цифрового видео, как правило, fps = 25. На самом деле просто тот же
фильм с fps = 24 производится на 4% быстрее. При этом к концу фильма
звуковая дорожка начинает немного отставать от картинки, но человек
этого не замечает. WH - это разрешение картинки, произведение ее
высоты на ширину, измеряется в пикселях в квадрате. bpp (bit per
pixel) - величина, характеризующая качество видео. 0.22 <= bpp <= 0.25
соответствует хорошему качеству. bpp > 0.25 означает, что в рипе
используется слишком маленькое разрешение картинки - биты зря
пропадают. Хотя опять таки все сильно зависит от конкретного фильма.
Быть может в нем содержится так много динамических сцен, что
приемлемого качества можно добиться только при bpp ~= 0.3. Итак,
WH = (Bv*1024)/(fps*bpp)
В нашем примере
WH = (933*1024)/(25*0.25) = 152863
Также имеет место следующая система уравнений:
W/H = RealW/RealH
W*H = WH
где W и H - ширина и высота картинки в рипе соответственно,
RealW/RealH - это 1.27 в нашем случае.
Отсюда:
H = sqrt(WH*RealH/RealW)
W = WH/H
Где функция sqrt - корень квадратный.
В нашем случае:
H = sqrt(152863*540/688) = 346
W = 441
Если значение W получилось больше 640, значит нужно повысить Ba или
bpp и пересчитать все заново. Обратите внимание - ширина картинки
должна быть кратна 32, а высота - 16:
W % 32 = 0
H % 16 = 0
Это связанно с тем, что кодек при кодировании разбивает картинку на
блоки и если высота и ширина не будут кратны 16 и 32 соответственно,
то часть блоков будет заполнена не до конца и драгоценные биты
пропадут. Кроме того, W/H должно быть как можно ближе к RealW/RealH,
иначе картинка будет слишком вытянута по горизонтали или вертикали.
Таким образом имеем:
W = 448, H = 352, W/H = 1.27
Можно также изменить параметры для фильтра crop, чтобы обрезать пару
пикселей слева и справа экрана. В 99% случаев изменения совершенно
незаметны. В широкоэкранных фильмах также можно обрезать по ~40
пикселей слева и справа с целью повысить битрейт.
Итак, мы научились обрезать черные поля, считать аудио- и
видео-битрейты, вычислять разрешение картинки. Этих данных уже почти
достаточно для того, чтобы приступить к созданию рипа. О том, как это
сделать с помощью mencoder'а рассказывается во второй части статьи.
Все права защищены. © drmist/STNC 2007, web: http://www.security-teams.net/
1 , ананимус (? ), 23:01, 05/04/2011 [ответить ]
+ /–
статья порядком устарела. для получения правильных пропорций достаточно применить -vf scale=высота:-10, ширина автоматически масштабируется по нужному аспекту и округляется до 16. да и bpp далеко не показатель качества фильма, т.е. вообще ни о чём не говорит, а вот отношение битрейта первого прохода, выданного mencoder'ом, к битрейту второго прохода, даёт однозанчный ответ, оно не зависит от динамики, шумов, яркости, цвета и прочего. для всех фильмов значения 1,8 достаточно, чтобы пожать практически без потерь.