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

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

sudo pacman - S mencoder

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

Читайте также:  Обзор менеджера пакетов Zypper для OpenSUSE и SLE

#!/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

В нашем виде:

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

• driver=v4l2 — наиболее лучший в мире Linux драйвер для видео! ) ;

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

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

Читайте также:  Установка и настройка VPN-сервера OpenConnect (ocserv) на Rocky Linux 9 или AlmaLinux 9

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

• audiorate=32000 — гармоника дискретизации звука. Распробовал ставить повыше (44100), но появлялись «потрескивания», потому 32000;

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

• — ovc lavc — видео кодек из состава книгохранилища кодеков (механизм или программа, способная выполнять преобразование данных или сигнала) libavcodec;

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

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

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

• autoaspect — сохраняет пропорции видео (электронная технология созданья, записи, обработки, передачи, хранения и воспроизведения подвижного изображения, основанная на принципах телевидения, а вдобавок аудиовизуальное произведение,) как в источнике принимая во внимание все конфигурации (масштаб, обрезка, …);

Читайте также:  Безопасность в Linux: Управление доступом к команде su

• 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 диск с меню.