1 |
Hi!
|
2 |
|
3 |
On Thu, Jan 12, 2006 at 07:36:49PM +0200, ..::ValenOK::.. wrote:
|
4 |
> Вопрос: Чем можно закодировать ДВД-фильм в .AVI (желателен DivX6), |
5 |
> и можно ли процесс кодирования распределить по компам в |
6 |
> локалке(допустим, везде стоит генту)? |
7 |
|
8 |
Кодированием DVD в AVI занимается mencoder (входит в mplayer).
|
9 |
Можно ли распределить кодирование по компам - не знаю, но вопрос интересный. :)
|
10 |
|
11 |
В принципе есть несколько утилит, которые позволяют перегнать DVD в AVI
|
12 |
"в один клик" - по сути это просто оболочки к mencoder. Но качество того,
|
13 |
что они выдают - не очень хорошее. Дело в том, что для действительно
|
14 |
качественного перевода DVD в AVI требуется во-первых запуск mencoder в
|
15 |
несколько проходов (что увеличивает время кодирования), а во-вторых не
|
16 |
помешает ручная настройка в зависимости от характеристик фильма. :-D
|
17 |
|
18 |
Я с этим глубоко не ковырялся, но в общих чертах инструкция по ручному запуску
|
19 |
mencoder выглядит примерно так:
|
20 |
|
21 |
---cut---
|
22 |
# Источник (dvd, или dvd в каталоге на винте, или файл):
|
23 |
src="/path/to/file.avi"
|
24 |
src="dvd://3 -dvd-device /path/to/saved/dvd/"
|
25 |
src="dvd://3 -chapter 2-6"
|
26 |
src="dvd://3"
|
27 |
|
28 |
# Если в исходном dvd/файле несколько аудио потоков нужно выбрать нужный по
|
29 |
# названию или по номеру.
|
30 |
|
31 |
# Язык:
|
32 |
lang="-aid 128"
|
33 |
lang="-alang ru"
|
34 |
|
35 |
# Проверить корректность выбранного языка можно запустив mplayer:
|
36 |
mplayer $src $lang
|
37 |
|
38 |
# Для того, чтобы создаваемый .avi влез на один/два CD нужно определить bitrate.
|
39 |
# Bitrate для видео зависит от: максимального размера файла S, длины фильма L и
|
40 |
# размера аудиотрека A примерно таким образом: (S-A)/L .
|
41 |
#
|
42 |
# Размер аудиотрека зависит от того, каким кодеком (mp3/ogg) и с каким
|
43 |
# качеством он будет конвертироваться (или будет просто копироваться без
|
44 |
# изменений, т.е., например, останется в формате ac3).
|
45 |
|
46 |
# Аудиокодек:
|
47 |
audio="-oac copy"
|
48 |
audio="-oac mp3lame -lameopts abr:br=128:mode=1 -srate 44100"
|
49 |
audio="-oac mp3lame -lameopts preset=medium"
|
50 |
|
51 |
# Создание аудиопотока с целью узнать его размер и общую длину фильма чтобы
|
52 |
# определить bitrate для видео. Варианты bitrate mencoder выведет сам в конце
|
53 |
# этого прохода примерно в таком виде:
|
54 |
# Recommended video bitrate for 650MB CD: 673
|
55 |
# Recommended video bitrate for 700MB CD: 735
|
56 |
# Recommended video bitrate for 800MB CD: 860
|
57 |
# Recommended video bitrate for 2 x 650MB CD: 1481
|
58 |
# Recommended video bitrate for 2 x 700MB CD: 1605
|
59 |
# Recommended video bitrate for 2 x 800MB CD: 1854
|
60 |
#
|
61 |
# Файл должен называться именно frameno.avi, тогда он будет автоматически
|
62 |
# использоваться как источник звука при "-oac copy" на последнем проходе.
|
63 |
# Это позволит избежать повторного кодирования в mp3 (если $audio="-oac copy",
|
64 |
# то можно вместо frameno.avi указать /dev/null чтобы не занимать место на
|
65 |
# диске и не тратить время на запись аудио на диск, т.к. на последнем проходе
|
66 |
# будет всё-равно откуда копировать звук - из frameno.avi или $src).
|
67 |
|
68 |
# Первый проход по всему фильму:
|
69 |
rm -f frameno.avi
|
70 |
mencoder $src $lang $audio -ovc frameno -o frameno.avi
|
71 |
|
72 |
# Bitrate (получен из предыдущего запуска mencoder):
|
73 |
bitrate=735
|
74 |
|
75 |
# Определение размера картинки и урезание её при необходимости. Цель этого
|
76 |
# урезания - избавиться от чёрных полос по краям изображения т.к. на
|
77 |
# кодирование этих полос будут потрачено слишком много байт, которые могли бы
|
78 |
# быть использованы для улучшения качества в центре кадра.
|
79 |
#
|
80 |
# mplayer умеет сам определять размер, и выводит его примерно в таком виде:
|
81 |
# crop area: X: 0..479 Y: 104..373 (-vf crop=480:270:0:104) 0.9% 0 0 87%
|
82 |
# crop area: X: 0..479 Y: 104..373 (-vf crop=480:270:0:104) 0.9% 0 0 86%
|
83 |
# crop area: X: 0..479 Y: 104..373 (-vf crop=480:270:0:104) 1.0% 0 0 86%
|
84 |
# Нас интересует вот эта часть: ----------> ^^^^^^^^^^^^^^^^^^ .
|
85 |
#
|
86 |
# Первые два числа (480 и 270) это ширина/высота кадра.
|
87 |
# Они должны быть кратны 16 для лучшего качества.
|
88 |
# Если они не кратны (270) то их нужно уменьшить до ближайшего кратного 16-ти
|
89 |
# числа (270->256).
|
90 |
# Вторые два числа (0 и 104) это отступы слева и сверху.
|
91 |
# Они должны быть чётными для лучшего качества.
|
92 |
# Если ширина или высота были уменьшены до кратного 16-ти числа, то желательно
|
93 |
# скорректировать и отступы, чтобы не сдвинуть центр кадра. (В этом примере
|
94 |
# высота была уменьшена на 270-256=14, соотвественно для сохранения центра
|
95 |
# нужно увеличить второй отсуп на 14/2=7, т.е. установить его в 104+7=111,
|
96 |
# но поскольку отступ должен быть чётным то мы его уменьшим на 1, т.е. 110.)
|
97 |
|
98 |
# Определить crop (-frames нужен чтобы выйти из mplayer через несколько секунд):
|
99 |
mplayer $src -vf cropdetect -frames 100
|
100 |
|
101 |
# Crop (получен из предыдущего запуска mplayer и ручных рассчётов):
|
102 |
crop="480:256:0:106"
|
103 |
|
104 |
# Проверить что mplayer корректно определил crop:
|
105 |
mplayer $src -vf crop=$crop
|
106 |
|
107 |
# Если размер кадра слишком большой, имеет смысл масштабировать его до ~576
|
108 |
# по горизонтали (вертикаль должна вычисляться с сохранением пропорций):
|
109 |
# "scale=576:-2".
|
110 |
# Иначе имеет смысл оставить размер по горизонтали исходным, но по вертикали
|
111 |
# его всё-равно нужно масштабировать, иначе все плееры кроме mplayer будут
|
112 |
# проигрывать этот файл некорректно (см. "aspect=" в mplayer(1)):
|
113 |
# "scale=-1:-2".
|
114 |
#
|
115 |
# Более предпочтительный способ определить scale - использование скрипта
|
116 |
# calcbpp.pl. Желательно выбрать scale у которого этот скрипт выдаст bpp
|
117 |
# больше 20-ти, желательно 25-30. Скрипту нужно передать значение crop
|
118 |
# (после ручного "выравнивания"), изначальное соотношение сторон (4/3 или 16/9,
|
119 |
# его можно узнать из crop), bitrate и fps (посмотреть в выводе mplayer).
|
120 |
|
121 |
# Получить список подходящих scale и соотвествующих им bpp:
|
122 |
perl /usr/share/doc/mplayer-*/TOOLS/calcbpp.pl 480x256 16/9 $bitrate 29.97
|
123 |
|
124 |
# Scale (выбран из предыдущего запуска calcbpp.pl):
|
125 |
scale="464:176"
|
126 |
|
127 |
# Выбрать кодек и подобрать его настройки в зависимости от баланса между
|
128 |
# нужной скоростью обработки и качеством.
|
129 |
#
|
130 |
# Математически оценить качество изображения при использовании конкретного
|
131 |
# scale можно с помощью скрипта cq (ftp://rusunix.org/pub/warez/MPlayer/cq).
|
132 |
# Он выводит гистограмму использования разных quantizer'ов (чем чаще
|
133 |
# используется меньшие quantizer'ы, тем лучше - в идеале должно быть много
|
134 |
# quantizer'ов 2 и 3, причём лучше чтобы 2 было больше 3). Для работы ему
|
135 |
# нужен psnr-лог, который умеет делать кодек lavc (если ему дать параметр psnr).
|
136 |
|
137 |
# Видеокодек:
|
138 |
video="-ovc xvid -xvidencopts bitrate=$bitrate:4mv"
|
139 |
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3"
|
140 |
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell"
|
141 |
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cbp:mv0:mpeg_quant"
|
142 |
|
143 |
# Протестировать качество выбранного кодека (кодировать несколько секунд):
|
144 |
mencoder $src -oac copy $video:psnr -vf crop=$crop,scale=$scale -frames 500
|
145 |
mplayer test.avi
|
146 |
cq $(ls psnr_*.log | sort | tail -n 1)
|
147 |
|
148 |
# "Холостой" запуск для собирания статистики о фильме с целью более
|
149 |
# эффективного распределения переменного bitrate по всему фильму.
|
150 |
# За одно можно собрать и полную psnr-статистику для вывода полной гистограммы.
|
151 |
|
152 |
# Создать divx2pass.log (кодеку xvid нужно передать pass=1 вместо vpass=1):
|
153 |
mencoder $src -oac copy $video:psnr:vpass=1 -vf crop=$crop,scale=$scale \
|
154 |
-o /dev/null
|
155 |
|
156 |
# Посмотреть статистику: :)
|
157 |
cq $(ls psnr_*.log | sort | tail -n 1)
|
158 |
|
159 |
# Ви не поверите, но уже таки можно делать .avi:
|
160 |
mencoder $src -oac copy $video:vpass=2 -vf crop=$crop,scale=$scale \
|
161 |
-o result.avi
|
162 |
|
163 |
# Убрать мусор:
|
164 |
rm -f test.avi frameno.avi divx2pass.log psnr_*.log
|
165 |
|
166 |
# TODO 30->24 fps
|
167 |
# TODO deinterlace
|
168 |
|
169 |
#------------------------------------------------------------------------------
|
170 |
|
171 |
# Копирование DVD "as is" на винт для последующего конвертирования в .avi
|
172 |
# (чтобы во-первых DVD-диск не мучать несколькими проходами, во-вторых иметь
|
173 |
# возможность быстро отдать чужой DVD, в-третьих с винта конвертировать будет
|
174 |
# немного быстрее).
|
175 |
mplayer $src -dumpstream -dumpfile result.vob
|
176 |
src="result.vob"
|
177 |
---cut---
|
178 |
|
179 |
--
|
180 |
WBR, Alex.
|
181 |
--
|
182 |
gentoo-user-ru@g.o mailing list |