Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #58, ОКТЯБРЬ 2003 г.

Свой видеокомбайн на Delphi

Лозовский Александр

Xakep, номер #058, стр. 058-082-4


Вот что у меня получилось:

Теперь, когда интерфейс более или менее готов, пора бы внести пару строчек кода. Начнем с самого главного - онклика для первой кнопки. Вот он:

IF MMAVIOpenDialog1.Execute then //Если диалог сработал, то

begin

MMAVIFile1.FileName := MMAVIOpenDialog1.FileName; //Передадим имя компоненту

Caption := ExtractFileName(MMAVIOpenDialog1.FileName);

MMAVIFile1.OpenFile;

MMAVIControl1.FreeStreams;

MMAVIControl1.AddFile(MMAVIFile1);

MMAVIVideoDisplay1.Refresh;

end;

Здесь все должно быть понятно, если ты читал теорию, поэтому пойдем дальше - сразу ко второй кнопке, запускающей процесс навигации по кадрам. Посмотрим на OnClick:

MMAVIVideoDisplay1.AddFile(MMAVIFile1); //Ассоциируем MMAVIVideoDisplay1 с //файлом

MMAVIVideoDisplay1.StreamIdx := 0; //Берем первый поток

MMSlider1.MaxValue:= MMAVIFile1.Streams[0].Length-1; //Макс. значение слайдера

MMSlider1.Enabled := True; //Включаем слайдер

После этого подготовительного этапа и создания события OnChange для слайдера:

MMAVIVideoDisplay1.FrameIdx := MMSlider1.Position;

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

Логика такая - после клика на компоненте мы создаем растровый файл (т.е. bmp) и копируем туда содержимое MMAVIVideoDisplay1. И поскольку нас интересует чистый кадр без границ компонента, мы их аккуратненько обрезаем. Именно для этого нужны манипуляции с размерами, которые ты видел во врезке.

Имя файла имеет вид picX.bmp, где Х - номер по порядку, от нуля до... сколько изволите :). Для ее инициализации не забудь вдолбить в OnCreate формы и ОнКлик button2:

N:=0;

Разрывной файл

Как я уже говорил, функция деления исходного файла на два (аудио и видео) - это жемчужина любой медиа-проги :), поскольку многие юзеры мечтают сохранять любимые фразы/музон из фильмов. Просто они не знают, как это сделать. А мы с тобой знаем, поэтому и ставим онклик для третьей кнопки:

Принцип работы этого кода тебе ясен, поскольку ты внимательно читал статью, но учти, что файлы эти сохраняются в каталоге С ИСХОДНЫМ ФАЙЛОМ и имеют имена в виде имя_исходного_audio.wav и имя_исходного_video.avi.

Логическое завершение

Этот компонент не единственный, позволяющий легко и непринужденно проигрывать видео. Есть и другой путь, а именно - жестокая эксплуатация Windows Media Player (думаю, для тебя не секрет, что все продукты от MS легко управляются ИЗВНЕ :)). Для упрощения этой и без того несложной задачи, был выпущен компонент TActiveMovie (качай его с www.delphicity.com/amovie/amovie.zip или бери на диске). Он позволяет встраивать Windows Media Player (старше 6.4 версии) в твою форму. Отсюда следуют и его достоинства - он может проигрывать клипы в любом направлении (вперед-назад), увеличивать/уменьшать изображение, захватывать кадры и делать с ними все, что придет в голову. За это приходится расплачиваться интерфейсом WMP на твоей проге. Как ни странно, эта особенность не помешала ему дожить до 5 версии. Разобраться с ним несложно, на сайте есть довольно подробная документация. Естественно, на 100% english language. Да, кстати, помимо MTools у Swift Software есть и другие продукты. Загляни на www.swiftsoft.de/downloads.html. Возможно, тебе понравится что-то еще. На этом все. Удачи!

Назад на стр. 058-082-3  Содержание  Вперед на стр. 058-082-5