Gentoo Archives: gentoo-user-ru

From: Alex Efros <powerman@×××××××.ua>
To: gentoo-user-ru@l.g.o
Subject: Re: [gentoo-user-ru] Кодирование
Date: Thu, 12 Jan 2006 19:43:56
Message-Id: 20060112183401.GF4040@home.power
In Reply to: [gentoo-user-ru] Кодирование by "..::ValenOK::.." <5665661@gmail.com>
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

Replies

Subject Author
[gentoo-user-ru] Как собрать gcc =?koi8-r?Q?=D3?= опцией --with-dwarf2? "Александр Жолтковский" <term@××××××.ru>