Продолжение, начало см. в МК № 21 (244). Продолжаем рассматривать приложения, предназначенные для обработки видео в Linux.
Сначала проблемы. Иногда после создания видеофайла затем не получается его воспроизвести ни на одном из проигрывателей. Помочь разобраться в возникшей ситуации может пакет bbtool, который можно найти по адресу http://home.mindspring.com/~beyeler, позволяющий получить очень подробную информацию о файлах форматов MPEG. Состоит из четырех утилит. Самая главная, bbdmux, демультиплексирует потоки MPEG1 и MPEG2 и показывает их внутреннюю структуру. Утилиты bbinfo, bbainfo и bbvinfo позволяют получить информацию об используемом файле.
Для кодирования видео можно применять библиотеку libfame (http://fame.sourceforge.net), представляющую собой быстрый кодировщик в MPEG1 и MPEG4. В комплекте, кроме самих библиотек, идут две утилиты кодирования, базирующиеся на libfame. Первая fame (Fast Assembly Mpeg Encoder), написанная на С и позволяющая получить сигнал прямо с устройства video4linux; кроме того, она использует библиотеки lame, что позволяет параллельно кодировать звук в форматах, поддерживаемых данной библиотекой. Вторая, немного попроще, recmpeg, которая просто сжимает необработанные видеофрагменты в MPEG-формат. В самом простейшем случае захват видео и аудио будет выглядеть так (опция -v/--verbose добавлена для информативности):
При помощи параметра -q/--quality можно установить требуемое качество кодированного потока в процентах (по умолчанию 75); при помощи -р/--profile можно установить вид выходного сигнала из mpeg1 (по умолчанию), mpeg4 и mpeg4_shape; опция -m/--motion позволяет изменить алгоритм оценки движения (none, pmvfast и fourstep); -f/--fps изменить значение кадров в секунду от принятого по умолчанию -25, при этом программа понимает даже дробные значения. Параметр -с/--coding определяет порядок и тип кадров, которые будут кодироваться, а -р/--picture размер кадра. При помощи -b/--buffer можно увеличить размер выходного буфера, по умолчанию определенного в 1 Мб. К тому же программа может выводить информацию не только в файл или в свой стандартный вывод, а еще и по указанному URL:
Утилита recmpeg имеет аналогичные опции и просто позволяет закодировать указанный файл в mpeg-формат:
Следующей на очереди будет еще одна консольная утилита mpgtx (http://mpgtx.sourceforge.net), позволяющая демультиплексировать, разбивать, соединять (MPEG1 гарантированно, MPEG2 в порядке эксперимента) и получать информацию о видео- (MPEG1 и MPEG2 системные, программные и транспортные) и аудиопотоках, а также дополнительно редактировать ID3-тэги в MP3-файлах. Чтобы не путать пользователя множеством различных опций, при установке с помощью ссылок (ln -sf) создаются дополнительные файлы, которые выполняют одну единственную функцию: mpgjoin (объединение потоков, соответствует mpgtx -j), mpgsplit (разбиение потока, -s), mpginfo (получение информации о потоке, -i), mpgdemux (демультиплексирование потока, -d), mpgcat (объединение и выдача в стандартный вывод mpgtx -j -o) и tagmp3 (редактирование меток ID3, -T). В режиме разбиения или демультиплексирования шаблон выходного файла указывается при помощи опции -b, а в режиме объединения -о. При указании исходного файла возможно задание диапазона, с которым намечается работать. При этом диапазон может быть указан в виде интервала (начальной/конечной части интервала) времени или размера.
т.е. интервал от 35 мин 14 с. до 1 часа 22 минут 00 с, или
т.е. интервал от 42000 байт до 520 Мб.
При помощи tagmp3 можно привести свою музыкальную коллекцию в порядок. Например, опция show позволяет просмотреть информацию, содержащуюся в ID3-тэге, del удаляет все, что там было записано, а при помощи set информация туда заносится. При этом при помощи форматов необходимо указать поля, которые заполняются. Так, %A указывает на артиста, %a альбом, %t название мелодии, %T номер трека, %y год, %g жанр, %c добавляет комментарий. Например:
При этом через двоеточие указываются устанавливаемое значение поля, а если после указанного формата стоит знак вопроса, то значение данного поля запрашивается у пользователя. При помощи list можно узнать номера жанров и их значений. Если потребуется переименовать множество файлов, то здесь на помощь придет опция move. Так, вот такая конструкция:
приведет все MP3-файлы текущего каталога к виду Артист-название_мелодии.mp3.
Пакет avifile (http://avifile.sourceforge.net) предоставляет набор утилит для создания (захвата) и последующей перекодировки полученных видеопотоков и соответствующие библиотеки. Утилиты работают с наиболее популярным форматом AVI и различными методами сжатия Indeo Video 3.2, 4.1; MPEG4 1, 2; MPEG4 3 aka DivX; Motion JPEG; Cinepak Video и пр. Основная идея проекта состоит в использовании динамических библиотек Win32 в Linux-среде. Если кто не обзавелся такими, их можно взять здесь же на сайте в архиве binaries. После установки будет доступно 10 программ.
Для показа полученного результата в пакете имеется легкий aviplay, базирующийся на QT-библиотеках, который может использовать все установленные на момент конфигурирования кодеки. Надо сказать, программа хоть и не имеет стольких функций, как тот же xine, но проигрывает даже те файлы, при попытке воспроизведения которых вылетают все имеющиеся у меня видеопроигрыватели. К тому же с помощью нее можно получить довольно подробную информацию о загруженном видео (кодеки, битрейт и пр.). Для измерения производительности процессора и видеосистемы в комплект входит утилита avibench, позволяющая оценить, на что там еще способен компьютер, а при помощи avitype можно тихонечко заглянуть внутрь, в структуру видеофайла, и получить подробнейшую информацию. Наконец, при помощи avicat можно выдрать понравившийся фрагмент, или наоборот, слить несколько файлов в один:
Для оценки производительности при захвате изображения предназначена утилита avicap, при вызове которой появляется окно, позволяющее настроить основные параметры (устройство, кодек, разрешение, количество кадров, аудио, лимит и название выходного файла). А вот захватить изображение можно при помощи avirec, при этом есть возможность задания кодека при помощи опции -c/--codec; список доступных можно просмотреть, задав -l/--list. -b/--audiobitrate устанавливает битрейт записываемого аудиопотока, -m/--audiomode режим записи аудио (n=none, m=mono, s=stereo). Если необходимо ограничить по времени записываемый материал, то включить таймер записи можно при помощи -t/--rectime, задать высоту/ширину изображения -y/--height -x/--width (по умолчанию 288/384). Для изготовления AVI-файла из последовательности JPEG-картинок предназначена avimake. Чтобы выяснить режим настройки видео и сконфигурировать устройство video4linux для захвата изображения, в комплект входит утилита kv4lsetup, для возможности перекодирования видео с другим кодеком служит утилита avirecompress. Вообще, в avifile мне не нравится полное отсутствие документации ни в man’е, ни на сайте нельзя найти вразумительного объяснения назначения отдельных утилит, входящих в комплект, и тем более используемых к ним ключей. Об их назначении приходится догадываться, а ключи подбирать опытным путем. Так, например, я так до конца и не разобрался, что конкретно делает утилита avifile-config, предназначенная вроде бы как для указания нестандартных путей к библиотекам и исполняемым файлам.
В состав пакета mpeg2dec (http://libmpeg2.sourceforge.net), кроме двух библиотек libmpeg2 и libvo, позволяющих работать с MPEG- и YUV-потоками, входят две утилиты: mpeg2dec позволяющая декодировать (отображать) MPEG- и MPEG2-видео потоки и extract_mpeg2 для извлечения MPEG-видеопотока из мультиплексного потока. Утилиты применения у меня особого не нашли, да и на сайте написано, что это скорее простые тестовые утилиты. Но вот ради библиотек установить пакет просто необходимо, тем более что они используются очень многими программами для декодирования и воспроизведения видео, в том числе xine, Mplayer и пр. К тому же библиотеки отлично взаимодействуют с имеющимся оборудованием и выжимают из него всю мощь, использование же языка С позволяет компилировать под многими платформами и операционными системами, в том числе и в Windows в среде VC++.
Раз уже зашла речь о библиотеках, то рекомендую установить XviD (http://www.xvid.org) реализацию библиотек DivX с открытыми исходными текстами. И свою роль они выполняют, по моему мнению, лучше линуксовской реализации DivX divx4linux (http://www.divx.com/divx/linux), да и внутри полазить в случае чрезмерного любопытства можно, документация просто отличная. При этом большинство программ уже знают о его существовании и при конфигурировании пытаются найти, а если скопировать из развернутого каталога с исходниками файлы src/divx4.h и src/xvid.h в /usr/local/include, то появляется возможность собрать всеми любимый Mplayer с поддержкой данных библиотек. В комплекте, кстати, поставляются три тестовых программки: xvid_encraw для кодирования YUV-потоков или файлов в формате PGM в поток MPEG4, xvid_decraw, декодирующий эти потоки, и xvid_stat своеобразный симбиоз первых двух, объединенная программа, выдающая подробную информацию об используемых файлах и позволяющая оценить быстродействие.
Ну хватит, наверное, на сегодня про консоль; рассмотрим пару программ под X-Windows. Как бы там ни было, а редактировать видеофайлы все таки лучше в графической среде. Мне известно по крайней мере два инструмента, позволяющих это сделать. Первая программа называется avidemux (http://fixounet.free.fr/avidemux), требует библиотек Gtk+ и glib 1.2.x (но не 2.x) стало быть, последние пользователям Вторых Гномов придется доустанавливать отдельно. Желательно, но необязательно наличие библиотек libmad (http://mad.sf.net), предназначенных для декодирования аудио в mpeg1/2/3 audio, а также декодера AC3 a52dec (http://liba52.sf.net) и, конечно же, liblame. Для видео необходим mjpegtools, о котором я уже писал. После установки, которая ничем обычным не отличается, разве что библиотеки могут быть не там, где им положено, запускаем программу. Из входных форматов утилита понимает АVI, MPEG1/2 (потоки ES или PS, знает о VOB), NuppelVideo и последовательность графических файлов в формате .bmp (xx0000.bmpxx00001.bmp…). Из видеокодеков знает о существовании DivX, XviD, VP3, mpeg1/2, Huffyuv, WMV2, H263, MSMP4V2 и собственного raw rgb. На выходе получим АVI (до двух аудиодорожек), MPEG1/2 и собственный RAW, представляющий собой «чистое» аудио или видео. А так avidemux, как и положено нормальному редактору, позволяет редактировать видео- и аудиопоследовательность (вырезать, удалять, вставлять, копировать, перекодировать, использовать имеющиеся фильтры), в том числе и разбивать поток на файлы определенного размера (устанавливается в File > Set mux options); для вырезания имеется встроенный помощник Misc > Cut wizard. Из аудиофильтров доступны Normalize (нормализует громкость звучания), Convert to 44.1 kHz, Time shift для смещения по времени начала звуковой дорожки (единственный фильтр, который можно применять в режиме Copy), 6 db press для усиления слабого звука на 6 дБ, а также несколько фильтров-кодеков, позволяющих перекодировать аудиодорожку в другой формат. При работе в режиме Process возможно применение к видеопоследовательности следующих фильтров (все по Ctrl+F): из мета-фильтров VCD/SVCD/DVD res, позволяющий автоматически подогнать размеры под требуемый соответствующим стандартом, и Partial, позволяющий применить фильтр только к части видео; для работы с изображением Crop (обрезание краев), с помощью которого можно убрать черные полосы по краям (есть Autocrop, на качественном видео работает хорошо); Resize, изменяющий размеры кадра, Blacken Borders, заменяющий существующие бордюры в видео на полностью черные, Add Black Borders, добавляющий черные бордюры, Flip vertical, переворачивающий изображение, и Rotate, переворачивающий изображение на 90/180/270 градусов; Фильтры для черезстрочной обработки (Interlacing) видео: Deinterlace сглаживает черезстрочные кадры, Pal Shift смешивает поля первого и последующего кадра, Pal Smart что-то среднее между двумя предыдущими, Drop для усреднения значений соседних кадров при сильном их отличии. И остальные группы фильтров: Convolution позволяют заменить каждый пиксель его усредненным значением; Luma/Chroma Swap u/v (меняет местами цветовые составляющие), Contrast, Luma/chroma only (выделяет только одну составляющую luma/u/v); Smoother Stabilize (заменяет усредненным значением при достижении установленного порога), Denoise, FluxSmooth, Temporal Cleaner и последний, позволяющий добавить субтитры из текстового файла, Subtitle. При применении фильтров возможны два режима вывода изображения Preview с открытием дополнительного окна предпросмотра, и Output, при котором картинка выводится с результатами наложения. Любителям командной строки по душе придется возможность использования всех вышеописанных опций в любимой среде, например, вот так можно перегнать AVI-файл в VCD:
Второй нелинейный редактор называется kino (http://www.schirmacher.de/arne/kino), особенно он приглянется тем, кто имеет устройства захвата видео или видеокамеру, т.к. позволяет снимать изображение и звук не только с устройств video4linux, но и с интерфейса IEEE-1394 именно на этих функциях сделан акцент в настоящее время. С его помощью можно также производить большинство операций (copy, cut, paste, split, join) с видео/аудио и сохранять все действия в список редактирования (формат SMIL XML). Интересно, что большинство команд как редактирования, так и навигационных эквивалентно командам vi. Kino может экспортировать виде в ряде форматов: DV для IEEE 1394, Raw DV, DV AVI, WAV, MP3, Ogg Vorbis, MPEG1, MPEG2 и, конечно же, DivX, а также still frames, под коим понимается графические файлы в форматах PPM, JPEG, PNG, TIFF, GIF и других, поддерживаемых ImageMagick. Во вкладке FX имеется ряд видео- и аудиофильтров, позволяющих создать, например, некоторые эффекты перехода, для предварительного просмотра действия фильтра служат кнопки Preview и Render.
И последняя программа, kavi2svcd (http://www.cornelinux.de/linux/kavi2svcd/index-english.html). представляет собой фронт-энд к программам преобразования (transcode с mjpegtools и mplex) и записи на диск видео (vcdimager и cdrdao) соответственно, необходимо их иметь уже установленными. С ее помощью можно быстро и без лишних телодвижений перегнать AVI-файл на VideoCD или Super VideoCD, причем программа при своем первом запуске запрашивает необходимые параметры, которые можно установить раз и навсегда, превратив всю последующую работу в отдых. При этом оставлена возможность добавить необходимые опции к каждой программе, используемой при создании диска.
При этом если создавать Super VideoCD диск полностью в командной строке, то придется ввести такую вот приблизительно команду:
Как видите, выбирать есть из чего.
Итак, работать с видео в Linux не только можно, но и нужно: система отлично умеет обращаться с имеющимися ресурсами компьютера, и пока идет обработка видео, можно спокойно заниматься повседневными делами, не опасаясь, что все пропадет из-за банального зависания. К тому же Голливуд уже обратил внимание на данную ОС, а потому в скором времени, я думаю, в данном секторе следует ожидать заметного оживления.