diff --git a/Lib/plat-mac/videoreader.py b/Lib/plat-mac/videoreader.py
index 7b776f2..6153287 100644
--- a/Lib/plat-mac/videoreader.py
+++ b/Lib/plat-mac/videoreader.py
@@ -12,11 +12,20 @@
 from Carbon import Qdoffs
 from Carbon import QDOffscreen
 from Carbon import Res
-import MediaDescr
-import imgformat
+try:
+	import MediaDescr
+except ImportError:
+	def _audiodescr(data):
+		return None
+else:
+	def _audiodescr(data):
+		return MediaDescr.SoundDescription.decode(data)
+try:
+	from imgformat import macrgb
+except ImportError:
+	macrgb = "Macintosh RGB format"
 import os
 # import audio.format
-import macfs
 
 class VideoFormat:
 	def __init__(self, name, descr, width, height, format):
@@ -40,8 +49,7 @@
 		
 class _Reader:
 	def __init__(self, path):
-		fsspec = macfs.FSSpec(path)
-		fd = Qt.OpenMovieFile(fsspec, 0)
+		fd = Qt.OpenMovieFile(path, 0)
 		self.movie, d1, d2 = Qt.NewMovieFromFile(fd, 0, 0)
 		self.movietimescale = self.movie.GetMovieTimeScale()
 		try:
@@ -55,7 +63,7 @@
 			handle = Res.Handle('')
 			n = self.audiomedia.GetMediaSampleDescriptionCount()
 			self.audiomedia.GetMediaSampleDescription(1, handle)
-			self.audiodescr = MediaDescr.SoundDescription.decode(handle.data)
+			self.audiodescr = _audiodescr(handle.data)
 			self.audiotimescale = self.audiomedia.GetMediaTimeScale()
 			del handle
 	
@@ -139,6 +147,8 @@
 		return self._gettrackduration_ms(self.videotrack)
 		
 	def GetAudioFormat(self):
+		if not self.audiodescr:
+			return None, None, None, None, None
 		bps = self.audiodescr['sampleSize']
 		nch = self.audiodescr['numChannels']
 		if nch == 1:
@@ -167,12 +177,14 @@
 		return channels, encoding, blocksize, fpb, bps
 			
 	def GetAudioFrameRate(self):
+		if not self.audiodescr:
+			return None
 		return int(self.audiodescr['sampleRate'])
 		
 	def GetVideoFormat(self):
 		width = self.videodescr['width']
 		height = self.videodescr['height']
-		return VideoFormat('dummy_format', 'Dummy Video Format', width, height, imgformat.macrgb)
+		return VideoFormat('dummy_format', 'Dummy Video Format', width, height, macrgb)
 		
 	def GetVideoFrameRate(self):
 		tv = self.videocurtime
@@ -236,18 +248,20 @@
 	return rdr
 
 def _test():
-	import img
+	import EasyDialogs
+	try:
+		import img
+	except ImportError:
+		img = None
 	import MacOS
 	Qt.EnterMovies()
-	fss, ok = macfs.PromptGetFile('Video to convert')
-	if not ok: sys.exit(0)
-	path = fss.as_pathname()
+	path = EasyDialogs.AskFileForOpen(message='Video to convert')
+	if not path: sys.exit(0)
 	rdr = reader(path)
 	if not rdr:
 		sys.exit(1)
-	dstfss, ok = macfs.StandardPutFile('Name for output folder')
-	if not ok: sys.exit(0)
-	dstdir = dstfss.as_pathname()
+	dstdir = EasyDialogs.AskFileForSave(message='Name for output folder')
+	if not dstdir: sys.exit(0)
 	num = 0
 	os.mkdir(dstdir)
 	videofmt = rdr.GetVideoFormat()
@@ -258,16 +272,18 @@
 		fname = 'frame%04.4d.jpg'%num
 		num = num+1
 		pname = os.path.join(dstdir, fname)
-		print 'Writing', fname, imgw, imgh, len(data)
-		wrt = img.writer(imgfmt, pname)
-		wrt.width = imgw
-		wrt.height = imgh
-		wrt.write(data)
-		timestamp, data = rdr.ReadVideo()
-		MacOS.SetCreatorAndType(pname, 'ogle', 'JPEG')
-		if num > 20: 
-			print 'stopping at 20 frames so your disk does not fill up:-)'
-			break
+		if not img: print 'Not',
+		print 'Writing %s, size %dx%d, %d bytes'%(fname, imgw, imgh, len(data))
+		if img:
+			wrt = img.writer(imgfmt, pname)
+			wrt.width = imgw
+			wrt.height = imgh
+			wrt.write(data)
+			timestamp, data = rdr.ReadVideo()
+			MacOS.SetCreatorAndType(pname, 'ogle', 'JPEG')
+			if num > 20: 
+				print 'stopping at 20 frames so your disk does not fill up:-)'
+				break
 	print 'Total frames:', num
 		
 if __name__ == '__main__':
