Как получить n-ный кадр видео в виде картинки?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Serge200803141927
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.03.2008 (Пт) 19:30

Как получить n-ный кадр видео в виде картинки?

Сообщение Serge200803141927 » 19.04.2008 (Сб) 21:42

Прошу помощи.
В инете даже на импортных сайтах нет инфы.

Нужно выводить список видео файлов (avi,wmv...)
на экран в виде thumbnail view.
Т.е. как вытащить из видео файла 1-й (желательно не только 1-й, а любой по требованию) кадр в виде картинки, которую можно потом вывести на экран по loadpicture?

Заранее благодарю.

Serge200803141927
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.03.2008 (Пт) 19:30

Re: Как получить n-ный кадр видео в виде картинки?

Сообщение Serge200803141927 » 20.04.2008 (Вс) 11:39

Сам нашел.
http://www.shrinkwrapvb.com/avihelp/avihlp_3.htm
Если есть более простое решение - велкам.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 21.04.2008 (Пн) 20:19

Эм. Разве AVIStream* работает с WMV?
Я бы смотрел в сторону DirectShow, IBasicVideo2::GetCurrentImage.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.04.2008 (Вт) 11:42

В своё время делал через MPlayer, только его приходится таскать с собой
Программисты не глючат - глючат компиляторы...

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Как получить n-ный кадр видео в виде картинки?

Сообщение TrueTrue » 30.12.2012 (Вс) 15:28

Может у кого завалялся готовый кусок кода, создания превью с видео файла, буду очень признателен...

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Как получить n-ный кадр видео в виде картинки?

Сообщение TrueTrue » 30.12.2012 (Вс) 19:29

Код: Выделить всё
Private m_objMediaPosition As IMediaPosition
Private m_objVideoWindow As IVideoWindow
Private m_objMediaControl As IMediaControl
Private m_objBasicAudio  As IBasicAudio

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub RunVideo(fName As String, ByVal Volume As Single)
Dim d1 As Double, d2 As Double
Dim meVol As Integer
  meVol = 67 - 67 * Exp((1 - Volume) * 5)
  If meVol < -9999 Then meVol = -9999
  If meVol > 0 Then meVol = 0

  Set m_objMediaControl = New FilgraphManager
  m_objMediaControl.RenderFile fName

  Set m_objVideoWindow = m_objMediaControl
  Set m_objBasicAudio = m_objMediaControl
  m_objVideoWindow.WindowStyle = CLng(&H6000000)
  m_objVideoWindow.Top = 0
  m_objVideoWindow.Left = 0
  m_objVideoWindow.Width = Screen.Width / Screen.TwipsPerPixelX
  m_objVideoWindow.Height = Screen.Height / Screen.TwipsPerPixelY
  m_objVideoWindow.HideCursor -1
  Set m_objMediaPosition = m_objMediaControl
  m_objBasicAudio.Volume = meVol
  m_objMediaControl.Run
  d2 = -1
  Do
    Sleep 50
    d1 = m_objMediaPosition.CurrentPosition
    If d1 = d2 Then Exit Do Else d2 = d1
    If GetAsyncKeyState(vbKeyEscape) < 0 Then Exit Do
  Loop
  DShowStop
End Sub

Public Sub DShowStop()
  If Not m_objMediaControl Is Nothing Then
    m_objMediaControl.Stop
    Set m_objBasicAudio = Nothing
    Set m_objMediaPosition = Nothing
    Set m_objVideoWindow = Nothing
    Set m_objMediaControl = Nothing
  End If
End Sub


ну может быть кто-то подскажет, как в этом коде добавить переход на определённый кадр и снятие скриншота. Пожалуйста, очень нужно.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68

    TopList