import sys from time import millitimer def main(): filename = 'film2.video' if sys.argv[1:]: filename = sys.argv[1] f = open(filename, 'r') line = f.readline() w, h = eval(line[:-1]) w2, h2 = w/2, h/2 size = w2 * h2 data = data2 = t = t0 = t1 = None nframes = 0 t0 = millitimer() while 1: line = f.readline() if not line: break t = eval(line[:-1]) data = None data = f.read(size) if len(data) <> size: raise EOFError dostat(w2, h2, data) nframes = nframes+1 t1 = millitimer() t = 0.001 * (t1-t0) fps = 0.1 * int(10*nframes/t) print nframes, 'frames in', t, 'sec. =', fps, 'frames/sec.' def dostat(w, h, data): print stat3(w, h, data) # Statistic op 1: frequencies of byte values def stat1(w, h, data): bins = [0]*256 for c in data: i = ord(c) bins[i] = bins[i]+1 prbins(bins) def prbins(bins): import string s = '' tot = 0 for i in range(256): tot = tot + bins[i] s = s + string.rjust(`bins[i]`, 4) if len(s) >= 4*16: print s, string.rjust(`tot`, 7) s = '' tot = 0 # Statistic op 2: run lengths def stat2(w, h, data): runs = [] for y in range(h): count, value = 0, ord(data[y*w]) for c in data[y*w : y*w+w]: i = ord(c) if i <> value: runs.append(count, value) count, value = 0, i count = count+1 runs.append(count, value) print len(runs), 'runs =', 0.1 * (10*w*h/len(runs)), 'bytes/run' # Statistic op 3: frequencies of byte differences def stat3(w, h, data): bins = [0]*256 prev = 0 for c in data: i = ord(c) delta = divmod(i-prev, 256)[1] prev = i bins[delta] = bins[delta]+1 prbins(bins) # Try packing def packblock(w, h, data): res = '' for y in range(h): res = res + packline(data[y*w : y*w+w]) return res def packline(line): bytes = [] for c in line: bytes.append(ord(c)) prev = bytes[0] i, n = 1, len(bytes) while i < n: for pack in (0, 2, 4, 8): if pack == 0: lo, hi = 0, 0 else: hi = pow(2, pack-1)-1 lo = -hi-1 p = prev j = i count = 0 while j < n: x = bytes[j] delta = byte(x-p) if not lo <= delta <= hi: break p = x j = j+1 def byte(x): return divmod(x, 256)[1] main()