Говнософт от ®oman_p®o

Jan 06, 2009 16:43

На днях порылся в своих сорцах и накопал одну софтину CoolVideoIndexer, которую как помнится так и не допилил до ума. Собственно, писать её начал во времена, когда не знал про замечательную функцию Media Player Classic - Save thumbnail (в меню File). Хотя отличия всё же есть - MPC индексирует только 1 файл и создаёт на выходе bmp/jpg рисунок с именем, размером, разрешением и набором превьюшек с проштампованным на них временем. Прикольно, но если у меня тысячи видеофайлов ? Открывать каждый и проделывать для него операцию ? Увольте. Хотя, я не читал доку, возможно, в MPC есть возможность запуска этой функции с передачей имени входного и выходного файлов через командную строку и возможна автоматизация через bat файл.
Учитывая что я о подобном функционале в те времена не знал, CoolVideoIndexer поступает иначе:
в зависимости от опций находит либо на всех дисках/либо только на жёстких дисках/либо в указанном списке папок (при желании для папок выборочно можно установить флажок "включая подпапки") все видеофайлы (либо заданный пользователем набор расширений, который необходимо считать видеофайлами) и начинает выдирать заданное число кадров (от 1 до 25) из каждого файла и сохранять их в виде bmp/jpeg/gif/png/tiff (спасибо GDI+ за богатый набор форматов), попутно уменьшая их в (на выбор) 1-2-3-4-5 раз. После чего генерирует простейшую html-табличку и располагает кадры из каждого выбранного файла по строкам, для каждой картинки добавляет ссылку на исходный видеофайл (которая правда валидна только для компьютера на котором это всё делалось, ибо путь сохраняется абсолютный). Кроме того браузеры ведут себя несколько странно - предлагая открыть или сохранить файл, т.е. при щелчке вместо открытия видео-файла мы его сами с себя начинаем скачивать в кэш браузера или указанную папку :))) Ну и по окончании генерации html'я он открывается в браузере по умолчанию.
Теперь что касаемо "не допилил до ума", т.е. известные глюки:

*во-первых, конфликтует со всякими левыми приблудами которые подгружаются по умолчанию при обращении к кодекам (если стоит какой-нить VobSub с always load - вылет 100%, всё, что в трее свои иконки при воспроизведении видео отображает - отключить, так оно гораздо стабильнее будет)
*во-вторых, рушится на левых/битых видеофайлах (чаще всего на порно :))) так что как вариант к названию добавить & PornoDetector :)))). Впрочем, в отличие от 1го варианта (когда спасает только изменение настроек установленных кодеков/фильтров и прочей мишуры), здесь обычно можно просто не обращать внимания на вывалившуюся ошибку (ибо обработка как видно по индикатору прогресса продолжается) и дождаться завершения работы программы, тогда это окошко(и) с ошибкой уже и закрывать :)
*в-третьих, безбожно тормозит. Причина проста - практически 95% кода работы с видео через DirectShow скомуниздено из SampleGrabber. Разбираться с тонкостями составления графа, pin'ами и прочей хренью не было ни желания, ни мозгов. (да и сейчас нет ни того, ни другого ^^). Кроме того так и не понял как повторно использовать COM объекты без создания/удаления, подсунув им другой файл.
*в-четвертых, могут быть глюки с многопоточностью, ибо опыта у меня по этой части не так много.
*в-пятых, всё это дело юзает MFC7 (статически прилинкована, потому и бинарь такой жЫрный - 300 кило) и GDI+, потому может не работать на win2k (впрочем, есть GDI+ redist, так что это не так страшно). MFC7 потому как вещи связанные с DirectShow в любимой VC6 компилиться отказались (видимо не было нужных хидеров/либ - не помню), так что пришлось писать под VC2003
*в-шестых, конфиг хранит рядом с собой (банальный ini файл, только юникодный, ибо в процессе теста на всяком левом видео из сети ( :))) ) достали обломы в стиле "не могу открыть файл "C:\VIDEO\???????????.avi"", впрочем полная юникодность не гарантируется - перепиливал налету, возможно что-то пропустил). А значит на правильных системах (кто под админом не сидит) кидать куда-нить в профиль (благо инсталляции не требует), ибо в ini оно таки пишет текущие настройки при выходе из программы (впрочем, часто, (читайте "практически всегда") он аварийный и потому ничего не пишет ^^).
*в-седьмых, глюки с файлом html таблицы сносят альтернативным браузерам крышу (в опере у меня открылась пустая белая страничка, впрочем IE7 таки показал всё как следует), про некорректную работу ссылок уже писАл выше.
*в-восьмых, я в своём же коде уже не в зуб ногой ибо он писался откровенно через (_!_). Так что помочь мало чем могу, да и нет желания вспоминать и вникать.

Ну вроде бы основное по существу сказал.
Ах да, чуть не забыл, собственно, вот тут архив с бинарником.
Здесь архив с примером выходных файлов (да, мне повезло, после отключения VobSub'а на 2х файлах оно даже не упало ^^). Картинки кладутся рядом в подпапку <имя_html_файла>.html.files. Именование картинок нехитрое и малониформативное - images_<номер_видео_файла_8цифр>_<номер_кадра_3цифры>_x<во_сколько_раз_уменьшен>.<выбранное_расширение>
Ну и на закуску программерам - архив с исходниками, наглядно демонстрирующий как НЕ НАДО писать программы :))) Если кому чем-то поможет софтина/сорцы, значит таки не зря многобукав писал.

programming, my_soft

Previous post Next post
Up