Захват видео-кадра из окна

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Захват видео-кадра из окна

Post by Lavr »

Понадобилось мне зацепить в картинку пару кадров из видео-контента.
Граббера-кетчера у меня не случилось, а редактор видео почему-то показывал
только черные окна.
Все, что можно было нагуглить по этому вопросу, занимало афигенный объём и
больше относилось к редакторам, чем к грабберам - я скачивать не стал.
А не написать ли самому? Экстримальных условий нет, паузу я нажать могу,
надо только слить в битмап... И пример на одном сайте быстро нашелся:

Code: Select all

Вот пример захвата содержимого окна 
var
  DC    : hDC;
  Rect  : TRect;
  Bitmap: TBitmap;
  Handle: hWnd;
  wX,wY : integer;
begin
  Handle:=FindWindow('','Intro.avi');
  GetWindowRect(Handle,Rect);
  wX:=(Rect.Right - Rect.Left);
  wY:=(Rect.Bottom - Rect.Top);
  DC:=GetWindowDC(Handle);
  Bitmap:=TBitmap.Create;
  Bitmap.Handle:=CreateCompatibleBitmap(DC,wX,wY);
  BitBlt(Bitmap.Canvas.Handle,0,0,wX,wY,DC,0,0,SRCCOPY);
  ReleaseDC(Handle,DC);
  Clipboard.SetAsHandle(CF_BITMAP,Bitmap.Handle);
Только почитав, подумал я, что так кадр видео не захватишь. Поскольку, если
я правильно помню, видео-контент не отображается на память окна, а как-то
хитрее вроде работает.
WinGrab - есть у меня такой популярный "захватчик" содержимого окон - работает
по такому-же принципу, но содержимое окна медиа-плейера отродясь захватить не мог...

А как по-простому сделать захват кадра из окна под Виндой? Кто-нибуть знает?
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

поставь себе mplayer и из командной строки проиграй авишку в выходной поток джпегов, перемотав к нужному месту и указав длину играемого в нечто, приближённое к длине одного кадра :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: Захват видео-кадра из окна

Post by b2m »

Lavr wrote:Только почитав, подумал я, что так кадр видео не захватишь. Поскольку, если я правильно помню, видео-контент не отображается на память окна, а как-то хитрее вроде работает.
Это называется "оверлей" и некоторые плееры позволяют отключать эту фичу. Тогда и обычным "альт-принт-скрином" можно воспользоваться, чтобы картинку окна в буфер обмена поместить. А там уже и до "паинта" недалеко :)
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:поставь себе mplayer и из командной строки проиграй авишку
В общем-то mplayer и так присутствует по умолчанию, только из командной строки
я с ним отродясь ничего не делал... Но - попробую. Спасибо!
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

а - у мплеера есть игралка под винды с юзер интерфейсом
и ещё мплееру можно сказать декодить в SDL окно - тогда я думаю можно и обычными грабильками грабить
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:у мплеера есть игралка под винды с юзер интерфейсом
и ещё мплееру можно сказать декодить в SDL окно
Это всё, наверное, в том случае, если мы ведём речь про один и тот-же mplayer .
У меня он болтается Версия: 6.01.05.0217.
Но весь видео-контент при установке ассоциирован с Media Player Classic.
Он при наличии кодеков показывает всё, но порой странно.
Если расширение модное щас *.mp4 - то плеер тужится и кривит.
Но если то же самое обозвать *.avi - то кажет без проблем. :wink:
Похоже, детект контента у него не шибко развит...
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

я говорю вот про этот http://www.mplayerhq.hu/design7/dload-ru.html :)
это опенсорцовский плеер, который играет всё ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Спасибо за ссылочку - посмотрю... Но вобщем-то, плеер - это оболочка,
что он сможет показать - определяют кодеки.
У меня на другом компе стоит ВиртуалДаб - который просто имеет опцию
"сохранить кадр в битмап". Мне просто подумалось - захват кадра, это
не такая уж фундаментальная задача, чтобы ставить новый софт.
Захотелось извернуться "эз из"...
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Спасибо за ссылочку - посмотрю... Но вобщем-то, плеер - это оболочка,
что он сможет показать - определяют кодеки.
У меня на другом компе стоит ВиртуалДаб - который просто имеет опцию
"сохранить кадр в битмап". Мне просто подумалось - захват кадра, это
не такая уж фундаментальная задача, чтобы ставить новый софт.
Захотелось извернуться "эз из"...
У мплеера все кодеки вшиты. А те которые нельзя вшить - подключаются бинарями (на странице даунлоада есть чуть ниже).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А может выяснить - куда отображает видео "оверлей", тогда вся задача
и будет занимать столько строк, сколько я привёл в примере, только
"мемкопи", возможно, добавится?
Я помню что "оверлею" выделяется окно в видео-памяти Винды, и он туда
отображает свой контент. Поэтому при захвате грабалкой это место просто
черное.

Я то вышел из положения ещё проще, если уж на то пошло, - я свой экран
сфотографировал своей-же ВЕБ-камерой (есть такие кадры в "клавиатурах")...
Но ведь это ж не наш метод! :lol:
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Media Player Classic - http://mpc-hc.sourceforge.net/
Жмешь паузу в нужном месте и через меню "файл" - "save image"
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

jdigreze wrote:Media Player Classic - http://mpc-hc.sourceforge.net/
Жмешь паузу в нужном месте и через меню "файл" - "save image"
Опять же, при выводе в оверлей выдаст "Нот саппортет ту оверлей аутпут.". А при выборе "нон оверлей аутпут" иногда выдает "Егор чего-то-там-много-буков-и-типо-код 0х80000000", где последнее число иногда отличается.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:Media Player Classic - http://mpc-hc.sourceforge.net/
Жмешь паузу в нужном месте и через меню "файл" - "save image"
Да есть такая возможность. Я сам давненько юзаю Media Player Classic за
его неприхотливость и нетребовательность.
Но HardWareMan прав. Иногда Media Player Classic не может позволить захват
кадра - ну как назло...
Сильно покопав Инет, я остановился на граббере HyperSnap 6. С грехом попалам
он на практике с третьего пинка всёж захватывает ЛЮБОЙ кадр из ЛЮБОГО
видео-файла. Но и весит он порядка 6 мегов. И не думаю я, что все 6 мегов
занимаются проблемой захвата кадра.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Думаю, что если покурить принципы работы оверлея, то можно будет понять можно ли с него выдернуть результат (напомню, что оверлей сам декодирует посылаемый цветовой профиль в RGB, тем самым разгружая проц от этой ресурсоёмкой задачи) . И если возможно у видюхи забрать результат его работы (даже в профиле оригинала - например для MPEG это YUV), то это уже практически победа. :3
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote: Сильно покопав Инет, я остановился на граббере HyperSnap 6. С грехом попалам
он на практике с третьего пинка всёж захватывает ЛЮБОЙ кадр из ЛЮБОГО
видео-файла. Но и весит он порядка 6 мегов. И не думаю я, что все 6 мегов
занимаются проблемой захвата кадра.
Мплеер полегче будет и как я говорил он умеет чисто софтверно декодить видео в SDL окно, которое можно воровать, и даже в отдельные файлы (PNG или JPG)
Я тут за главного - если что шлите мыло на me собака shaos точка net