HPUNIX Сайт о ОС и не только!

Мjpegtools Восемь тыщ двести двенадцать мощный пакет для обработки видео

11 сентября 2012 - unix
Мjpegtools Восемь тысяч двести двенадцать мощнейший пакет для обработки видео

Нашел старую статью, проверил пару черт вроде бьет, поэтому оставляю пока as is.

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

И так пакет носит довольно нехитрое название mjpegtools, найти в Интернете можно по адресу http://mjpeg.sourceforge.net/. На сайте проекта доступна некоторая документация (в особенности рекомендую почитать MJPEG Howto), также ссылки на некоторые другие достойные внимания и в большинстве своем дополняющие проекты.

Для компиляции понадобятся программы и библиотеки quicktime4linux (рекомендуется компилировать с опциями ./configure —use-dv —use-firewire), jpeg-mmx и libmovtar. Практически сам пакет состоит из 30 утилит неважно какая из которых занимается одним определенным заданием.

Мне кажется, что такой подход намного проще, чем создание одной, но полнофункциональной, так например, развитие каждой идет независимо от других, ну и большая часть опций в утилитах имеют тождественное значение, что существенно упрощает их исследование. Общим для большинства представленных ниже утилит будет то, что они имеют функции для сотворения результирующего файла, а вот данные для своей работы получают со стандартного входа (stdin), так что очень не ищите.

С помощью каналов (pipes) все их можно соединить в практически хоть какой композиции, которую душа пожелает, правда чтобы такое соединение имело хоть какой то смысл. Хотя поначалу mjpegtools предназначена для использования с устройствами захвата базирующимися на кодеке Zoran ZR36067 MJPEG, все утилиты без заморочек могут употребляться, чтобы обрабатывать и сжимать MJPEG потоки, снятые с хоть какой из video4linux программ например с помощью таких как xawtv или broadcast 2000.

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

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

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

[sergej@grinder work]$ lavrec -f a -i S -d Два record.avi

Функция -f позволяет указать формат выходного файла в данном случае это AVI (q — Quicktime, m — Movtar), но по умолчанию умная утилита глядит на расширение файла (*.avi, *.qt, *.movtar) и принимает решение о формате сама, но наверное лучше подстраховаться. С помощью -i S задан формат входного сигнала SECAM через SVHS, чтобы уменьшить размер изображения в два раза (и выходного файла) использована функция -d, при необходимости поменять размер по горизонтали и вертикали индивидуально нужные пропорции можно указать с помощью 2-ух цифр -d 12.

При необходимости вместо имени выходного файла можно воспользоваться шаблоном, например file%02d.avi создаст файлы file00.avi, file01.avi и т.д, таким способом можно расслабленно обойти больший размер файла в используемой файловой системе и программа в этом случае остановится когда диск заполнится полностью. По умолчанию записывается текущий канал xawtv, но с помощью -C его можно поменять, при всем этом применяется описание в стиле xawtv т.е. -C europe-west:SE27.

Соотношение качество/размер выходного файла устанавливается при помощи -q # (где # число в промежутке Нуль … 100, по умолчанию 50). Кстати подбирая различные варианты опций d и q можно добиться на сто процентов приличного характеристики при меньшем размере выходного файла.

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

[sergej@grinder work]$ jpeg2yuv -f 20 5 -j picture_%06d.jpg > result.yuv

создаст файл result.yuv содержащий видеоинформацию с 20 5 FPS, которая устанавливается с помощью функции -f. Шаблоны для файлов можно задавать в стиле C точнее printf, подробности в цикле статей Тихона Тарнавского. Используя каналы можно слету сделать mpeg файл, не затрачивая ресурсов на создание промежуточного.

[sergej@grinder work]$ jpeg2yuv -f 20 5 -j picture_*.jpg | mpeg2enc -o mpegfile.m1v

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

[sergej@grinder work]$ jpeg2yuv -b Три -f 20 5 -n 50 -j image*.jpg | yuv2lav -o without_sound.avi

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

Мjpegtools Восемь тысяч двести двенадцать мощнейший пакет для обработки видео

[sergej@grinder work]$ lavaddwav without_sound.avi sound.wav with_sound.avi

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

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

[sergej@grinder work]$ cat *.ppm | ppmtoy4m -o 10 -n Шестьдесят -F 25:1 | mpeg2enc -o output.m1v

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

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

[sergej@grinder work]$ ppmtoy4m -n Пятнадцать -r image.ppm | mpeg2enc -o output.m1v

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

Если по рукой как назло нет файлов в данном формате, то на выручку прийдет утилита convert из пакета ImageMagick.

[sergej@grinder work]$ convert *.jpg ppm:- | ppmtoy4m | yuvplay

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

[sergej@grinder work]$ lav2yuv -f Пятнадцать video.avi | y4mtoppm | pnmsplit — «video-%d.ppm

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

[sergej@grinder work]$ lavplay -p S record.avi

И увидим изображение и услышим звук. В данном примере декодирование файла полностью ляжет на плечи центрального процессора, при помощи -p Н данную задачу можно переложить на аппаратные средства, есть еще флаг C включающий выход TV, но к превеликому огорчению последние два флага работают только с чипами Zoran, поэтому прийдется в большинстве своем использовать мощь ЦП.

Соответственно при помощи -Z, -z и —size NxN можно задать полноэкранный вывод, zoom или установить размер экрана. Для запуска GUI режима есть функция -g/—gui-mode, которая просто запускает glav.

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

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

Мjpegtools Восемь тысяч двести двенадцать мощнейший пакет для обработки видео

[sergej@grinder work]$ lavtrans -o final_version.avi -f a editlist

где с помощью функции указывается конечный файл, а editlist имя сохраненного с помощью «save all» или «save select» файла в glav, а функция -f a по-прежнему указывает на выходной формат в данном случае AVI. Утилита lavtrans позволяет соединить несколько файлов в один, при всем этом при необходимости можно переконвертировать в подходящий формат. Вот так.

[sergej@grinder work]$ lavtrans -o final_file.qt -f q record_1.avi record_2.avi … record_n.avi

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

[sergej@grinder work]$ lavtrans -o sound.wav -f w file.avi

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

[sergej@grinder work]$ lav2wav file.avi | lame — audio.mp3

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

[sergej@grinder work]$ lav2wav editlist > sound.wav

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

[sergej@grinder work]$ mkdir jpg; lavtrans -o jpg/image%05d.jpg -f i matrix_2.avi

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

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

[sergej@grinder work]$ lav2yuv -f Пятнадцать Matrix_2.avi | y4mtoppm -L > wallpaper.pnm

На данный момент кадр номер Пятнадцать перекочует в файл wallpaper.pnm.

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

Мjpegtools Восемь тысяч двести двенадцать мощнейший пакет для обработки видео

Например имеется два видео файла intro.avi и epilogue.mov и мы хотим сделать intro.avi переход в epilogue.mov с продолжительностью одной секунды (который является 20 5 кадрами для PAL или 30 кадров для NTSC). При всем этом intro.avi и epiloque.mov должны иметь тот же самый формат (точнее одинаковые скорость передачи кадров и разрешающая способность).

Например два файла с разрешением 352?288 системы PAL, содержат: intro.avi — Двести 50 кадров, и epilogue.mov — Одна тыща кадров продолжительно. Таким образом выходной файл будет содержать: 1-ые Двести 20 5 кадров intro.avi, 20 5 кадров перехода, которые содержат последние 20 5 кадров intro.avi и первых 20 5 кадров epilogue.mov и далее Девятьсот 70 5 оставшиеся кадров epilogue.mov. Получить последних 20 5 кадров intro.avi можно например так.

[sergej@grinder work]$ lav2yuv -o Двести 20 5 -f 20 5 intro.avi

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

[sergej@grinder work]$ lav2yuv -o -25 intro.avi

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

1-ые 20 5 кадров epilogue.mov (по умолчанию -о Нуль т.е. смещение от начала Нуль кадров):

[sergej@grinder work]$ lav2yuv -f 20 5 epilogue.mov

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

[sergej@grinder work]$ lavpipe «lav2yuv -o -25 intro.avi» «lav2yuv -f 20 5 epilogue.mov»

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

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

В нашем случае верный запрос при переходе от потока Один к сгустку Два смотрится так.

[sergej@grinder work]$ transist.flt -o Нуль -O Двести 50 5 -d 25

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

[sergej@grinder work]$ yuv2lav -f a -q Восемьдесят -o transition.avi

Похожие статьи

Теги: ос
Рейтинг: +16 Голосов: 187 969 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!

Найти на сайте: параметры поиска

Windows 7

Среда Windows 7 на первых порах кажется весьма непривычной для многих.

Windows 8

Если резюмировать все выступления Microsoft на конференции Build 2013.

Windows XP

Если Windows не может корректно завершить работу, в большинстве случаев это

Windows Vista

Если к вашему компьютеру подключено сразу несколько мониторов, и вы регулярно...