Свой видеокомбайн на 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. Возможно, тебе понравится что-то еще. На этом все. Удачи! |