Кодирования видео с miniDV видеокамеры в Linux |
[исправить] |
Задача: Сбросить видео на ПК и пережать его для последующего хранения.
Нам потребуется:
1) Ядро с поддержкой FireWire 1394 или v4l (смотря кто как будет скидывать видео)
2) Программа dvgrab (собственно с её помощью мы будем грабить видео с miniDV кассеты из консоли)
3) Программа mencoder (Входит в поставку с видео плеером mplayer)
4) Программа avimerge для склеивания нескольких avi файлов в один (входит в состав transcode)
Грабим видео:
Для начала нам потребуется подключить видеокамеру к ПК.
В случае с FireWire 1394 никаких драйверов нам не нужно, просто подключаем и работаем.
В случае подключения камеры по средствам USB нам нужно определиться с её поддержкой ядром Linux.
Как мы уже знаем, сделать это можно с помощью команды lsusb и затем
скомпилировать подходящий модуль ядра.
Я решил упростить себе жизнь и просто купил внешнюю карту FireWire 1394.
Для начала установим пакет dvgrab
Затем нам нужно перемотать miniDV кассету на начало и подключить камеру к ПК.
Теперь перейдём к процессу копирования видео:
Утилита dvgrab имеет множество полезных параметров, давайте рассмотрим некоторые из них:
-a, -autosplit - Этот параметр отвечает за нарезку видеофайлов, т.е dvgrab
будет резать видео автоматические на куски,
между нажатиями на кнопку запись/стоп. Это очень удобно если Вы хотите рассортировать сюжеты.
-f, -format - Позволяет в ручную задать формат видео потока, если параметр не
задан, то dvgrab автоматически
попытается определить формат данных. Если у Вас hdv камера то нужно обязательно
указать этот параметр.
-F, -frames - Количество кадров
-s, -size - Устанавливает лимит на видео файл. По умолчанию установлен размер 1024 мегабайта,
что удобно если Вы монтируете DVD диск.
-V, -v4l2 - Если Вы планируете скинуть видео через драйвер v4l2
Об остальных параметрах можно почитать man dvgrab
В моём случае я воспользовался вот такой конструкцией:
dvgrab -format raw -size 20000 cam.dv
Поскольку размер одной кассеты около 13 Гб, то всё видео будет сохранено одним файлом,
это для удобства кодирования.
Кодируем видео:
Первый проход:
mencoder cam001.dv -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:vhq:vpass=1:vqmin=1:vqmax=31 \
-oac mp3lame -lameopts vbr=2:q=7 -o mpeg4.avi -vf field,scale=768:576 -aspect 4:3
Второй проход:
mencoder cam001.dv -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:vhq:vpass=2:vqmin=1:vqmax=31 \
-oac mp3lame -lameopts vbr=2:q=7 -o mpeg4.avi -vf field,scale=768:576 -aspect 4:3
При таких параметрах 1 час видео занимает около 800 Мб
При необходимости можно изменить битрейт видео и звука для достижения желаемого качества.
Склеиваем видео:
Для склеивания видео в один большой файл мы воспользуемся утилитой avimerge.
Делается это очень просто:
avimerge -o com.avi -i 1.avi 2.avi 3.avi
Где com.avi - это итоговый видео файл, а 1.avi 2.avi 3.avi - это видео файлы,
предназначенные для склеивания.
|
|
|
|
Раздел: Корень / Пользователю / Обработка изображений и видео |
1.2, Анархист (?), 14:56, 07/07/2009 [ответить]
| +/– |
Но если попробовать сделать из всего этого DVD-Video - проблема во всех дистрах. Причина - глюк в cdrkit. Я в ArchLinux вместо него установил cdrtools. Только тогда все заработало.
| |
1.3, vladik (?), 10:41, 08/07/2009 [ответить]
| +/– |
Я жму на лету. Потом двд делаю в dvdauthor
dvgrab - | mencoder -cache 16384 -audio-preload 2 -demuxer 22 -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=4900:\
sc_threshold=1000000:aspect=4/3:threads=8\
:ilme:keyint=15 \
-mpegopts format=dvd -of mpeg -srate 48000 -oac lavc -lavcopts \
acodec=ac3:abitrate=192 -af channels=2ch - -o out.mpg
| |
1.4, vadiml (?), 19:21, 09/07/2009 [ответить]
| +/– |
Если кодировать DV с -vf field, то качество из-за интерлейсинга будет отвратным.
Надо брать -vf pp=lb или li или ci или md и смотреть что лучше на вашем материале.
А если считаете приемлимым для себя видео с 50fps, то лучшее качество дадут tfields/yadif+mcdeint (тут тоже надо смотреть где лучше закодируется)
Я для этого сначала кодирую 5 минут из материала, выбираю лучший вариант, и потом им делаю всё.
| |
1.5, rocket (?), 13:28, 10/07/2009 [ответить]
| +/– |
Сжатие звука в первом проходе - лишняя операция.
| |
1.6, vadiml (?), 19:30, 11/07/2009 [ответить]
| +/– |
Подумал, что может кому пригодится, вот мои опции кодирования для DV:
1й проход
mencoder out007.dv -fps 50 -ofps 50 -vf tfields=4:1,scale=-2:576 -aspect 4:3 -ovc x264 -x264encopts pass=1:qp=22:subq=2:8x8dct:partitions=all:me=umh:chroma_me:nr=500:trellis=2:frameref=8:bframes=3:b-pyramid:weightb:mixed-refs:direct_pred=auto:keyint=300:bime:psnr:threads=auto -nosound -o out007.avi
2й и 3й
mencoder out007.dv -fps 50 -ofps 50 -vf tfields=4:1,scale=-2:576 -aspect 4:3 -ovc x264 -x264encopts pass=3:qp=22:subq=7:8x8dct:partitions=all:me=umh:chroma_me:nr=500:trellis=2:frameref=8:bframes=3:b-pyramid:weightb:mixed-refs:direct_pred=auto:keyint=300:bime:psnr:threads=auto -oac mp3lame -lameopts cbr:br=256 -o out007.avi
Если надо уменьшить размер (за счёт качества), надо ставить большее qp, но при 28 уже очень заметно падение качества.
Если хотите делать 2х проходное кодирование, то надо ставить во 2й строке pass=2
| |
|