2011-08-19 81 views
0

我需要获取不同大小的视频,所有视频都以相同大小显示,例如600 * 400px。 我使用的是我在某处找到的代码,但问题是当我打开例如720p视频文件时,视频将以其原始大小显示。如何在wx.media.MediaCtrl中调整视频大小

那么有没有可能使用mediactrl调整视频大小?

如果没有,那么什么是最有效的方式来嵌入videoplayback在wxpython调整大小选项?

我在OSX狮子,MacPython上2.7.2,wxPython的2.8在32位模式

import wx 
import wx.media 
import os 


class Panel1(wx.Panel): 

    def __init__(self, parent, id): 
     #self.log = log 
     wx.Panel.__init__(self, parent, -1, style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN) 

     # Create some controls 
     try: 
      self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER) 
     except NotImplementedError: 
      self.Destroy() 
      raise 

     loadButton = wx.Button(self, -1, "Load File") 
     self.Bind(wx.EVT_BUTTON, self.onLoadFile, loadButton) 

     playButton = wx.Button(self, -1, "Play") 
     self.Bind(wx.EVT_BUTTON, self.onPlay, playButton) 

     pauseButton = wx.Button(self, -1, "Pause") 
     self.Bind(wx.EVT_BUTTON, self.onPause, pauseButton) 

     stopButton = wx.Button(self, -1, "Stop") 
     self.Bind(wx.EVT_BUTTON, self.onStop, stopButton) 

     slider = wx.Slider(self, -1, 0, 0, 0, size=wx.Size(300, -1)) 
     self.slider = slider 
     self.Bind(wx.EVT_SLIDER, self.onSeek, slider) 

     self.st_file = wx.StaticText(self, -1, "Open video file", size=(200,-1)) 
     self.st_size = wx.StaticText(self, -1, size=(100,-1)) 
     self.st_len = wx.StaticText(self, -1, size=(100,-1)) 
     self.st_pos = wx.StaticText(self, -1, size=(100,-1)) 

     # setup the button/label layout using a sizer 
     sizer = wx.GridBagSizer(5,5) 
     sizer.Add(loadButton, (1,1)) 
     sizer.Add(playButton, (2,1)) 
     sizer.Add(pauseButton, (3,1)) 
     sizer.Add(stopButton, (4,1)) 
     sizer.Add(self.st_file, (1, 2)) 
     sizer.Add(self.st_size, (2, 2)) 
     sizer.Add(self.st_len, (3, 2)) 
     sizer.Add(self.st_pos, (4, 2)) 
     sizer.Add(self.mc, (5,1), span=(5,1)) # for .avi .mpg video files 
     self.SetSizer(sizer) 

     self.timer = wx.Timer(self) 
     self.Bind(wx.EVT_TIMER, self.onTimer) 
     self.timer.Start(100) 

    def onLoadFile(self, evt): 
     dlg = wx.FileDialog(self, message="Choose a media file", 
          defaultDir=os.getcwd(), defaultFile="", 
          style=wx.OPEN | wx.CHANGE_DIR) 
     if dlg.ShowModal() == wx.ID_OK: 
      path = dlg.GetPath() 
      self.doLoadFile(path) 
     dlg.Destroy() 

    def doLoadFile(self, path): 
     if not self.mc.Load(path): 
      wx.MessageBox("Unable to load %s: Unsupported format?" % path, "ERROR",   wx.ICON_ERROR | wx.OK) 
     else: 
      folder, filename = os.path.split(path) 
      self.st_file.SetLabel('%s' % filename) 
      self.mc.SetBestFittingSize() 
      self.GetSizer().Layout() 
      self.slider.SetRange(0, self.mc.Length()) 
      self.mc.Play()#ITS TO PROBLEM, WHY IT DOESNT PLAY HERE?# 

    def onPlay(self, evt): 
     self.mc.Play() 

    def onPause(self, evt): 
     self.mc.Pause() 

    def onStop(self, evt): 
     self.mc.Stop() 

    def onSeek(self, evt): 
     offset = self.slider.GetValue() 
     self.mc.Seek(offset) 

    def onTimer(self, evt): 
     offset = self.mc.Tell() 
     self.slider.SetValue(offset) 
     self.st_size.SetLabel('size: %s ms' % self.mc.Length()) 
     self.st_len.SetLabel('(%d seconds)' % (self.mc.Length()/1000)) 
     self.st_pos.SetLabel('position: %d ms' % offset) 



app = wx.PySimpleApp() 
# create a window/frame, no parent, -1 is default ID 
frame = wx.Frame(None, -1, "play audio and video files", size = (600, 350)) 
# call the derived class 
Panel1(frame, -1) 
frame.Show(1) 
app.MainLoop() 

回答

0

我认为MediaCtrl只会将它们的尺寸调整为它们的原始尺寸。我可以尝试使用某种编辑软件编辑它们。

相关问题