Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2018, 18:46   #1
alexnike
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию Создание видеофайла из множества BMP(JPEG) файлов

Ни где не смог найти информации как создать видео ряд из картинок (640*480) средствами Delphi XE5 - XE7... Цель моей программы - периодическая съёмка (1 раз в 10сек) объекта и сохранение снимка на диск, а при нажатии на кнопку - из этих снимков собрать видеофайл... Съемку по таймеру я уже сделал, даже прикрутил "датчик движения" (пока не знаю зачем)... А вот со сборкой видеоряда полная засада... ни когда не имел дело с видео, кроме плееров... кто то сможет мне толково разяснить как это делается и где чего искать?
alexnike вне форума Ответить с цитированием
Старый 28.03.2018, 20:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Если знаний по формата видео у вас нет, то лучше взять что-то готовое, например, на базе ffmpeg. Можно и модули, можно и саму тулзу запускать, можно и платное http://www.delphiffmpeg.com/

А так в принципе можете почитать про mjpeg.
p51x на форуме Ответить с цитированием
Старый 28.03.2018, 22:22   #3
alexnike
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Если знаний по формата видео у вас нет, то лучше взять что-то готовое, например, на базе ffmpeg. Можно и модули, можно и саму тулзу запускать, можно и платное http://www.delphiffmpeg.com/

А так в принципе можете почитать про mjpeg.
P51x, спасибо за отклик... Просмотрел несколько статей про MJPEG и выяснил что мне пока это не нужно. Это кодек, а мне на данном этапе необходимо понять как из картинок сложить видеоряд (пока без сжатия), т.е. кадр за кадром (как в GIF)... После этого я создам функцию завата изображения и передачу его непосредственно в AVI, минуя запись на диск... Про ffmpeg много чего написано и примеров тоже много, но я так и не понял как его использовать в Delphi...
Также я рассматривал вариант с использованием avi_writer, avi_writer_2, avi_writer_2.1 , там тоже есть подводные камни, связаные с версиями Delphi... Хотя этот вариант мне бы понравился, если бы я писал свою программу в D7...
alexnike вне форума Ответить с цитированием
Старый 29.03.2018, 09:44   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

AVI - это контейнер. в нём могут быть представлены потоки мультимедия данных - видео, аудио. Каждый из потоков должен иметь свою структуру, чтобы его смог понять стандартный плеер. В частности, в структуре есть заголовок, в котором описаны параметры потока. один из параметров - кодек - он как раз и говорит плееру (точнее декодеру потока) что там за данные в потоке и что с ними делать.
Один из простейших кодеков - это и есть MJPEG. см. например википедия MJPEG (Motion JPEG)
его суть в том, что каждый кадр видео - это и есть отдельный JPEG файл. Межкадровая разница никак не учитывается. Т.е. по сути это просто склеенные вместе JPEG файлы + заголовок.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.03.2018, 10:50   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Есть несколько путей. И все они имеют минусы.

1) Самописный кодек.
2) DirectX
3) VFW
4) FFMPEG
5) VCL
6) OpenCV
7) Компоненты.

1) MJPEG, тут можно посмотреть по создание
http://www.delphimaster.ru/cgi-bin/f...1227686777&n=7
Хотя с ним могут быть проблемы с воспроизведением да и сжатие значительно хуже чем у других кодеков.

Файлы *.MJPEG - содержат только заголовок у первого кадра. У других надо его вырезать.
JPEG - понятия заголовка отсуствует есть несколько частей которые могут быть могут не быть и вообще не имеют строгой позиции. В формате крайне плохо описаны,есть практика применения которая говорит что считать заголовком а что нет.

И вот эту вот лапшу надо закодить на Delphi грубо говоря перевести с какого либо Си++ проекта так как готового нет.

Проще придумать свой формат запихать подряд BMP файлы и после воспроизводить своим плейром.

2) DirectX из недостатков слишком сложно организован изначально заточен под потоковую обработку. Примеры есть в том же DSPack. Куча багов самого DirectX раздрожает. Фактически под виндоус это основной API так что худо бедно работает.
https://github.com/JayDi85/dspack/bl...eocap/main.pas

3) VFW - API довольно простой. Правда описания на русском языке нету.
Из недостатков для VFW нужны свои кодеки. VFW - считается устаревшей технологией. Из контейнеров поддерживает только AVI и MPEG. Да и кодеки можно пересчитать по пальцам руки.
Велика вероятность что для воспроизведения вам придётся доставлять такие вот кодеки.

https://github.com/maerlyn/old-delph...VIRecorder.pas
http://www.programmersforum.ru/showp...00&postcount=3

4) FFMPEG хорошая программа. Одна беда она написана на Си++.
4.1) Используем FFMPEG.exe из минусов неумет сжимать данные из стандартного ввода/вывода. - т.е BMP файлы придётся сохранять на диск. А это может снизить производительность.
http://www.cyberforum.ru/delphi-mult...ad1457871.html
4.2) FFMPEG DLL Трудно найти заголовочные файлы на паскале, а к ним необходимую версию библиотеки
https://github.com/DJMaster/ffmpeg-f...master/binding
http://www.delphiffmpeg.com/headers/
4.3) Помимо бесплатных заголовочных файлов есть платная версия компонента для Delphi.

5) https://prog.olsztyn.pl/paslibvlc/
Сам не пробовал возможно это самое лучшее решение!

6) OpenCV работает по верх выше описанных технологий. Из недостатки найти актуальную версию заголовочных файлов.
https://sourceforge.net/p/delphiopen...amples/FFMpeg/

7) Компоненты. Компоненты были написаны для старых дельфей и в новом просто отказываются работать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 29.03.2018 в 20:13.
Pavia вне форума Ответить с цитированием
Старый 29.03.2018, 20:14   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Обновил пост добавил ссылки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 29.03.2018, 21:53   #7
alexnike
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию

Всем огромное спасибо... Даже не ожидал что столько толкового прочитаю... Теперь мне всё это надо перелопатить, и понять и опробовать... На это на уйдут не мало времени... Если получится что нибудь сотворить, то обязательно вынесу на обсуждение...
alexnike вне форума Ответить с цитированием
Старый 30.03.2018, 07:26   #8
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

а попробуй по форуму поискать про скриншоты и как из них сделать видео на лету. там где-то были вложения с готовыми проектами на Delphi. скриншоты - это ведь те же самые фотографии в формате JPEG или BMP.
вот одна из тем http://www.programmersforum.ru/showt...F8%EE%F2%E5%F0
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 30.03.2018, 07:56   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

NetSpace
Одна из ссылок в 3 пункте и есть скришотилка. почти образцовая.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 20.04.2018, 16:07   #10
alexnike
 
Регистрация: 22.11.2010
Сообщений: 5
По умолчанию

И снова всем привет! Спасибо за отклики, но у меня ни чего не получилось... Засорил Delphi различными компонентами, но эффекта - ноль... Выход один, пока не найду выхода - сохранять все Bitmap'ы в *.Gif... Примеры интересны, но я работаю в среде DXE 5 и DXE 7. А Delphi 7 на Win10 нормально установить не получилось...

Последний раз редактировалось alexnike; 20.04.2018 в 16:36. Причина: Не закончил мысль
alexnike вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображения BMP и JPEG OmegaBerkut C# (си шарп) 9 29.05.2017 13:52
Создание таблицы xls из множества файлов doc. Master_shmell Помощь студентам 0 04.06.2013 21:50
Компрессия BMP в JPG (JPEG) MartyM Общие вопросы C/C++ 2 25.11.2012 00:57
Работа с BMP -> JPEG MartyM Общие вопросы C/C++ 6 18.11.2012 14:07
Проблема с TImage, BMP, JPEG Florento Общие вопросы Delphi 5 16.06.2011 16:18