comparison python/ffslice.py @ 754:f011ec45b8e8

add example load type interface
author Jeff Hammel <k0scist@gmail.com>
date Fri, 03 Jul 2015 21:07:03 -0700
parents 9681a0bd74d6
children
comparison
equal deleted inserted replaced
753:05fef8e5b8a9 754:f011ec45b8e8
137 def format_seconds(self, seconds): 137 def format_seconds(self, seconds):
138 """format seconds to string""" 138 """format seconds to string"""
139 if self.options.hhmmss: 139 if self.options.hhmmss:
140 return format_seconds_to_hhmmss(seconds) 140 return format_seconds_to_hhmmss(seconds)
141 return '{:.2}'.format(seconds) 141 return '{:.2}'.format(seconds)
142
143 def slice(self):
144 """
145 iterates over all the specified clips and slices them as per input params.
146 The sliced clips are stored under the provided coommand line destinati
147 on directory or current working dir
148 """
149
150 for clip_path in self.options.clip_paths:
151 print "***** Processing {0}".format(clip_path)
152
153 if not os.path.exists(clip_path):
154 print "File not found! skipping {0}".format(clip_path)
155 continue
156
157 #making sure the slice time is within bounds of the clip duration
158 duration = self.duration(clip_path)
159 print "Duration: {0}".format(duration)
160 if self.options.slice_length_sec > duration:
161 print "Skipping {0}, slice_time {1} is GREATER than file duration {2} ".format(clip_path,self.options.slice_length_sec ,duration)
162 continue
163
164 #calculating the number slices to create
165 num_slices = 0
166 if self.options.num_slices:
167 num_slices = min (self.options.num_slices, int(duration/(self.options.slice_length_sec)))
168 else: #number of slice were not specified
169 num_slices = int(duration/(self.options.slice_length_sec))
170 print "Slicing in {0} parts, {1} seconds each".format(num_slices,self.options.slice_length_sec)
171
172 hh = 0
173 mm = 0
174 ss = 0
175 start_time_secs = 0
176 [out_filename,out_file_ext] = clip_path.split("/")[-1].split(".") #assuming the file path to be something like /df/dsf/dsf/dsf.mp4
177 ensure_dir(self.options.out_directory)
178 #creating slices
179 for i in range(num_slices):
180 [hh,mm,ss] = self.format_seconds_to_hhmmss(start_time_secs)
181 out_file_path = "{0}/{1}_{2}.{3}".format(self.options.out_directory,out_filename,i,out_file_ext)
182 command = "ffmpeg -ss {0}:{1}:{2} -t {3} -i {4} -q {5} -strict -2 {6}".format(hh,mm,ss,self.options.slice_length_sec,
183 clip_path,1, out_file_path)
184
185 try:
186 output = subprocess.call(command, shell=True)
187 except subprocess.CalledProcessError as e:
188 print (e.output)
189 raise
190 start_time_secs += self.options.slice_length_sec
142 191
143 192
144 def main(args=sys.argv[1:]): 193 def main(args=sys.argv[1:]):
145 """CLI""" 194 """CLI"""
146 195
161 else: 210 else:
162 print ('{} : {}'.format(clip, 211 print ('{} : {}'.format(clip,
163 parser.format_seconds(_duration))) 212 parser.format_seconds(_duration)))
164 sys.exit(returncode) 213 sys.exit(returncode)
165 214
215 parser.slice()
216
166 if __name__ == '__main__': 217 if __name__ == '__main__':
167 main() 218 main()
168 219