Олег Шалаев  > Мой Debian-опыт

Обработка фильмов, снятых на видеокамеру.

Моя видеокамера Samsung имеет выход firewire. Специально для неё я купил для компьютера (самую дешёвую) карту firewire. Кстати, есть такие грабли: старая версия dvgrab, входящая в состав Debian lenny, отказывается работать на моём довольно-таки современном ядре 2.6.21.7 Поэтому мне пришлось скачать dvgrab с sourceforge и самостоятельно его скомпилировать.

Перевод видео с видеокамеры на компьютер осуществляется командой
dvgrab --format dv2 film-
Пока работает dvgrab, компьютер очень заметно подвисает – и это при том, что данные с видеокамеры я сбрасываю на диск /dev/hdb, который больше никакими другими программами не используется. Что делать – старенький у меня компьютер. Результат: в рабочем каталоге создано много (около 12) файлов film-*.avi размером примерно по гигабайту каждый.

Следующий этап – обрезание и кодирование файлов. Наверное, есть такие аккуратные люди, которые не снимают никакого мусора на видеокамеру. Я не из таких, и по этому обрезание для меня неизбежно. Было время, когда я пытался делать это с помощью GUI-программ, но только программам этим требовалось много ресурсов и были они нестабильны. Возможно, на новом компьютере последние версии этих красивых программ и будут работать стабильно – не знаю.
Реальный пример из жизни: допустим, мне надо вырезать из файла film.avi три отрывка, где я снимал всякую ерунду:
0 мин 16 сек – 0 мин 28 сек, 2 мин 58 сек – 3 мин 21 сек, 3 мин 35 сек – 3 мин 41 сек.

Я добиваюсь этого, вызывая mencoder четыре раза:

mencoder -ovc copy -oac copy            -endpos 0:0:16 -o ~/1.avi film.avi ; \
mencoder -ovc copy -oac copy -ss 0:0:28 -endpos 0:2:58 -o ~/2.avi film.avi ; \
mencoder -ovc copy -oac copy -ss 0:3:21 -endpos 0:3:35 -o ~/3.avi film.avi ; \
mencoder -ovc copy -oac copy -ss 0:3:42                -o ~/4.avi film.avi
После этого можно удалить film.avi.

Заключительная обработка: объединяем наши файлы *.avi (полученные на предыдущем этапе) в один фильм. Одновременно ужимаем видео и звук:

time ( \
mencoder  -oac lavc  -vf pp=lb,pullup,softskip,crop=710:566:10:4,hqdn3d=2:1:2 -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=1700:v4mv:qns=1:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=1 \
-o /dev/null *.avi && \
mencoder  -oac lavc  -vf pp=lb,pullup,softskip,crop=710:566:10:4,hqdn3d=2:1:2 -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=1700:v4mv:qns=1:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:autoaspect:vpass=2 \
-o ~/new.avi *.avi )
Итог: результат творчества записан в ~/new.avi

Замечания:
В списке параметров mencoder после -vf перечисляются применяемые фильтры. Я понимаю назначение только двух из них: Видеофильтр pp=lb борется против горизонтальных полос, возникающих при съёмке быстро движущихся объектов. (Я его использую также и при просмотре ТВ.) Видеофильтр crop=710:566:10:4 обрезает тёмные поля; его численные параметры следует выбирать индивидуально для каждой видеокамеры. Результат сжатия примерно в 15 раз меньше оригинала. Звук кодируется бесплатным (в отличие от mp3) кодировщиком mp2, который вроде как почти не отстаёт от несвободного mp3. Команда time меряет полное время кодирования. Кодирование 14-минутного фильма на моём домашнем компьютере (Sempron 2600+, 3200 bogomips) выполняется порядка 178 мин usertime (206 мин realtime).


Олег Шалаев
Last modified: Sat Jan 3 10:24:46 CST 2009