Linux32 - Блог



LINUX32

Свобода выбирать


ArchLinux
Блог >> 2014 >> Август


20.08.2014

Захват видео в Linux




Добрый день. На днях мне представилась возможность попробовать себя в качестве оцифровщика видеокассет. Об этом и расскажу.

Такого опыта я не имел, поэтому пришлось изучать все практически с нуля. Надеюсь моя статья поможет новичкам в этом деле сократить время на изучение премудростей захвата и кодирования видео в Linux.

Во-первых, о железе: необходимо иметь установленный в компьютере тв-тюнер или видеокарту с композитным входом и видеомагнитофон, который подключаем RCA-кабелем (в обиходе тюльпан). В моем случае это тв-тюнер на PCI-шине, видеомагнитофон и обычный антенный (RF) кабель (каким раньше денди к телевизорам подключали).

Захват видео, как настоящий тру-линуксоид, я делал с помощью консольного mencoder. Можно, конечно, и в графическом варианте сделать подобное, например в VLC плеере, но он предлагет сразу кодировать видео, а я хотел захватить видео практически без сжатия (lossless кодек) для дальнейшей его обработки в любом видеоредакторе. Раньше эта утилита была в комплекте с консольным плеером mplayer (который наверняка уже установлен в вашей системе как зависимость какого-нибудь видеоплеера), но в моем арче (находящемся в актуальном состоянии) он идет отдельным пакетом. Установить его можно вот так:

sudo pacman -S mencoder


Команда для захвата видео с помощью mencoder обычно трехэтажная и выглядит устрашающе, поэтому я набросал небольшой скрипт, облегчающий ее составление:

#!/bin/bash

if [ $# -ne 1 ]
then
echo "
Использование: <скрипт> <имя файла на выходе>
"
exit
fi
cd $PWD
WIDTH=720
HEIGHT=540
AUDIO="-oac pcm"
VIDEO="-ovc lavc -lavcopts vcodec=ffvhuff:mbd=2:trell:v4mv:autoaspect:threads=4"
AUDIO_FILTERS=""
VIDEO_FILTERS="-vf pp=lb,harddup"
OPTIONS="-endpos 30:00 -forceidx -mc 0 -noskip"
TV="-tv driver=v4l2:width=$WIDTH:height=$HEIGHT:input=1:device=/dev/video0:buffersize=1024:alsa:audiorate=32000"
mencoder tv:// -o "$1.avi" $TV $VIDEO $AUDIO $AUDIO_FILTERS $VIDEO_FILTERS $OPTIONS


Запускаетя скрипт так: <имя скрипта> <имя видео файла на выходе>. Выходной файл сохранится в той же папке, откуда запускаете скрипт, поэтому удостовертесь что в разделе жесткого диска, на котором вы собираетесь запускать этот скрипт достаточно свободного места. У меня, например, 30-ти минутное видео заняло 15 Гб.

Теперь о самом скрипте. В общем случае mencoder запускается так:

mencoder <что кодируем> -o <куда кодируем> <аудио кодек> <видео кодек> <аудио фильтры> <видео фильтры> <опции того что кодируем> <опции аудио кодека> <опции видео кодека> <опции mencoder`а>


В нашем случае:

• <что кодируем> - это tv://, то есть видеопоток из тв-тюнера или устройство /dev/video0;

• driver=v4l2 - самый лучший в мире линукс драйвер для видео! ) ;

• WIDTH и HEIGHT - ширина и высота видео в пикселях, думаю, это понятно;

• input=1 - для моей модели тв-тюнера обозначает режим "Television (Mono only)". Так как звук все равно одноканальный;

• alsa - без этого параметра видео у меня захватывалось без звука;

• audiorate=32000 - частота дискретизации звука. Пробовал ставить повыше (44100), но появлялись "потрескивания", поэтому 32000;

• -oac pcm - аудио кодек pcm, означает что звук будет без сжатия;

• -ovc lavc - видео кодек из состава библиотеки кодеков libavcodec;

• -lavcopts - соответственно опции кодека из предыдущего пункта;

• vcodec=ffvhuff - lossless-кодек, обеспечивает "почти нетронутое" качество видео, но уже не RAW-видео. Из-за этого кодека я и начал разбираться с mencoder`ом. Чтобы дальше уже в видеоредакторе производить обрезку/нарезку/применение всяческих фильтров и так далее...;

• mbd=2:trell:v4mv - эти опции в интернете рекомендуют для получения хорошего качества кодирования. Не уверен что они нужны при кодировании lossless-кодеком, но на всякий случай оставил;

• autoaspect - сохраняет пропорции видео как в источнике принимая во внимание все изменения (масштаб, обрезка, ...);

• threads=4 - количество потоков кодирования (по умолчанию 1), для ускорения кодирования желательно устанавливать значение, равное количеству ядер процессора. В моем случае threads=4;

• -vf pp=lb,harddup - видео фильтры. pp=lb - устранение интерлейсинга, а harddup - используется для принудительного кодирования дублирующихся кадров (также очень рекомендуется к использованию повсеместно в интернете);

• -endpos 30:00 -forceidx -mc 0 -noskip - опции mencoder`а. -endpos 30:00 - задает длительность видео в минутах:секундах, которое нужно кодировать, -forceidx - принудительно индексирует видео, а -mc 0 -noskip - опять же очень рекомендуют для лучшей синхронизации видео и аудио.

Вот и все параметры, аудио фильтров я не задавал.

В итоге, как я уже писал, у меня 30-ти минутное видео занимает 15 Гб. Думаю, неплохо. Дальше уже можно с ним делать что душа пожелает. Я, например, хочу сделать из него DVD диск с меню.

Надеюсь эта статья пригодится начинающим линуксоидам-видеоредакторам. Всем удачи и комментируем, не стесняемся.

Статья


Ваш комментарий:

Имя:
E-mail:
Код с картинки:
Комментарий: