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

Окончание, начало см. в МК № 20 (243)

Все это, конечно, хорошо, но размеры файлов получаются иногда ужасающими; желательно немножечко сжать получившийся результат. На то есть инструменты. Например, lav2mpeg, позволяющая преобразовать lav-файлы или поток в MPEG. В качестве входной информации может выступать любая комбинация AVI (.avi), Movtar (.movtar), Quicktime (.qt/.mov) или editlist-файлов:

В результате получим на выходе MPEG1-файл output.mpg, полученный из инструкций в editlist, с видеобитрейтом 2110 Кбит/c и аудиобитрейтом 160 Кбит/c, размером 320240 пикселей.

Или чтобы создать MPEG2 из предварительно созданного file.avi:

В процессе своей работы данная утилита считывает конфигурационный файл ~/.lav2mpegrc, в котором можно установить опции по умолчанию, чтобы не задавать их каждый раз в командной строке.

Далее создаем звук. В MPEG1-видео в качестве звука используют файлы MPEG1-layer2; для MPEG2-видео можно использовать MPEG1-layer2 и MPEG1-layer3 (.mp3). MP3 — неофициальный аудиоформат: хотя большинство VCD-проигрывателей поддерживают его, для видеодисков он недопустим. Для кодирования в MPEG1-layer2 применяется утилита mp2enc. Если все же потребуется MP3, то подставьте в пример соответствующий кодер (например, lame).

Получим звуковой файл sound.mp2 с битрейтом по умолчанию 224 Кбит/c, или обычный вавчик:

Параметр -v 2 добавлен для информативности. MPEG1 официально не поддерживает VBR (Variable Bit Rate), но если действительно нужен такой файл, то попробуйте установить параметр -b очень большим (2500) — говорят, иногда работает. Протестировать полученный файл можно с помощью чуть не любого проигрывателя, например, plaympeg sound.mp2 или mpg123 sound.mp2.

Конвертировать в форматы MPEG 1/2 можно и при помощи утилиты mpeg2enc, имеющей впечатляющее количество опций:

При этом на выходе получится видеофайл с битрейтом по умолчанию 1152 Кбит/c, что оптимально при создании VCDS. При необходимости определить большое количество файлов можно использовать и шаблон, например, %nd, где n — номер:

Получится видеофайл с битрейтом 1500 Кбит/с. Опция -r--motion-search-radius устанавливает поисковый радиус 24 (16 по умолчанию, 16 и 24 оптимально). В двух словах, насколько далеко будут просматриваться смежные сектора и кадры. Значения (0, 8), улучшают скорость кодирования, но получается более низкое качество, в то время как при более высоком значении (24, 32, …) улучшается качество ценой скорости.

Утилита yuvscaler дополнительно позволяет автоматически подгонять (масштабировать) полученное изображение под формат, требуемый спецификациями, например, для записи VCD:

На выходе получим файл, подогнанный под размер VCD, т.е. для PAL/SECAM 352288 и NTSC 352240 и закодированный как MPEG1-поток.

Для SVCD все масштабируется к 480480 NTSC или 480576 PAL/SECAM:

-М указывает на высококачественный bicubic-алгоритм Mitchell-Netravalli — что за алгоритм такой, если честно, не разобрал, но рекомендуется, вроде как действительно ничего. Для установки видеорежима 16:9 и SVCD можно применить такую комбинацию: yuvscaler -M WIDE2STD -O SVCD. При помощи флагов -I и -О с соответствующими опциями можно отобрать только нужную часть кадра, остальное же будет черным (-I USE_450x340+20+30 -O SIZE_320x200). Теперь командой plaympeg video.m1v можно проверить результат.

На данном этапе имеем отдельно подготовленные MPEG видео- и звуковой файлы в выбранном в формате. Теперь осталось слить их в один файл. Здесь на помощь придет утилита mplex, позволяющая соединить один или большее количество MPEG-1/2 потоков видео, MPEG layer-II/III, AC3- и MPEG(5.1)-аудиопотоки в единственный поток программы. На выходе в зависимости от выбранных опций можно получить файл в формате VCD или SVCD, который, используя специальные средства записи типа vcdimager (http://www.vcdimager.org) или любую другую программу, предназначенную для этой цели, например пакет cdrtools, можно слить на болванку и запустить в любом, в том числе и бытовом проигрывателе. Для записи DVD (а почему бы и нет) удобнее будет воспользоваться утилитой Dvdauthor (http://dvdauthor.sourceforge.net), или посмотрите на http://fy.chalmers.se/~appro/linux/DVD+RW. Дополнительно можно разбить выходной поток на части указанного размера.

Все, можно смотреть на любом проигрывателе. При помощи опции -S для mpeg2enc mplex автоматически разобьет файлы и подаст их на выход с названием, согласуясь с опциями printf (например, mpeg2enc-S 650 и mplex -o test%d.mpg), при этом каждая часть будет корректно закрыта. Возможно кодирование с VBR, что только повысит эффективность такого процесса, но при условии, если mpeg2enc также запускалась с этим параметром. При этом утилите необходимо собственноручно указать максимальный битрейт, т.к. она не может определить ее автоматически. Он высчитывается по такой формуле: скорость аудио + максимальная при videobitrate + 1(2)%, т.е. если аудио (-b 224) имеет 224 Кбит/c, а видео имеет 1500 Кбит/c (было закодировано с -b 1500 -q 9), тогда на выходе имеем 17241.01 или приблизительно 1740 Кбит/c:

Видеодиск, конечно, хорошая вещь, но миром правит DivX. Конечно же, нашелся инструмент (даже два), позволяющие закодировать поток и в этом формате —yuv2divx и lav2divx, правда, первая имеет больше опций и, соответственно, возможностей.

Простейший случай будет таким:

При кодировании используются библиотеки утилиты avifile (http://avifile.sourceforge.net) — о ней поговорим в одной из следующих статей — и, соответственно, зависит от поддерживаемых последней кодеков. При этом не требуется мультиплексирование, чтобы предварительно объединять аудио и видео. Звук может быть уже в конвертируемом файле или добавляться отдельно при помощи опции -A (это либо .wav(PCM)-файл либо файл, читаемый из любой lav-утитилиты), при этом вполне работоспособен и вариант, представленный в примере (происходит считывание из видеофайла — опция -A stream.avi):

А вот и боевой примерчик. Здесь мы устанавливаем максимальный битрейт выходных видеоданных в 2500 Кбит/c, аудиобитрейт в 192 Кбит/c, и видеокодек — DIV5. И кстати, DivX показывает звук и картинку в хорошем качестве при более низком видеобитрейте, чем у MPEG2, поэтому можно обойтись и меньшими значениями оного.

Если нет необходимости во всех этих преобразованиях, фильтрах и прочих наворотах, то закодировать можно и сразу:

Дальше займемся утилитами оптимизации потока.

Фильтры,. имеющиеся в комплекте, позволяют улучшить качество изображения, убрав некоторые артефакты, шумы, и при этом еще и уменьшить размер выходного файла. Сигнал должен поступать на stdin, выходить в stout, т.е. общий формат такой:

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

Фильтр yuvmedianfilter оценивает среднее значение вокруг некоторой точки, и в результате работы всяких там алгоритмов изображение получается немного более мягким, а грани более отчетливыми:

Можно указать при помощи флага -r другой радиус осмотра (более 2 (параметр по умолчанию, 0 — параметр отключен), но работает очень медленно) и порог срабатывания триггера -t (по умолчанию 2), T.е. порог фильтрации цветовой насыщенности иногда приводит к «озеленению» цвета, поэтому придется отключать -T 0.

Фильтр yuvdenoise убирает шум, сравнивая предыдущий и последующий кадры, главным образом им уменьшается плотность цвета, шум яркости и мерцание фазовых искажений, но также эффективен он и при удалении зернистости. В man yuvdenoise даны рекомендации по получению лучшего результата. Согласно этому описанию, результирующая строка должна выглядеть приблизительно так:

Фильтр yuvkineco предназначен для улучшения качества NTSC-сигнала, у нас используемого редко. Аналогично фильтр yuvycsnoise также оптимизирован для работы с системой NTSC, и позволяет уменьшить шум в файлах, закодированных в этой системе. Если хотите знать, как каждый фильтр понижает битрейт, посмотрите таблицу. При этом использовался оригинальный файл с качеством 5 и начальным битрейтом 8500 Кбит/c.

Таблица

Опция mpeg2enc --keep-hf позволяет сохранить максимальное качество, хотя последнее в первую очередь зависит от оригинала.

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

Здесь мы только принимаем изображение и масштабируем его до нужного размера кадра. Но yuvscaler также изменяет формат изображения пиксела, тем самым корректируя типовой формат изображения.

Для центровки по горизонтали применяется утилита y4mshift:

При этом изображение сдвинется на 20 пикселов вправо, а если иметь отрицательное число — влево. При этом число должно быть четным; вставленные пикселы будут иметь черный цвет.

Иногда необходимо конвертировать количество кадров framerate, например при преобразовании из PAL в NTSC. В этом поможет yuvfps, которая понижает framerate, пропуская кадры, или повышает его, копируя кадры.

Поскольку кадры только копируются (удаляются), поначалу необходимо их очистить от шума и подогнать по масштабу.

В этом примере конвертируется исходное видео к NTSC, функционирующему с 30000:1001 FPS (или 29.97 FPS) в формате SVCD.

Далее вкратце о паре дополняющих утилит, которые необходимо установить отдельно.

Чтобы связать некоторые утилиты с интерфейсом ImageMagick'a, можно воспользоваться программой yuvmagick, которую можно найти на http://wave.prohosting.com/espsw.

И наконец, по адресу http://www.mir.com/DMG/Software/y4mscaler.html, доступна утилита y4mscaler, позволяющая масштабировать, обрезать и сдвигать видеопотоки; дополнительно с ее помощью можно мимоходом подкорректировать цветовую насыщенность. Например, берем центр 100100 NTSC-DV потока, окружаем синей декоративной рамкой в 20 пикселов и переводим до полноэкранного SuperVCD-потока:

И еще одна родственная утилита dv2jpg (http://sourceforge.net/projects/dv2jpg), позволяющая перекодировать DV-кодированный AVI-поток (из dvgrab, например) в jpeg-кодированный, который может быть обработан mjpeg-пакетом или просто записан на VCD.

На этом, пожалуй, и остановимся. Последний сюрприз я оставил под конец. Дело в том, что такой мощный пакет как mjpegtools в архиве занимает чуть меньше 2 Мб. Так что выбирайте: либо красивая программа в Windows, потребляющая много ресурсов только на прорисовку самой себя и стоящую тысячи, либо совсем маленькая, но бесплатная и очень быстрая в Linux.

Linux forever!

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






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

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

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





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