/[escript]/trunk/pyvisi/py_src/movie.py
ViewVC logotype

Annotation of /trunk/pyvisi/py_src/movie.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1200 - (hide annotations)
Thu Jun 21 02:04:47 2007 UTC (14 years, 1 month ago) by jongui
File MIME type: text/x-python
File size: 6774 byte(s)
Corrected a small epydoc error.
1 jongui 1193 """
2 jongui 1197 @var __author__: name of author
3     @var __copyright__: copyrights
4     @var __license__: licence agreement
5     @var __url__: url entry point on documentation
6     @var __version__: version
7     @var __date__: date of the version
8 jongui 1193 """
9    
10 jongui 1197 __author__="John Ngui, john.ngui@uq.edu.au"
11     __copyright__=""" Copyright (c) 2006 by ACcESS MNRF
12     http://www.access.edu.au
13     Primary Business: Queensland, Australia"""
14     __license__="""Licensed under the Open Software License version 3.0
15     http://www.opensource.org/licenses/osl-3.0.php"""
16     __url__="http://www.iservo.edu.au/esys"
17     __version__="$Revision$"
18     __date__="$Date$"
19    
20    
21 jongui 1193 from esys.pyvisi.constant import ImageFormat
22     from os import system
23    
24     class Movie:
25     """
26     Class that creates a file called 'make_movie' by default (if a parameter
27     file name is not speficied) which contains a list of parameters required
28     by the 'ppmtompeg' command to generate a movie from a series of images.
29 jongui 1199
30     @attention: A movie cannot be generated from postscript (.ps) images.
31 jongui 1193 """
32    
33     def __init__(self, parameter_file = "make_movie"):
34     """
35 jongui 1199 Initialise the generation of the movie. If a parameter file name
36     is supplied, the file will not be deleted once the movie has been
37     generated. Otherwise, the temporary parameter file created will
38     automatically be removed at the end.
39 jongui 1193
40     @type parameter_file: String
41     @param parameter_file: Name of the file containing the list of
42     parameters required by the 'ppmtompeg' command.
43     """
44    
45     self.__parameter_file = parameter_file
46    
47 jongui 1197
48     def imageRange(self, input_directory, first_image, last_image):
49 jongui 1193 """
50 jongui 1197 The image range from which the movie is to be generated from.
51 jongui 1193
52     @type input_directory: String
53     @param input_directory: Directory in which the series of images can
54     be found
55     @type first_image: String
56     @param first_image: First image name (including the extension)
57     @type last_image: String
58     @param last_image: Last image name (including the extension)
59     """
60    
61 jongui 1197 # Keeps track whether an image range or image list was provided as
62     # the source for generating the movie.
63     self.__image_range_used = True
64 jongui 1193 self.__input_directory = input_directory
65     self.__first_image = first_image
66     self.__last_image = last_image
67    
68     self.__splitInput()
69     self.__retrieveFirstImageDetails()
70     self.__retrieveLastImageDetails()
71     self.__retrieveConversionCommand()
72 jongui 1197
73     def imageList(self, input_directory, image_list):
74     """
75     The image list from which the movie is to be generated from.
76    
77     @type input_directory: String
78     @param input_directory: Directory in which the series of images can
79     be found
80     @type image_list: List
81 jongui 1200 @param image_list: List of images name (including the extension)
82 jongui 1197 """
83    
84     self.__image_range_used = False
85     self.__input_directory = input_directory
86     self.__images = ""
87    
88     self.__first_image = image_list[0] # Get first image in the list.
89     self.__splitInput()
90     self.__retrieveConversionCommand()
91    
92     for i in image_list:
93     self.__images += i + '\n'
94    
95     def makeMovie(self, movie):
96     """
97 jongui 1199 Generate the movie.
98 jongui 1197
99     @type movie : String
100 jongui 1199 @param movie: Movie name (including the .mpg extension)
101 jongui 1197 """
102    
103     self.__movie = movie
104 jongui 1193 self.__generateParameterFile()
105    
106     # If a parameter file name was not specified, then the default file
107     # will be deleted automatically once the movie has been generated.
108     # However, if a paramter file name was specified, the file will be
109     # maintained.
110     system('ppmtompeg ' + self.__parameter_file)
111     if(self.__parameter_file == "make_movie"):
112     system('rm ' + self.__parameter_file)
113    
114     def __splitInput(self):
115     """
116     Split the image label (i.e. temp-0001.jpg) to separate the
117     image name (i.e. temp-0001) and image format (i.e. jpg).
118     """
119    
120 jongui 1194 first_image_split = self.__first_image.split('.')
121 jongui 1193 # Image format (i.e. jpg)
122 jongui 1194 self.__image_format = first_image_split[len(first_image_split) - 1]
123 jongui 1193 # First image name.
124 jongui 1194 self.__first_image = \
125     self.__first_image.rstrip('.' + self.__image_format)
126    
127 jongui 1197 if(self.__image_range_used == True):
128     # Last image name.
129     self.__last_image = \
130     self.__last_image.rstrip('.' + self.__image_format)
131 jongui 1193
132     def __retrieveFirstImageDetails(self):
133     """
134     Retrieve the first image name details.
135     """
136    
137     # For a image called 'temp-0001.jpg', self.__first_image_number
138     # will be '0001', while self.__image_prefix will be 'temp-'.
139     self.__first_image_number = ""
140     self.__image_prefix = ""
141    
142     for i in range(len(self.__first_image)):
143     if(self.__first_image[i].isdigit()): # Retrieve first image number.
144     self.__first_image_number = \
145     self.__first_image_number + self.__first_image[i]
146     else: # Retrieve image prefix.
147     self.__image_prefix = \
148     self.__image_prefix + self.__first_image[i]
149    
150     def __retrieveLastImageDetails(self):
151     """
152     Retrieve the last image name details.
153     """
154    
155     self.__last_image_number = ""
156    
157     for i in range(len(self.__last_image)):
158     if(self.__last_image[i].isdigit()): # Retrieve last image number.
159     self.__last_image_number = \
160     self.__last_image_number + self.__last_image[i]
161    
162     def __retrieveConversionCommand(self):
163     """
164     Retrieve the conversion command (depending on the image format)
165     required by the 'ppmtompeg' command.
166     """
167 jongui 1197
168 jongui 1193 if(self.__image_format.endswith(ImageFormat.JPG)):
169     self.__command = 'jpeg'
170     elif(self.__image_format.endswith(ImageFormat.BMP)):
171     self.__command = ImageFormat.BMP
172     elif(self.__image_format.endswith(ImageFormat.PNM)):
173     self.__command = ImageFormat.PNM
174     elif(self.__image_format.endswith(ImageFormat.PNG)):
175     self.__command = ImageFormat.PNG
176     elif(self.__image_format.endswith(ImageFormat.TIF)):
177 jongui 1194 self.__command = 'tiff'
178 jongui 1193 else:
179 jongui 1199 raise IOError("ERROR: '" + self.__image_format + \
180     "' is an invalid image format.")
181 jongui 1193
182    
183     def __generateParameterFile(self):
184     """
185     Write the list of parameters into the file.
186     """
187    
188 jongui 1197 if(self.__image_range_used == True): # Image range was provided.
189     input = self.__image_prefix + '*.' + self.__image_format + ' [' + \
190     self.__first_image_number + '-' + \
191     self.__last_image_number + ']\n'
192     else: # Image list was provided
193     input = self.__images
194    
195 jongui 1193 parameter_file = open(self.__parameter_file, 'w')
196    
197     parameter_file.write('PATTERN IBBPBBPBBPBBPBBP\n' +
198     'OUTPUT ' + self.__movie + '\n'
199     'BASE_FILE_FORMAT PNM\n' +
200     'INPUT_CONVERT ' + self.__command + 'topnm *\n' +
201     'GOP_SIZE 16\n' +
202     'SLICES_PER_FRAME 10\n' +
203     'INPUT_DIR ' + self.__input_directory + '\n' +
204     'INPUT\n' +
205 jongui 1197 input +
206 jongui 1193 'END_INPUT\n' +
207     'PIXEL HALF\n' +
208     'RANGE 10\n' +
209     'PSEARCH_ALG LOGARITHMIC\n' +
210     'BSEARCH_ALG CROSS2\n' +
211     'IQSCALE 8\n' +
212     'PQSCALE 10\n' +
213     'BQSCALE 25\n' +
214     'REFERENCE_FRAME DECODED\n' +
215     'FORCE_ENCODE_LAST_FRAME\n' +
216     'ASPECT_RATIO 1\n' +
217     'FRAME_RATE 24')
218    
219     parameter_file.close()
220    

  ViewVC Help
Powered by ViewVC 1.1.26