CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Дружная видеокомпания

Сергей ЯРЕМЧУК grinder@ua.fm

Первоначально Linux использовалась в основном программистами и в качестве серверной ОС, что и сказывалось на том наборе программ, который сопровождал данную систему в первые годы ее развития. В последнее же время наметилась тенденция к применению данной ОС в практически любой сфере, где может работать компьютер, и это не замедлило сказаться на ассортименте программного обеспечения. Об одном из пакетов программ, с помощью которого можно осуществлять запись, простой монтаж, воспроизведение и компрессию аудио и видео на этой платформе, и пойдет речь в данной статье.

Итак, пакет носит довольно нехитрое название MJPEG Tools, найти в Интернете можно по адресу http://mjpeg.sourceforge.net. На сайте проекта доступна некоторая документация (особенно рекомендую почитать MJPEG Howto), а также ссылки на некоторые другие интересные и в большинстве своем дополняющие проекты. Для компиляции понадобятся программы и библиотеки quicktime4linux (рекомендуется компилировать с опциями ./configure --use-dv --use-firewire), jpeg-mmx и libmovtar. Сам пакет состоит из 30 утилит, каждая из которых имеет свое определенное назначение. Мне кажется, что это намного проще, чем создавать одну, но полнофункциональную —каждая утилита развивается независимо от других, при этом большинство опций тождественны для всех, что существенно облегчает изучение. Общим же для большинства представленных ниже утилит будет то, что они имеют опции для создания результирующего файла, а вот данные для своей работы получают со стандартного входа stdin. С помощью каналов (pipes) все их можно соединить практически в любой комбинации, лишь бы такое соединение имело какой-то смысл. Но прежде всего пакет MJPEG Tools предназначен для использования с устройствами захвата, базирующимися на кодеке Zoran ZR36067 MJPEG — например, xawtv или broadcast 2000; все утилиты без проблем могут ими использоваться, чтобы обрабатывать и сжимать MJPEG-потоки, снятые с любой из video4linux-программ.

Я не буду касаться подробностей различных форматов — если возникнут вопросы, зайдите на страничку http://www.mir.com/DMG, где вы найдете ряд инструкций по записи видео и описание различий видеоформатов. Еще хочу добавить, что практически все программы, за исключением разве что предназначенной непосредственно для захвата, некритичны к системным ресурсам, хотя, как вы должны понимать, для подобных задач лучше иметь машину помощнее.

Запись (захват) видео осуществляется при помощи утилиты lavrec. По умолчанию она использует /dev/video в качестве входного видеоустройства, звук —/dev/dsp и миксер /dev/mixer. Но с помощью соответствующих переменных LAV_VIDEO_DEV, LAV_AUDIO_DEV и LAV_MIXER_DEV можно все это переопределить.

Запустить на запись утилиту можно с помощью примерно такой команды:

Опция -f позволяет указать формат выходного файла, в данном случае это .avi (q — Quicktime, m — Movtar); по умолчанию умная утилита смотрит на расширение файла (.avi, .qt, .movtar) и принимает решение о формате сама, но наверное, лучше подстраховаться. С помощью -i S задан формат входного сигнала SECAM через SVHS, чтобы уменьшить размер изображения в два раза (и выходного файла), использована опция -d, при необходимости изменить размер по горизонтали и вертикали индивидуально, необходимые пропорции можно указать с помощью двух цифр -d 12. При необходимости, вместо имени выходного файла можно воспользоваться шаблоном, например, file%02d.avi создаст файлы file00.avi, file01.avi и т.д., таким путем можно спокойно обойти ограничение максимального размера файла в используемой файловой системе, и программа в этом случае остановится только тогда, когда диск заполнится полностью. По умолчанию записывается текущий канал xawtv, но с помощью -C его можно изменить, при этом применяется описание в стиле xawtv, т.е. -C europe-west:SE27. Соотношение качество/размер выходного файла устанавливается при помощи -q # (где # — число в промежутке 0 … 100, по умолчанию 50). Кстати, подбирая различные варианты опций d и q, можно добиться вполне приличного качества при меньшем размере выходного файла.

Но это еще не все способы получить видео. С помощью утилиты jpeg2yuv можно все картинки в формате .jpeg собрать в единый видеофайл. Например, такая команда:

создаст файл result.yuv, содержащий видеоинформацию с 25 FPS. Шаблоны для файлов можно задавать в стиле C, точнее, printf — подробности в цикле статей Тихона ТАРНАВСКОГО «Язык, на котором говорят везде» (МК №№1-3, 5, 7, 9, 11, 14, 16 (224-226, 228, 230, 232, 234, 237, 239)):

Номер изображения, с которого нужно начать запись, и их количество устанавливаются при помощи опций -b и -n. Вот так можно собрать все файлы начиная с image3.jpg, общим числом 50:

А следующим ходом добавляем звук:

Я себе таким образом уже альбомчик забацал :-).

При помощи другой утилиты, ppmtoy4m, можно аналогичным образом склеить видеофайлы в формате .ppm:

При помощи команды cat направляем все .ppm-файлы на вход ppmtoy4m, которой пропускаются первые десять кадров и сохраняются последующие 60; опция -F устанавливают скорость передачи кадров — для PAL/SECAM устанавливается 25:1.

Можно создать видеопоток из одного файла, например, для заставки:

При этом будет в поток рекурсивно выводиться файл image.ppm, опция -n указывает на количество проходов.

Если под рукой, как назло, нет файлов в данном формате, то на выручку придет утилита convert из пакета ImageMagick (см. статью Петра «Roxton’a» СЕМИЛЕТОВА «ImageMagick: волшебство имиджа», МК №11 (234)):

С помощью такой вот нехитрой конструкции конвертируются все .jpg-файлы, и результат может просматриваться в видео.

Понемногу дошли и до программ для оценки (воспроизведения) полученного результата. Для этого используются две утилиты —lavplay и glav (вторая представляет собой фронт-энд к первой):

Теперь мы увидим изображение и услышим звук. В данном примере декодирование файла полностью ляжет на плечи центрального процессора; при помощи -p Н эту задачу можно переложить на аппаратные средства, есть еще флаг C, включающий выход TV, но к превеликому сожалению, последние два флага работают только с чипами Zoran, поэтому придется в большинстве своем использовать мощь ЦП. Соответственно, при помощи -Z, -z и --size NxN можно задать полноэкранный вывод, zoom или установить размер экрана. Есть и опция -g/--gui-mode, которая просто запускает glav.

С помощью glav дополнительно можно подредактировать получившийся файл. Опций немного, возможно только удаление частей, вырезка, вставка копий видеофрагментов. Точнее было бы сказать, не отредактировать, а разметить — оригинал-то остается нетронутым. С помощью кнопок Select Start и Select End выделяется фрагмент файла и назначается действие, далее при выходе необходимо записать все в обычный текстовый файл (дальнейшем подобный файл будет называться editlist) с помощью Save All и вскормить этот файл утилитам lav2wav, lav2yuv, lavtrans, которые и производят деструктивные действия. Поэтому если необходимо разбить записанное видео на несколько меньших частей, просто отмечают части и затем сохраняют каждую часть в различные файлы. После этого вводим примерно такую команду.

Здесь с помощью опции -о указывается конечный файл, editlist — имя сохраненного с помощью Save All или Save Select файла в glav, а опция -f a по-прежнему указывает на выходной формат, в данном случае .avi. Утилита lavtrans позволяет объединить несколько файлов в один, при этом при необходимости можно переконвертировать в нужный формат. Вот так.

Иногда нужно выделить звук из видеофрагмента, например, для звукового оформления системных событий, чтобы конвертировать в другой формат или чтобы просто удалить шум. Это можно проделать аж двумя способами. Первый — при помощи опции -f с флагом w, указывающим на звуковой файл в качестве выходного:

Иначе, на помощь может прийти отдельная специально обученная утилита lav2wav, которая по умолчанию выдает сигнал в stdout, что позволяет без остановки закодировать его тем же Lame, при этом сигнал может быть сохранен и в файле:

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

А вот, например, попала в руки пиратская копия фильма «Матрица-2», которую хочется разложить по кадрам, чтобы себе обои на рабочем столе застелить. Да пожалуйста. Сказано — сделано:

Теперь в созданном подкаталоге jpg будет создано великое множество графических файлов, от image00000.jpg до imageххххх.jpg. Выбирай, не хочу.

При необходимости выделить всего один кадр, можно применить и вот такую конструкцию:

Теперь кадр номер 15 перекочует в файл wallpaper.pnm.

А вот утилита lavpipe делает возможным создание простых переходов между фильмами или комбинирование уровней.

Например, имеется два видеофайла, intro.avi и epilogue.mov, мы хотим сделать из intro.avi переход в epilogue.mov продолжительностью в одну секунду (25 кадров для PAL или 30 кадров для NTSC). При этом intro.avi и epiloque.mov должны иметь один и тот же формат (точнее, одинаковые скорость передачи кадров и разрешающую способность). Например, два файла с разрешением 352288 системы PAL содержат: intro.avi — 250 кадров, а epilogue.mov — 1000 кадров. Таким образом, выходной файл будет содержать: первые 225 кадров intro.avi, 25 кадров перехода, которые содержат последние 25 кадров intro.avi и первых 25 кадров epilogue.mov, и далее 975 оставшиеся кадров epilogue.mov. Получить последних 25 кадров intro.avi можно например так.

Опция -o 255 указывает lav2yuv на смещение от начала на 225 кадров, а -f 25 выбирает из потока ровно 25 кадров. Но этот вариант хорош, когда известно количество этих самых кадров, а кто их там вообще считает? Поэтому удобнее будет такой вариант.

То есть, используем негативное смещение с конца файла.

Первые 25 кадров epilogue.mov (по умолчанию -о, 0, т.е. смещение от начала — 0 кадров):

Далее соединяем при помощи lavpipe два потока:

Результатом будет поток, который можно направить в другую утилиту, transist.flt.

Последняя должна иметь информацию относительно продолжительности перехода и прозрачности второго потока в начале и конце перехода. Для этого в нашем случае используем следующие флаги: -о [0-255], указывающий на непрозрачность второго потока с начала (0 — поток полностью прозрачен, 255 — полностью непрозрачен), -О [0-255] — непрозрачность второго потока с конца, и -d num — продолжительность перехода в кадрах.

В нашем случае правильный запрос при переходе от потока 1 к потоку 2 выглядит так:

Опции -s и -n утилиты transist.flt по своему значению эквивалентны соответственно параметрам -o и -f lav2yuv и необходимы, когда надо выполнить часть перехода. Далее полученный поток сжимаем при помощи yuv2lav:

т.е. читаем yuv-поток от stdin и на выходе получаем .avi-файл (-f a) с JPEG-сжатием качества 80. Вот теперь мы имеем целую команду для создания перехода:

Результат может быть оформлен как LAV Edit List, который можно использовать с утилитами glav или lavplay, или непосредственно с mpeg2enc с lav2yuv, или объединить все в один mpeg-файл с lavtrans, или же комбинацией lav2yuv|yuv2lav.

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov